如何组织CSS

三层结构:base+common+page

分层目的:减少代码量;便于多人开发和维护

1.base层

最底层,一般设置文件为只读,与具体的UI无关,提供:

  1. reset功能。因为浏览器对元素的默认样式不同,使用reset可以覆盖掉浏览器的默认样式,使浏览器的起点尽量一致。
  2. 粒度最小的通用原子类,避免重复写某些样式,减少代码量。

推荐代码:

  1. /*CSS reset*/
  2. body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,
  3. blockquote,th,td {margin:0;padding:0;}
  4. table {border-collapse:collapse;border-spacing:0;}
  5. fieldset,img {border:0}
  6. address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal}
  7. ol,ul {list-style:none}
  8. caption,th {text-align:left}
  9. h1,h2,h3,h4,h5,h6 {font-size:100%;font-weight:normal}
  10. q:before,q:after {content:''}
  11. abbr,acronym { border:0}
  12. /*文字排版*/
  13. .f12{font-size:12px}
  14. .f13{font-size:13px}
  15. .f14{font-size:14px}
  16. .f16{font-size:16px}
  17. .f20{font-size:20px}
  18. .fb{font-weight:bold}
  19. .fn{font-weight:normal}
  20. .t2{text-indent:2em}
  21. .lh150{line-height:150%}
  22. .lh180{line-height:180%}
  23. .lh200{line-height:200%}
  24. .unl{text-decoration:underline;}
  25. .no_unl{text-decoration:none;}
  26. /*定位*/
  27. .tl{text-align:left}
  28. .tc{text-align:center}
  29. .tr{text-align:right}
  30. .bc{margin-left:auto;margin-right:auto;}
  31. .fl{float:left;display:inline}
  32. .fr{float:right;display:inline}
  33. .cb{clear:both}
  34. .cl{clear:left}
  35. .cr{clear:right}
  36. .clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}
  37. .clearfix{display:inline-block}* html .clearfix{height:1%}.clearfix{display:block}
  38. .vm{vertical-align:middle}
  39. .pr{position:relative}
  40. .pa{position:absolute}
  41. .abs-right{position:absolute;right:0}
  42. .zoom{zoom:1}
  43. .hidden{visibility:hidden}
  44. .none{display:none}
  45. /*长度高度*/
  46. .w10{width:10px}
  47. .w20{width:20px}
  48. .w30{width:30px}
  49. .w40{width:40px}
  50. .w50{width:50px}
  51. .w60{width:60px}
  52. .w70{width:70px}
  53. .w90{width:90px}
  54. .w100{width:100px}
  55. .w200{width:200px}
  56. .w250{width:250px}
  57. .w300{width:300px}
  58. .w400{width:400px}
  59. .w500{width:500px}
  60. .w600{width:600px}
  61. .w700{width:700px}
  62. .w800{width:800px}
  63. .w{width:100%}
  64. .h50{height:50px}
  65. .h80{height:80px}
  66. .h100{height:100px}
  67. .h200{height:200px}
  68. .h{height:100%}
  69. /*边距*/
  70. .m10{margin:10px}
  71. .m15{margin:15px}
  72. .m30{margin:30px}
  73. .mt5{margin-top:5px}
  74. .mt10{margin-top:10px}
  75. .mt15{margin-top:15px}
  76. .mt20{margin-top:20px}
  77. .mt30{margin-top:30px}
  78. .mt50{margin-top:50px}
  79. .mt100{margin-top:100px}
  80. .mb5{margin-bottom:5px}
  81. .mb10{margin-bottom:10px}
  82. .mb15{margin-bottom:15px}
  83. .mb20{margin-bottom:20px}
  84. .mb30{margin-bottom:30px}
  85. .mb50{margin-bottom:50px}
  86. .mb100{margin-bottom:100px}
  87. .ml5{margin-left:5px}
  88. .ml10{margin-left:10px}
  89. .ml15{margin-left:15px}
  90. .ml20{margin-left:20px}
  91. .ml30{margin-left:30px}
  92. .ml50{margin-left:50px}
  93. .ml100{margin-left:100px}
  94. .mr5{margin-right:5px}
  95. .mr10{margin-right:10px}
  96. .mr15{margin-right:15px}
  97. .mr20{margin-right:20px}
  98. .mr30{margin-right:30px}
  99. .mr50{margin-right:50px}
  100. .mr100{margin-right:100px}
  101. .p10{padding:10px;}
  102. .p15{padding:15px;}
  103. .p30{padding:30px;}
  104. .pt5{padding-top:5px}
  105. .pt10{padding-top:10px}
  106. .pt15{padding-top:15px}
  107. .pt20{padding-top:20px}
  108. .pt30{padding-top:30px}
  109. .pt50{padding-top:50px}
  110. .pb5{padding-bottom:5px}
  111. .pb10{padding-bottom:10px}
  112. .pb15{padding-bottom:15px}
  113. .pb20{padding-bottom:20px}
  114. .pb30{padding-bottom:30px}
  115. .pb50{padding-bottom:50px}
  116. .pb100{padding-bottom:100px}
  117. .pl5{padding-left:5px}
  118. .pl10{padding-left:10px}
  119. .pl15{padding-left:15px}
  120. .pl20{padding-left:20px}
  121. .pl30{padding-left:30px}
  122. .pl50{padding-left:50px}
  123. .pl100{padding-left:100px}
  124. .pr5{padding-right:5px}
  125. .pr10{padding-right:10px}
  126. .pr15{padding-right:15px}
  127. .pr20{padding-right:20px}
  128. .pr30{padding-right:30px}
  129. .pr50{padding-right:50px}
  130. .pr100{padding-right:100px}

这样写有很好好处,比如我要实现:一个向左浮动,长宽都是50的div,只需要这样写:

  1. <div class="div2 w50 h50 fl"></div>

不用再去样式表里挨个定义了,提高了开发效率,也提高了代码可读性。

再比如我想把这个div抱在一个父级div中且闭合浮动,只需要给父级div加一个class就OK并且兼容IE:

  1. <div class="div1 clearfix">
  2. <div class="div2 w50 h50 fl"></div>
  3. </div>

2.common层

提供组件级的CSS类。我们将网页内的元素拆成一个个相对独立的小模块,其中有些模块会大量重复,把大量重复的模块抽取出来放到common.css

3.page层

提供页面层架的CSS类。高度重用的模块放到了common层,那剩下的非高度重用的模块就放到page层。注意page层还是应该越精简越好,能用common层和base层解决的就不要用page层解决。

模块化CSS

两条原则:

  1. 模块与模块之间尽量不要包含相同的部分,如果包含相同的部分,则把相同的部分提取出来,形成一个新的模块。
  2. 模块应在保证数量尽可能少的情况下,做到尽可能简单,提高重用性。

模块的功能越简单,弹性越高,重用性越高,但是会造成模块的数量增加,维护难度增加,应该在”数量少“和“功能简单”之间找到平衡点。

CSS命名

命名最好体现从属关系,推荐大小写和划线混用,大小写区分单词,下划线表明从属,比如下面的列表

  1. <ul class="timeList">
  2. <li>8月</li>
  3. <li>9月</li>
  4. <li class="timeList-lastItem">10月</li>
  5. </ul>

多人合作的时候,给没人分配一个ID可以避免命名冲突

多用组合,少用继承

将一个复杂的类分成简单的类,类之间没有继承关系,通过这些类的组合实现需要的功能,这样代码的体积,扩展的弹性都要更好。

处理上下margin

由于上下margin会重叠,因此最好统一使用margin-top或者margin-bottom来避免margin重合。

避免滥用子选择器

使用子选择器会增加CSS选择符的权重,为了保证样式容易被覆盖,提高可维护性,CSS选择器的权重尽可能低。如果选择符的权重过高,可能会造成样式的覆盖。少用子选择器就要多添加class。

CSS常见问题

1.尽量用class,少用id

原因:

  1. id选择器的权重高,样式不容易被覆盖。
  2. id在网页中只能出现一次,不容易扩展。

2.CSS hack

hack原理:

由于不同的浏览器和浏览器各版本对CSS的支持及解析结果不一样,以及CSS优先级对浏览器展现效果的影响,我们可以据此针对不同的浏览器情景来应用不同的CSS。除非迫不得已,否则尽量不用CSS hack

  1. IE条件注释
  2. 选择符前缀
  3. 样式属性前缀

relative,absolute,float

绝对定位和浮动都会让元素脱离正常的文档流,不同的是,绝对定位会使元素浮起来,也就是z-index>0,但是浮动仍然让元素在z-index=0层。

《编写高质量代码》CSS部分总结的更多相关文章

  1. 编写高质量代码——html、css、javascript

    [编写高质量代码]1.注释的必要性:增加代码的可读性.2.web标准:由一系列的标准组合而成,其核心理念是将网页的结构.样式.行为分离,所以他可分为:结构标准.样式标准和行为标准.3.一个符合标准的网 ...

  2. 《编写高质量代码--Web前端开发修炼之道》读书笔记

    前言 这两周参加公司的新项目,采用封闭式开发(项目成员在会议室里开发),晚上加班到很晚,所以没时间和精力写原创博客了,今天就分享下这篇<编写高质量代码--Web前端开发修炼之道>读书笔记吧 ...

  3. 《编写高质量代码:Web 前端开发修炼之道》 笔记与读后感

    编写高质量代码:Web 前端开发修炼之道/曹刘阳著. —北京:机械工业出版社,2010.5 第一版 涉及到的知识点: 1. CSS Sprites 在国内很多人叫css精灵,是一种网页图片应用处理方式 ...

  4. 编写高质量代码:Web前端开发修炼之道(一)

    最近老大给我们买来一些技术方面的书籍,其实很少搬着一本书好好的完整的看完过,每每看电子档的,也是打游击式的看看这章,瞅瞅那章,在那5本书中挑了一本比较单薄的<编写高质量代码web前端开发修炼之道 ...

  5. 每周一书-编写高质量代码:改善C程序代码的125个建议

    首先说明,本周活动有效时间为2016年8月28日到2016年9月4日.本周为大家送出的书是由机械工业出版社出版,马伟编著的<编写高质量代码:改善C程序代码的125个建议>. 编辑推荐 10 ...

  6. 编写高质量代码改善C#程序的157个建议——导航开篇

    前言 由于最近工作重心的转移,原来和几个同事一起开发的项目也已经上线了,而新项目就是在现有的项目基础上进行优化延伸扩展.打个比方,现在已经上线的项目行政案件的Web管理网站(代码还没那么多相比较即将要 ...

  7. 博友的 编写高质量代码 改善java程序的151个建议

    编写高质量代码 改善java程序的151个建议 http://www.cnblogs.com/selene/category/876189.html

  8. 编写高质量代码--改善python程序的建议(六)

    原文发表在我的博客主页,转载请注明出处! 建议二十八:区别对待可变对象和不可变对象 python中一切皆对象,每一个对象都有一个唯一的标识符(id()).类型(type())以及值,对象根据其值能否修 ...

  9. 编写高质量代码--改善python程序的建议(八)

    原文发表在我的博客主页,转载请注明出处! 建议四十一:一般情况下使用ElementTree解析XML python中解析XML文件最广为人知的两个模块是xml.dom.minidom和xml.sax, ...

  10. 《编写高质量代码:改善Python程序的91个建议》读后感

    编写高质量代码:改善Python程序的91个建议  http://book.douban.com/subject/25910544/ 1.(建议16)is 用于判断两个对象的id是否相等,==才是判断 ...

随机推荐

  1. CodeForces 456D&455B--A Lot of Games(Trie+博弈)

    题意:给n个字符串.进行k次游戏.每局开始,字符串为空串,然后两人轮流在末尾追加字符,保证新的字符串为集合中某字符串的前缀,不能操作者输,新一轮由上一句输的人先手. 题解: #看到此题毫无头绪,队友写 ...

  2. 函数 stat() 详解

    先看看MSDN的解釋: stat(): Get status information on a file. Parameters:     path:  pointer to a string con ...

  3. hdoj 2817 A sequence of numbers【快速幂】

    A sequence of numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  4. [Objective-c 基础 - 2.9] 类的本质

    A.概念 类对象:类也是一个对象,是Class类型的对象 实例对象:创建的对象,有一个isa指针指向类   B.操作 获取内存中的内对象 1. 使用实例对象获取 Class c = [p class] ...

  5. 转载 DNS查询流程简介

    转载请注明出处:http://blog.csdn.net/luotuo44/article/details/45545059 DNS(domain name system),读者们或多或少都听过,就是 ...

  6. Integer的缓存机制

    Java api 中为了提高效率,减少资源的浪费,对内部的Integer类进行了缓存的优化,通俗的说就是把-127至128这个范围内的数提前加载到内存,当我们需要的时候,如果正好在这个范围之内,就会直 ...

  7. function和感叹号,运算符号的转化

    1.下面的程序经过运算之后,a为true,这个很好理解,但是函数怎么会运行呢? var a = !function(){ alert('message'); }(); console.log(a); ...

  8. thinkphp的目录结构

    ├─ThinkPHP.php 框架入口文件 ├─Common 框架公共文件 ├─Conf 框架配置文件 ├─Extend 框架扩展目录 ├─Lang 核心语言包目录 ├─Lib 核心类库目录 │ ├─ ...

  9. Notes(一)

    Numerous experimental measurements in spatially complex systems have revealed anomalous diffusion in ...

  10. ios基础知识

    1获取系统语言设置 NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults]; NSArray *languages = ...