css樣式污染


框架雖好,但需求千奇百怪,有時候框架的樣式遠遠不滿足需求,我們就需要大量的通過css來完成。

但是,css一個寫不好,污染全局,可就出大事了。

定義css的樣式時,盡量少用不用標簽選擇器

 css類命名要語義化,個性化。

比如一個add按鈕,通過個性化的定義,可以更好的區分元素,也方便修改查看時定位

//不推薦
 <button class="add-btn"></button>
//推薦
<button class="mymoney-add-btn"></button>

有時候會同意規定前綴來區分樣式庫,比如‘ui-’,‘js-’

 推薦一種css命名方法:BEM命名規范

BEM - Block Element Modfier

  • Block 塊:可以根據元素內容划分
    • 例如: header,menu,checkbox,input
  • Element 元素:塊的一部分
    • 例如:header title ,menu item,checkbox caption,input icon
  • Modfier 修飾:修飾樣式的描述
    • 例如:disabled,highlighted,checked,fixed,active

<button class="footer-btn-disabled">
<input type="radio" class='form-radio-checked'>

但是,就算再怎么花樣的命名,當項目好幾個人做的時候或者樣式過多的時候,還是沒法保證每個元素的class名都不一樣。

那么可以通過父元素或者祖先元素進行限定

html

<div id="content" class="home-content-inner">
  <div class="home-modal-header" >
    <h4 class="home-modal-title">hello world</h4>
  </div>
  <div class="modal-body" >
    <div class="modal-container" id='modalContent'></div>
  </div>
    <div class="modal-footer">
        <div class="modal-button-group">
           <button type="button" class="btn btn-block btn-active">Submit</button
        </div>
    </div>
</div>

css

.home-content-inner{
 width:100%;
} 
.home-content-inner .home-modal-header{
  padding:0 10px;
}
.home-content-inner .home-modal-header.home-modal-title {
font-size:14px;
}

前面的限制越多,樣式也就越精確的渲染,也就避免了css污染。

但是也有缺點,太冗余了。每個樣式前面都加限定,代碼看着又長又笨,如下面的這一條。

.order-sim-content-inner .pp-number .input-group .form-clear-input {
    opacity: 0;
}

這時候,就不得不說css預處理器——Sass和Less。

Sass和Less都是在css的基礎上進行擴展,不同之處在於Less是基於JavaScript,是在客戶端處理的;Sass是基於Ruby的,是在服務器端處理的。

兩者都可以實現嵌套規則,實現上面的樣式,在less里就可以寫成如下的形式,編譯后的css與上面是一樣的。可見,預編譯器可以優化很多冗余的代碼。

.home-content-inner{
   width:100%;
  .modal-header{
    padding:0 10px;
   .modal-title{
     font-size:14px;
    }
  }
}

雖然改樣式痛苦十分,但是css博大精深,所以還是好好學習吧!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM