使用vue開發項目時,發現style標籤中存在一個屬性scoped。
scoped 屬性是 HTML5 中的新屬性,是一個布爾屬性。如果使用該屬性,則樣式僅僅應用到 style 元素的父元素及其子元素。
作用:實現組件的私有化,不對全局造成樣式污染,表示當前style屬性只屬於當前模塊。
原理:scoped會在DOM結構及css樣式上加上唯一性的標記【data-v-something】屬性,即CSS帶屬性選擇器,以此完成類似作用域的選擇方式,從而達到樣式私有化,不污染全局的作用。
scoped使用雖然方便但是我們需要慎用,因爲在我們需要修改公共組件(三方庫或者項目定製的組件)的樣式的時候,scoped往往會造成更多的困難,需要增加額外的複雜度。
以elementUI爲例,在使用scoped會出現 CSS 設置不起效的問題,無法通過 CSS 修改組件的樣式。可以使用下面的方法來解決。
(1)使用 >>> 可以穿透 scoped 屬性,修改其他第三方組件的樣式。
外層 >>> 第三方組件{}
(2)使用 sass 或 less 的樣式穿透 /deep/ 。
外層 /deep/ 第三方組件{}
(3)使用兩個 style 標籤,一個帶 scoped 屬性,一個不帶 scoped 屬性,用來修改第三方組件的樣式。
在樣式中,把【.name-input】換成【.el-input】,【.address-select】換成【.el-select】也可以。注意找到外層即可。