CSS工程化

目的

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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • CSS 预处理器技术已经非常的成熟,而且也涌现出了越来越多的 CSS 的预处理器框架。本文向你介绍使用最为普遍的三...
    Mx勇阅读 5,151评论 0 7
  • 再谈CSS 预处理器2016-09-09 Justineo JavaScript转自:http://efe.bai...
    抓住时间的尾巴吧阅读 5,561评论 0 2
  • 基础 声明变量 普通变量 默认变量 变量覆盖:只需要在默认变量之前重新声明下变量即可 变量的调用 局部变量和全局变...
    Jill1231阅读 5,092评论 0 1
  • 1、垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,...
    kiddings阅读 8,401评论 0 11
  • 畢業一年。 一邊迷茫,一邊追夢,一直搖擺不定中。 小的時候就想當一名老師,也許是因為覺得從一年級就教我的秦老師特別...
    哆啦and梦想阅读 1,535评论 0 0

友情链接更多精彩内容