《编写高质量代码》CSS部分总结

如何组织CSS

三层结构:base+common+page
分层目的:减少代码量;便于多人开发和维护

1.base层

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

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

推荐代码:

/*CSS reset*/
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,
blockquote,th,td {margin:0;padding:0;}
table {border-collapse:collapse;border-spacing:0;}
fieldset,img {border:0}
address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal}
ol,ul {list-style:none}
caption,th {text-align:left}
h1,h2,h3,h4,h5,h6 {font-size:100%;font-weight:normal}
q:before,q:after {content:''}
abbr,acronym { border:0}
 
/*文字排版*/
.f12{font-size:12px}
.f13{font-size:13px}
.f14{font-size:14px}
.f16{font-size:16px}
.f20{font-size:20px}
.fb{font-weight:bold}
.fn{font-weight:normal}
.t2{text-indent:2em}
.lh150{line-height:150%}
.lh180{line-height:180%}
.lh200{line-height:200%}
.unl{text-decoration:underline;}
.no_unl{text-decoration:none;}
 
/*定位*/
.tl{text-align:left}
.tc{text-align:center}
.tr{text-align:right}
.bc{margin-left:auto;margin-right:auto;}
.fl{float:left;display:inline}
.fr{float:right;display:inline}
.cb{clear:both}
.cl{clear:left}
.cr{clear:right}
.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}
.clearfix{display:inline-block}* html .clearfix{height:1%}.clearfix{display:block}
.vm{vertical-align:middle} 
.pr{position:relative}
.pa{position:absolute}
.abs-right{position:absolute;right:0}
.zoom{zoom:1} 
.hidden{visibility:hidden}  
.none{display:none}
 
/*长度高度*/
.w10{width:10px}
.w20{width:20px}
.w30{width:30px}
.w40{width:40px}
.w50{width:50px}
.w60{width:60px}
.w70{width:70px}
.w90{width:90px}
.w100{width:100px}
.w200{width:200px}
.w250{width:250px}
.w300{width:300px}
.w400{width:400px}
.w500{width:500px}
.w600{width:600px}
.w700{width:700px}
.w800{width:800px}
.w{width:100%}
.h50{height:50px}
.h80{height:80px}
.h100{height:100px}
.h200{height:200px}
.h{height:100%}
 
/*边距*/
.m10{margin:10px}
.m15{margin:15px}
.m30{margin:30px}
.mt5{margin-top:5px}
.mt10{margin-top:10px}
.mt15{margin-top:15px}
.mt20{margin-top:20px}
.mt30{margin-top:30px}
.mt50{margin-top:50px}
.mt100{margin-top:100px}
.mb5{margin-bottom:5px}
.mb10{margin-bottom:10px}
.mb15{margin-bottom:15px}
.mb20{margin-bottom:20px}
.mb30{margin-bottom:30px}
.mb50{margin-bottom:50px}
.mb100{margin-bottom:100px}
.ml5{margin-left:5px}
.ml10{margin-left:10px}
.ml15{margin-left:15px}
.ml20{margin-left:20px}
.ml30{margin-left:30px}
.ml50{margin-left:50px}
.ml100{margin-left:100px}
.mr5{margin-right:5px}
.mr10{margin-right:10px}
.mr15{margin-right:15px}
.mr20{margin-right:20px}
.mr30{margin-right:30px}
.mr50{margin-right:50px}
.mr100{margin-right:100px}
.p10{padding:10px;}
.p15{padding:15px;}
.p30{padding:30px;}
.pt5{padding-top:5px}
.pt10{padding-top:10px}
.pt15{padding-top:15px}
.pt20{padding-top:20px}
.pt30{padding-top:30px}
.pt50{padding-top:50px}
.pb5{padding-bottom:5px} 
.pb10{padding-bottom:10px}
.pb15{padding-bottom:15px}
.pb20{padding-bottom:20px}
.pb30{padding-bottom:30px}
.pb50{padding-bottom:50px}
.pb100{padding-bottom:100px}
.pl5{padding-left:5px}
.pl10{padding-left:10px}
.pl15{padding-left:15px}
.pl20{padding-left:20px}
.pl30{padding-left:30px}
.pl50{padding-left:50px}
.pl100{padding-left:100px}
.pr5{padding-right:5px}
.pr10{padding-right:10px}
.pr15{padding-right:15px}
.pr20{padding-right:20px}
.pr30{padding-right:30px}
.pr50{padding-right:50px}
.pr100{padding-right:100px}

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

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

不用再去样式表里挨个定义了,提高了开发效率,也提高了代码可读性。
再比如我想把这个div抱在一个父级div中且闭合浮动,只需要给父级div加一个class就OK并且兼容IE:

<div class="div1 clearfix">
        <div class="div2 w50 h50 fl"></div>
 </div>

2.common层

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

3.page层

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

模块化CSS

两条原则:

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

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

CSS命名

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

<ul class="timeList">
        <li>8月</li>
        <li>9月</li>
        <li class="timeList-lastItem">10月</li>
 </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层。

你可能感兴趣的:(高质量代码)