它可能不像其它那么重要,大部分案例你不需要擔心沖突,但大型而且復雜的CSS文件,或有很多CSS文件組成的,可能產生沖突。 選擇器一樣的情況下后面的會覆蓋前面的屬性。比如:p { color: red; } p { color: blue; } p元素的元素將是藍色,因為遵循后面的規則。 然而,你不可能經常用相同的選擇器沖突達到目的,當你使用嵌套選擇器,合理的沖突來了。比如:div p { color: red; } p { color: blue; } 也許你看起來p元素在div元素里面的顏色是藍色,就像后面p元素的規則,但是第一個選擇器的特性卻是紅色。基本上,一個選擇器越多特性,樣式沖突的時候將顯示它的樣式。 一組嵌套選擇器的實際特性可以計算出來。基本的,使用ID選擇器的值是100,使用class選擇器的值是10,每個html選擇器的值是1。它們加起來就可以計算出特性的值。 p的特性是1(一個html選擇器) div p的特性是2(兩個html選擇器) .tree的特性是10(1個class選擇器) div p.tree的特性是1+1+10=12,(兩個html選擇器,一個class選擇器) #baobab的特性是100(1個ID選擇器)
站在用戶的角度思考問題,與客戶深入溝通,找到尼瀘西網站設計與尼瀘西網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創造個性化、用戶體驗好的作品,建站類型包括:成都網站設計、成都網站制作、企業官網、英文網站、手機端網站、網站推廣、主機域名、雅安服務器托管、企業郵箱。業務覆蓋尼瀘西地區。
1.? 內聯樣式表的權值最高 1000;
2.? ID 選擇器的權值為 100
3.? Class 類選擇器的權值為 10
4.? HTML 標簽選擇器的權值為 1
一個元素的選擇器的權值是所有選擇器權值的和,沖突的時候根據權值執行,權值高的優先執行,如果權值相等,后面的會覆蓋前面的
解決方法有很多,如果可以對html改動的話,就給你需要細化的頁面元素加多一個class或者ID就行了,當然這種方法應該不是你想要的。那么接下來是不改變HTML的情況下,直接用css的方法來實現你想要的效果——
方法一 細化選擇符
假如全局是這樣來定義一個元素的樣式的:.abc {background:#000},同時這個class為abc的元素是隸屬于某個元素的,比如下面這樣的html代碼結構
div class="container"
div class="abc"/div
/div
那么在細化css里面,只需要在.abc前面加多一個父元素的選擇符就行了:
.container .abc {background:#fff}
這樣.container .abc的優先級就大于了.abc,自然細化css里面的background設置也就不會被全局CSS覆蓋了~~
方法二 提升樣式的優先級
這種方法個人不太推薦,相對而言會簡單粗暴一些。同樣是上面的例子,在細化CSS里面,只要在樣式后面加一個!important,例如這樣:
.abc {background:#fff !improtant;}
這個樣式的優先級就會默認提升到頂級,全局樣式就無法影響到它了。
方法三 改變兩個樣式的加載順序
這種方法比較簡單,就是只要把細化css加載在全局css之后就行了,這樣后面的樣式就會自動覆蓋前面的樣式。不過如果你的html里面這兩個樣式表的加載順序是先細化后全局的話,就要稍微調整一下代碼才行。
上面是一個簡單的html案例,對于同一個元素應用多個規則時,規則中可能包含沖突的聲明,在style樣式表中包含了三個規則集,每一個規則給它指定了不同的字體顏色。標題不可能同時擁有三種顏色,所以最終的效果是顯示的紅色(red)。
瀏覽器如何知道并解決聲明沖突,這其中層疊指的就是這一系列規則。它決定了如何解決沖突,是css語言的基礎。層疊會依據三種條件解決沖突。
疊層的規則是按照這種順序來考慮的,看下圖
這些規則讓瀏覽器可以以預測的方式解決css樣式規則中的沖突。
你添加到網頁里的樣式表并不是瀏覽器唯一使用的樣式表,還有其他類型或來源的樣式表。你的樣式表屬于作者樣式表,除此之外還有用戶代理樣式表,即瀏覽器默認的樣式。用戶代理樣式表優先級低,你的樣式會覆蓋它們。
用戶代理樣式表在不同瀏覽器上稍有差異,但是大體上是在做相同的事情:為標題 h1 到 h6 和段落 p 添加上下邊距,為列表 ol,ul 添加左側內邊距,為鏈接添加顏色,為元素添加各種默認字號。
瀏覽器應用了用戶代理樣式表后才會應用你的樣式表,即作者樣式表,你指定的聲明會覆蓋用戶代理樣式表里面的樣式,如果在html里鏈接了多個樣式表,那么它們的來源都相同,即屬于作者樣式表。
用戶代理樣式表因為設置了用戶需要的樣式,所以不會做出一些超出預期的事情,當不喜歡默認樣式的時候,可以在自己的樣式表里面設置別的樣式來覆蓋用戶代理樣式即可。
作為一個標準的前端打工仔,必定熟悉覆蓋代理樣式。這種做法實際上就是利用了層疊的樣式來源規則。你寫的樣式會覆蓋用戶代理樣式,因為來源不同。
樣式來源規則有一個例外,標記為重要 !important 的聲明。該聲明就會被標記為重要的聲明。
標記了 !important 的聲明會被當做更高優先級的來源,因此總體的優先級按照由高到低排列,如下所示:
如果無法用來源解決沖突聲明,瀏覽器會嘗試檢查它們的優先級。理解優先級很重要,因為作者樣式幾乎都是屬于優先級的范圍,日常工作接觸的大部分開發樣式是來自于同源,如果不理解優先級,寫出來的css樣式會被坑的很慘。
瀏覽器將優先級分為兩部分:HTML的行內樣式和選擇器的樣式。
如果HTML的style屬性寫樣式,這個聲明只會作用域當前元素。實際上行內元素屬于“帶作用域”的聲明,它會覆蓋任何來自樣式表或style標簽的樣式。行內樣式沒有選擇器,因為它們直接作用于所在的元素。
上面就是一個行內樣式,設置了顏色color為黃色yellow。
如果你希望在樣式表中覆蓋行內樣式的聲明,需要在樣式表中對應標簽下的聲明后添加 !importanta ,這樣能夠將它提升到一個更高優先級來源。但如果行內樣式也被標記為 !imortant 那就無法覆蓋它了。最好不要在行內使用 !important ,而是只在樣式表中使用 !important 。
優先級的第二部分是由選擇器優先級決定。比如,有兩個類名的選擇器比只有一個類名的選擇器優先級更高。具體可以看下面的案例。
通過比較選擇器類型來決定哪個選擇器優先值最高。
上面的樣式表中最終顯示的color顏色值為紅色(red)。
一個常用的表示優先級的方式是用數組形式來標記,通常用都好隔開每個數。比如“1,2,3”表示用1個id、2個類、2個標簽組成。優先級最高的id列為第一位,緊接著是類,最后是標簽。
我們可以通過下面的表格來查看各種選擇器和對應的優先級。
現在,通過比較數值就能快速明確決定哪個優先級更高。所以上面的順序是"1,0,0""0,2,0""0,1,3""0,0,4"。而優先級低的樣式表會被優先級高的樣式表給覆蓋。
我們日常開發不建議某個元素的樣式表寫過長的標簽名和類名連體。一般只要能夠區分優先級即可。
疊層的第三步,也是最后一步,是源碼順序。如果兩個聲明的來源和優先級相同,其中一個聲明在樣式表中出現較晚,或者位于頁面較晚引入的樣式表中,則該聲明勝出。
在上面方法中,選擇器優先級相同,都是(0,1,1),最終瀏覽器呈現的顏色color是灰色gray。
你的不能只寫一個CSS包括這幾個屬性嗎?
要不就寫一個CSS在其它要加的樣式在 td里面寫
解決方法有很多,如果可以對html改動的話,就給你需要細化的頁面元素加多一個class或者ID就行了,當然這種方法應該不是你想要的。那么接下來是不改變HTML的情況下,直接用css的方法來實現你想要的效果——\x0d\x0a方法一 細化選擇符\x0d\x0a假如全局是這樣來定義一個元素的樣式的:.abc {background:#000},同時這個class為abc的元素是隸屬于某個元素的,比如下面這樣的html代碼結構\x0d\x0a\x0d\x0a \x0d\x0a\x0d\x0a\x0d\x0a那么在細化css里面,只需要在.abc前面加多一個父元素的選擇符就行了:\x0d\x0a.container .abc {background:#fff}\x0d\x0a這樣.container .abc的優先級就大于了.abc,自然細化css里面的background設置也就不會被全局CSS覆蓋了~~\x0d\x0a\x0d\x0a方法二 提升樣式的優先級\x0d\x0a這種方法個人不太推薦,相對而言會簡單粗暴一些。同樣是上面的例子,在細化CSS里面,只要在樣式后面加一個!important,例如這樣:\x0d\x0a.abc {background:#fff !improtant;}\x0d\x0a這個樣式的優先級就會默認提升到頂級,全局樣式就無法影響到它了。\x0d\x0a\x0d\x0a方法三 改變兩個樣式的加載順序\x0d\x0a這種方法比較簡單,就是只要把細化css加載在全局css之后就行了,這樣后面的樣式就會自動覆蓋前面的樣式。不過如果你的html里面這兩個樣式表的加載順序是先細化后全局的話,就要稍微調整一下代碼才行。
回答于?2022-11-16
當前名稱:css樣式沖突,css樣式沖突怎么解決
新聞來源:http://vcdvsql.cn/article48/dsdidhp.html
成都網站建設公司_創新互聯,為您提供網站設計、品牌網站建設、網站制作、定制網站、靜態網站、虛擬主機
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯