關(guān)于iview和elementUI組件樣式覆蓋無效問題及解決
iview和elementUI組件樣式覆蓋無效
iview和elementUI是我們在用vue開發(fā)項目時比較常用到的ui組件,在我們使用第三方UI組件庫開發(fā)時有時需要對這些組件進行一些樣式修改。
為了vue頁面樣式模塊化,不對全局樣式造成污染,我們往往都會加入scoped屬性用來限制樣式的作用域,然而這也會導(dǎo)致當(dāng)我們修改部分ui組件樣式失效。為了避免這種情況,我們常用以下方式來解決。
新建一個不含scoped的style標(biāo)簽覆蓋組件樣式
不推薦使用,因為如果命名沖突會導(dǎo)致其他樣式覆蓋異常
<style scoped>
?? ?/*頁面樣式*/
</style>
// ui組件覆蓋
<style>
? .home .ivu-card-body {
? ? height: 345px;
? }
</style>深度作用選擇器( >>> )
<style scoped>
.box >>> .content {
? font-size:20px;
}
</style>/deep/ 預(yù)處理器less下使用
深度選擇器/deep/與>>>作用相同
<style scoped lang="less">
.select {
? ? ?/deep/ .ivu-card-body {
? ? ? ? width: 100%;
? ? ? }
? ? }
</style>然而最近谷歌瀏覽器對于/deep/貌似不太友好,控制臺提示/deep/將要被移除。
[Deprecation] /deep/ combinator is no longer supported in CSS dynamic profile.It is now effectively no-op, acting as if it were a descendant combinator. /deep/ combinator will be removed, and will be invalid at M65. You should remove it. See https://www.chromestatus.com/features/4964279606312960 for more details.
所以我們也可以在less下另類調(diào)用>>>,如下:
// 采用的less的轉(zhuǎn)義和變量插值
<style scoped lang="less">
@deep: ~'>>>';
.select {
? ? ?@{deep} .ivu-card-body {
? ? ? ? width: 100%;
? ? ? }
? ? }
</style>Element-ui與IView中的樣式覆蓋問題
在合作開發(fā)時,在大哥定好全局樣式之后,我們個人頁面的開發(fā)中是不可以影響到全局樣式的,是不可以的?。ú蝗粫涣R的,就算不被罵,當(dāng)你辛辛苦苦改出一個樣式的時候,一回頭,發(fā)現(xiàn)你沒動,但是樣式卻變了,你惱火么,我很惱火?。┧栽陂_發(fā)自己的頁面時,規(guī)定樣式范圍很重要。所以今天我們來講一下這個雖然很小但是很重要的知識點。
在進行自己頁面開發(fā)需要獨立樣式時請這樣使用
![]()
scoped字段的意義就是相當(dāng)于你在控制你的<div>容器時為了唯一識別而給他的一個id比如<div id="xxxx">。當(dāng)你給style加上scoped時,在編譯之后樣式就會帶上自己的id比如
![]()
這樣子之后,這個樣式就只屬于這個頁面了,不會影響到全局的樣式。
當(dāng)然,在自己編寫的容器中我們可以直接定義,但是在我們使用了其他的UI組件之后,我們會發(fā)現(xiàn),在scoped中改變的樣式并不能影響到樣式了。因為我們是在全局中對其樣式進行引入的,所以在自己規(guī)定的小區(qū)域內(nèi)的改變并不能影響到他,但是直接寫一個<style></style>在這里面進行修改則又會影響到全局的樣式。接下來我們講一下解決方法。
在Element-UI中覆蓋樣式
Element-UI跟IView覆蓋的方式有點不同。在對Element-UI的樣式進行覆蓋時,我們需要在
![]()
中進行全局影響,而不可以在
![]()
中進行修改。如果有需要的話,寫兩個,一個帶scoped,一個不帶也是可以的。
之后我們在Element-UI的組件上給他加一個父層樣式選擇器
![]()
然后在樣式中這樣進行覆蓋

這樣做,在進行樣式判斷的時候會順著層次順序,只修改fatherclass下面的dialog的樣式,這樣就影響不到全局的樣式了。
在IView中覆蓋樣式
IView中,則需要在外層套接一個容器,直接在組件上增加父層樣式選擇器是不起作用的。
具體做法如下

我們在組件外面套接了一層自己的容器,之后進行樣式改變

這樣就成功了!可喜可賀,可喜可賀!
TIP:
1.定義的父層樣式選擇器可以不進行樣式的編寫,因為他們只是為了方便我們定義一個固定的影響區(qū)域。
2.如何找到我需要修改的樣式名稱
打開控制臺,去頁面上尋找

之后在

去尋找你需要修改的樣式,調(diào)節(jié)好之后直接把樣式復(fù)制到你的代碼中就可以了。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue.js表單驗證插件(vee-validate)的使用教程詳解
這篇文章主要介紹了vue.js表單驗證插件(vee-validate)的使用,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05
vue3 setup中defineEmits與defineProps的使用案例詳解
在父組件中定義String、Number、Boolean、Array、Object、Date、Function、Symbol這些類型的數(shù)據(jù),使用defineEmits會返回一個方法,使用一個變量emits(變量名隨意)去接收,本文給大家介紹vue3 setup中defineEmits與defineProps的使用案例,感興趣的朋友一起看看吧2023-10-10
Vue3+Element Plus實現(xiàn)自定義彈窗組件的全屏功能
在現(xiàn)代化的前端開發(fā)中,彈窗組件是提升用戶體驗的重要元素,本文將介紹如何使用 Vue 3 和 Element Plus 庫來創(chuàng)建一個具有全屏功能的自定義彈窗組件,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下2024-07-07
Vue中watch與watchEffect的區(qū)別詳細解讀
這篇文章主要介紹了Vue中watch與watchEffect的區(qū)別詳細解讀,watch函數(shù)與watchEffect函數(shù)都是監(jiān)聽器,在寫法和用法上有一定區(qū)別,是同一功能的兩種不同形態(tài),底層都是一樣的,需要的朋友可以參考下2023-11-11

