vue CSS樣式穿透

在開發(fā)vue項目的時候,經(jīng)常會引入組件。無論是第三方組件庫還是自定義組件,難免會遇到防止影響其他頁面上的樣式,又需要在父組件修改子組件的樣式。我用vue+ant專門為本文做了一個demo,給大家演示效果
demo.vue組件代碼如下

<template>
  <a-card title="面板">
    <a-select label-in-value :default-value="{ key: 'lucy' }" style="width: 120px" @change="handleChange">
      <a-select-option value="jack">
        Jack (100)
      </a-select-option>
      <a-select-option value="lucy">
        Lucy (101)
      </a-select-option>
    </a-select>
  </a-card>
</template>
<script>
export default {
  methods: {
    handleChange(value) {
      console.log(value) 
    }
  }
}
</script>
<style lang="less" scoped></style>

編譯運行,我們會在瀏覽器上看到一個select的選擇器。這個選擇器的寬度是默認的, 通過Chrome的開發(fā)者工具我們發(fā)現(xiàn),這個組件的div上有個類名.ant-select-selection


image.png

于是我們在style標簽中定義class選擇器,并設置它的寬度

<style lang="less" scoped>
.ant-select {
  .ant-select-selection {
    min-width: 300px;
  }
}
</style>

修改完之后,回到瀏覽器,發(fā)現(xiàn)寬度依舊沒有變化,此時通過Chrome的開發(fā)者工具查找元素,我寫的樣式多了一個[data-v-329d3c09]屬性

<style type="text/css">
.ant-select .ant-select-selection[data-v-329d3c09] {
  min-width: 300px;
}
</style>

在網(wǎng)上查了一下,原來是scoped的問題,把scoped去掉之后,樣式就編譯成功啦

image.png

去掉scoped我們是解決了樣式不編譯的問題,但從官網(wǎng)上了解到:當一個style標簽擁有scoped屬性時,它的CSS樣式就只能作用于當前的組件。通過設置該屬性,使得組件之間的樣式不互相感染,相當于實現(xiàn)了樣式模塊化。既然scoped有這么大的作用,那我們就不能去掉scoped,于是我們引入一個新的概念深度選擇器,也就是穿透。使用方法:就是在我們想穿透的選擇器前面添加:>>> 或者/deep/ 或者::v-deep。官方還說>>>可能存在問題,建議使用后兩者,我用的是less,所以用/deep/,修改后的代碼:

<style lang="less" scoped>
.ant-select {
  /deep/ .ant-select-selection {
    min-width: 300px;
  }
}
</style>

回到瀏覽器看效果,大功告成O(∩_∩)O哈哈~


image.png
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1.問題由來在使用某個組件庫中的表格組件時,查看官方文檔,有設置是否展示外邊框和列邊框,有改變列寬度等API。就是...
    橙_c9cd閱讀 1,421評論 0 1
  • 子組件: 父組件 使用 scoped 后,父組件的樣式將不會滲透到子組件中。不過一個子組件的根節(jié)點會同時受其父組件...
    手指樂閱讀 6,695評論 0 1
  • vue3-h5-template 基于 Vue3+TypeScript+ Vue-Cli4.0 + vant ui...
    云翼飛閱讀 2,879評論 1 24
  • 最近在使用 Ant design Vue的時候, 經(jīng)常會出現(xiàn)樣式無法修改的問題,在通過百度查詢后發(fā)現(xiàn)是scopre...
    wen_7ef0閱讀 6,818評論 0 0
  • 表情是什么,我認為表情就是表現(xiàn)出來的情緒。表情可以傳達很多信息。高興了當然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,895評論 2 7

友情鏈接更多精彩內(nèi)容