css樣式被覆蓋解決方案

來源:互聯網
上載者:User

標籤:style   http   color   io   os   使用   ar   檔案   sp   

剛才寫zenktodo的時候,通過動態添加class的方式修改一個div的樣式,總是不起作用。

Css代碼  
  1. #navigator {  
  2.     height: 100%;  
  3.     width: 200;  
  4.     position: absolute;  
  5.     left: 0;  
  6.     border: solid 2 #EEE;  
  7. }  
  8.   
  9. .current_block {  
  10.     border: solid 2 #AE0;  
  11. }  

尋找一些教材中(w3schools等),只說css的順序是“元素上的style” > “檔案頭上的style元素” >“外部樣式檔案”,但對於樣式檔案中的多個相同樣式的優先順序怎樣排列,沒有詳細說明。經過測試和繼續搜尋,得知優先順序如下排列:

 

1. 樣式表的元素選取器選擇越精確,則其中的樣式優先順序越高:

id選取器指定的樣式 > 類別選取器指定的樣式 > 元素類型選取器指定的樣式

所以上例中,#navigator的樣式優先順序大於.current_block的優先順序,即使.current_block是最新添加的,也不起作用。

 

2. 對於相同類型選取器指定的樣式,在樣式表檔案中,越靠後的優先順序越高

注意,這裡是樣式表檔案中越靠後的優先順序越高,而不是在元素class出現的順序。比如.class2 在樣式表中出現在.class1之後:

 

Css代碼  
  1. .class1 {  
  2.     color: black;  
  3. }  
  4.   
  5. .class2 {  
  6.     color: red;  
  7. }  

 

而某個元素指定class時採用 class="class2 class1"這種方式指定,此時雖然class1在元素中指定時排在class2的後面,但因為在樣式表檔案中class1處於class2前面,此時仍然是class2的優先順序更高,color的屬性為red,而非black。

 

3. 如果要讓某個樣式的優先順序變高,可以使用!important來指定:

 

Css代碼  
  1. .class1 {  
  2.     color: black !important;  
  3. }  
  4.   
  5. .class2 {  
  6.     color: red;  
  7. }  

 此時class將使用black,而非red。

 

對於一開始遇到的問題,有兩種解決方案:

1. 將border從#navigator中拿出來,放到一個class .block中,而.block放到.current_block之前:

 

 

Css代碼  
  1. #navigator {  
  2.     height: 100%;  
  3.     width: 200;  
  4.     position: absolute;  
  5.     left: 0;  
  6. }  
  7.   
  8. .block {  
  9.     border: solid 2 #EEE;  
  10. }  
  11.   
  12. .current_block {  
  13.     border: solid 2 #AE0;  
  14. }  

 需要預設為#navigator元素指定class="block"

 

2. 使用!important:

 

 

Css代碼  
  1. #navigator {  
  2.     height: 100%;  
  3.     width: 200;  
  4.     position: absolute;  
  5.     left: 0;  
  6.     border: solid 2 #EEE;  
  7. }  
  8.   
  9. .current_block {  
  10.     border: solid 2 #AE0 !important;  
  11. }  

 此時無需作任何其他改動即可生效。可見第二種方案更簡單一些。

css樣式被覆蓋解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.