美文网首页
CSS工程化

CSS工程化

作者: xiayujlu | 来源:发表于2017-01-03 18:33 被阅读243次

    目的

    • 提供一致,合理的开发基础
    • 应对变化
    • 提升效率

    CSS reset和normalize.css

    • CSS reset设置HTML标签的默认样式,使其在各个浏览器表现基本一致,让默认样式归零
    • normalize.css置HTML标签的默认样式,使其在各个浏览器表现基本一致保留默认样式。

    CSS模块

    • 可复用的CSS代码段
    • 与模块在HTML中的位置无关
    • (一般)与使用的HTML标签无关

    CSS模块原则

    • 面向对象(OOCSS)
      • 结构和皮肤的分离
        举个栗子: .btn(结构) .btn-info(皮肤) .btn-danger(皮肤)
      • 容器和内容的分离
    • 单一职责(SRP)
      • 尽可能的拆分成可独立复用的组件
      • 使用组合方式使用多个组件
      • 比如将布局和其他样式拆分
        举个栗子:
    /* bad example */
    .error-massage{
          display:block;
          padding:10px;
          border-top:1px solid #f00;
          border-bottom:1px solid #f00;
          background-color:#fee;
          color:#f00;
          font-weight:bold;
    }
    .success-massage{
          display:block;
          padding:10px;
          border-top:1px solid #f00;
          border-bottom:1px solid #f00;
          background-color:#efe;
          color:#0f0;
          font-weight:bold;
    }
    /* better example */
    .box{
          display:block;
          padding:10px;
    }
    .massage{
          border-top:1px solid #f00;
          border-bottom:1px solid #f00;
          font-weight:bold;
    }
    .massage-error{
          background-color:#fee;
      color:#f00;
    }
    .massage-success{
          background-color:#efe;
          color:#0f0;
    }
    
    • 开闭原则
      • 对扩展开发
      • 对修改封闭
        举个栗子:
    .box{
          display:block;
          padding:10px;
    }  
    /* bad example */
    .content .box{
          padding:20px;
    }
    /* better example */
    .box-large{
          padding:20px;
    }
    
    • DRY(Don't Repeat Yourself)
      举个栗子:
    /* bad example */
    selector{
          border-top:1px solid #eee;
          border-left:1px solid #eee;
          border-bottom:1px solid #eee;
    }
    /* better example */
    selector{
          border:1px solid #eee;
          border-right:none;
    }
    

    命名Naming

    • 基于功能
      • 它是用来做什么的
      • .btn/.list/.form/.external-link
    • 基于内容
      • 元素里面放置什么内容
      • .news/.help/.user-info
    • 基于视觉
      • 看起来是什么样
      • .nowrap

    命名原则

    • 优先使用基于功能的命名
      样式与功能无关
    • 中小型网站可以基于内容命名
    • 大型网站可以使用基于视觉命名
      不要使用太具体的样式

    命名规范

    BEM

    • Block
    • Element
    • Modifer
      举个栗子
    <!-- Block(moudle/compuent) --> 
     <nav class="tabs">
     </nav>
    <!-- Element --> 
          <a href="#" class="tabs_items">HTML</a>
          <a href="#" class="tabs_items">CSS</a>
          <a href="#" class="tabs_items">JavaScript</a>
    <!-- Modifer(修饰) --> 
     <nav class="tabs tabs--stacked">
            <a href="#" class="tabs_items tabs_items--active">HTML</a>
     </nav>
      <!-- .block__element---modifer--> 
    <nav class="tabs tabs--stacked">
          <a href="#" class="tabs_items tabs_items--active">HTML</a>
          <a href="#" class="tabs_items" class="tabs-items">CSS</a>
          <a href="#" class="tabs_items">JavaScript</a>
      </nav>
    

    编写简洁易维护的CSS代码

    CSS预处理器

    • less
    • Sass
    • Stylus
    • PostCSS

    相关文章

      网友评论

          本文标题:CSS工程化

          本文链接:https://www.haomeiwen.com/subject/xodnvttx.html