在vue中使用時,發(fā)現(xiàn)有的樣式不能被修改缩多,經(jīng)查閱驗證井仰,記錄如下:
??使用scope屬性實際是在所用的組件上加了唯一標識符類似“[data-v-fa0c3847]”這樣,雖然使用less的嵌套方式來寫樣式狐援,但標識符只會加在被解析之后當前元素上。
在使用過程中發(fā)現(xiàn)究孕,有時設(shè)置樣式是沒有效果的啥酱,經(jīng)分析發(fā)現(xiàn),scope只對當前頁面直接使用的標簽有效厨诸。
什么意思呢镶殷?一個vue文件,不管是HTML原生標簽微酬,還是使用了其他自己編寫的組件绘趋,最終都是以標簽形式展現(xiàn)的颤陶,如,如果在當前頁面引入了MyComponent組件陷遮,那么標識符只會加在MyComponent組件的根標簽上滓走,那么,在當前頁面下設(shè)置MyComponent組件內(nèi)部元素的樣式就是無效的帽馋。
比如MyComponent內(nèi)部有個input標簽搅方,根據(jù)style解析規(guī)則,在當前頁面設(shè)置input樣式后會在input后加上標識符‘[data-v-fa0c3847]’绽族,而實際上vue文件解析后姨涡,唯一標識符只會加在當前頁面直接使用的標簽MyComponent的根元素上,因此style解析后的input[data-v-fa0c3847]{...}這樣的樣式規(guī)則是匹配不到我們本意上要匹配的input元素的吧慢。這就是“某些”樣式設(shè)置失效的原因绣溜。
如果非要為當前頁面使用的組件的內(nèi)部元素添加特殊樣式的話,只能去掉scope屬性再使用比較原始的方法限定css的作用域了娄蔼,比如在當前vue文件的根元素上添加獨特的類名怖喻,將所有樣式寫在該類下。