SlideShare a Scribd company logo
1 of 58
面向对象的CSS 财付通  jamiexie Twitter: @treblam    Blog: http://jeekundo.com/
Why O,O? 加强代码重用 程序员第一美德:懒惰 DRY (Don’t repeat yourself)  能只做一次的事情绝不做第二次
What? “像是语言的进化,它让CSS更强大” 一种可重用和可维护的CSS书写方式
作用 ,[object Object]
方便维护
减小CSS体积
提升渲染效率
增强网站一致性,[object Object]
类 .media {overflow:hidden;_overflow:visible;zoom:1;margin:10px;} .media .bd{display:table-cell; zoom:1;} .media .img{float:left;/*margin-right: 10px;*/} .media .imgimg{display:block;} .media .imgExt{float:right; /*margin-left: 10px;*/} 实例 <div class="media">     <a href=“#” class=“img”>        <imgsrc="myImg.png" alt=“" />    </a>     <div class=“bd">@somebody 30 minutes ago</div>  </div>
封装 不要直接定义子节点 .tr .mod .inner {…} .mod .tr {…} .mod .bl {…} 而不是 .inner {} .tr {} .bl {} .bl .inner
继承 从一般到特殊的过程,把共性声明放到父类中, 把特性声明代码放入到子类中
假如CSS支持继承 在样式表里面声明要扩展的Class .module {     margin:10px;     width:100px; float:left; } .saleModule{ extends: module;    font-size:14px; overflow:hidden; } <div class=“saleModule”>… …</div>
而实际情况是 .module {     margin:10px;     width:100px; } .saleModule{     font-size:14px; overflow:hidden; float:left; } 通过给根元素设置多个Class来扩展对象,使用多Class来模拟OO <div class=“module saleModule”>… …</div>
Nicole Sullivan: 名称可能使人迷惑 不要把OOCSS和OOP的特性做一对一的比较
两条基本原则 结构和皮肤相分离 容器和内容相分离
结构和皮肤相分离 将结构和皮肤分别交给两个class来控制
控制结构的class:处理用于展现目的的小元素(oocss中的b标签)的位置、浏览器bug和所有比较复杂的问题 <div class="modsimpleExt">				     <b class="top">        <b class="tl"></b>        <b class="tr"></b>    </b>     <div class="inner">					         <div class="hd">						     <h3>simpleExt</h3>         </div>         <div class="bd">             <p>Body</p>         </div>     </div>     <b class="bottom">        <b class="bl"></b>        <b class="br"></b>    </b>			 </div> 控制皮肤的class:处理比较简单的问题,如color、border、background-image等等 多个皮肤重用一种结构,使得复杂的结构可以重用,皮肤的修改工作变得很简单
容器和内容相分离 解除容器和内容之间的依赖关系
<div class="shopRank">                         <h3>火热销售排行榜</h3>     <ul>         <li>…</li>         ...            </ul> </div> .shopRankul {} .shopRankli {} <div class="shopRank">                         <h3>火热销售排行榜</h3>     <ul class=“rankList”>         <li>…</li>         ...            </ul> </div> .rankList {} .rankListli {} 后者解除和容器的依赖关系,便于重用, 可以从一个容器转移到任意容器
做页面就像堆积木 先造积木,再建房子
看这个页面片段
分解一下
1个头部 1个评论列表 5个图文混排区 操作链接列表 段落 2个链接样式 6个小对象
我们都知道可以重用的
还不那么明显的
#header .guide {…} #life-service .bd .service-links {…} #footer a {…} .linkList {…} .linkList a {…}
[object Object]
在组件库内寻找可用元素组装页面,[object Object]
经验法则: 如果两个模块因为太过相似而不适合在一个页面共存,那么他们也不适合在整个网站共存,二者选其一
降低网站一致性的两个因素: 1.设计师对细节的疏忽 2.代码实现方式不一致 代码越DRY,网站一致性越好
处理好层叠关系 往你想要扩展的对象本身增加class,而不是它的父节点上 ,[object Object]
一个对象内的所有子节点必须用这个对象的class名作为开头,比如:.myModule .inner {…}
对象之间可嵌套,但不要层叠,[object Object]
对象应保持独立性 自己解决自己的问题,而不是让父母出面 <div class=“mod myModule”>…</div> .mod {…} .myModule{…} <body class=“registerPage”>     <div class=“mod”>…</div> </body> .mod {…} .registerPage .mod {…}
避免使用id定义样式 id三宗罪: ,[object Object]
无法重用,一个页面只能出现一次
容易和js用的id混淆,不便于区分,[object Object]
例子: #weatherModule h3 {color:red;} #tab h3 {color:blue;} ,[object Object],新模块里面的h3是没有样式的 开发人员必须针对同样的样式写许多CSS
h3 {color:black;} #weatherModule h3 {color:red;} #tabs h3 {color:blue;} ,[object Object]
weather和tabs重写默认的h3
h3的三种样式不能在一个模块里面共存
如果不覆盖掉前面定义的样式,默认的h3无法在weather和tabs里面使用
weather和tabs里面的h3不能在外面使用,[object Object]
试试这种方式 h1,.h1{} h2,.h2{} h3,.h3{} h4,.h4{} h5,.h5{} h6,.h6{} <h3></h3> <h3 class=“h6”></h3> ,[object Object]
给每个标题设置好默认样式
在尊重语义的同时又能保证展现上的灵活,[object Object]
控制好优先级 class先后顺序与 优先级无关 <div class=“classAclassB”> 样式表中的先后顺序与优先级有关 .classA{color:red;} .classB{color:blue;}
推荐写法 <div class=“media mediaExt attribution”> .media {…} .mediaExt {…} .attribution {…}
html body .myModulediv .hd{…} .myModuleExt.hd{…} 保证选择器有相同的权重 用样式表中后出现的覆盖掉前面的 .myModule .hd{…} .myModuleExt.hd{…}
.mod .hd{…} .ie .mod .hd{…} .weatherMod .hd{…} 有节制地使用hack,不要让hack改变你的权重 .mod .hd{color:red; _zoom:1;} .weatherMod .hd{…}
#weatherMod .hd{…} .myModule .hd{… !important}  避免使用id和!important 避免团队内的优先级竞赛
尝试复合选择器 .base {…} .base.extClass1 {…} .base.extClass1.extClass2 {…} 好处: ,[object Object]
优先级根据扩展次数逐层递增注意: IE6:.base.extClass1.extClass2 == .extClass2 但如果注意先后顺序,这种写法对IE6是有效的
别忘了群组选择器 群组选择器方式: .high-blue,.high-white {…} /*共性声明*/ .high-blue {…}             /*个性声明*/ .high-white {…}                      /*个性声明*/ <span class=“high-blue”>     <button type=“button”></button> </span> <span class=“high-white”>     <button type=“button”></button> </span> OOCSS方式: .high-btn{…}  /*共性声明*/ .blue-btn{…}  /*个性声明*/ .white-btn{…} /*个性声明*/ <span class=“high-btn blue-btn”>     <button type=“button”></button> </span> <span class=“high-btn white-btn”>     <button type=“button”></button> </span>
和OOCSS相比,群组选择器的优劣: 只进行一层扩展,扩展类不超过10个且预计不会增加的情况下,可考虑使用群组选择器
对象的状态封装 <div class=“form instore-form”>    … </div> <div class=“form instore-form dh-form”>     … </div> <div class=“form instore-form dh-form loading-form”>     … </div>
语义化怎么办? OOCSS不是会留下一堆基于表现的Class名?

More Related Content

Viewers also liked

Olivia Florida
Olivia FloridaOlivia Florida
Olivia FloridaMICDS
 
Case4 mys footprints
Case4 mys footprintsCase4 mys footprints
Case4 mys footprintslaheflin
 
Otterbein- AmeriCorps VISTA Summer Associate Presentation 2012
Otterbein- AmeriCorps VISTA Summer Associate Presentation 2012Otterbein- AmeriCorps VISTA Summer Associate Presentation 2012
Otterbein- AmeriCorps VISTA Summer Associate Presentation 2012Ohio Campus Compact
 
Sumários Desenvolvidos de Filosofia do Direito
Sumários Desenvolvidos de Filosofia do DireitoSumários Desenvolvidos de Filosofia do Direito
Sumários Desenvolvidos de Filosofia do Direitonelson0802
 
The Haikufinaljan11
The Haikufinaljan11The Haikufinaljan11
The Haikufinaljan11guestd3d7159
 
SEMonline XVII: @Mail.Ru
SEMonline XVII: @Mail.RuSEMonline XVII: @Mail.Ru
SEMonline XVII: @Mail.RuSEMonline .Ru
 
Beyond the Blocks Participant Handout
Beyond the Blocks Participant HandoutBeyond the Blocks Participant Handout
Beyond the Blocks Participant HandoutAnn Pool
 
HTML5 Conference 2015 鹿児島
HTML5 Conference 2015 鹿児島HTML5 Conference 2015 鹿児島
HTML5 Conference 2015 鹿児島Ryoya Kawai
 

Viewers also liked (16)

Olivia Florida
Olivia FloridaOlivia Florida
Olivia Florida
 
Case4 mys footprints
Case4 mys footprintsCase4 mys footprints
Case4 mys footprints
 
Web 2
Web 2Web 2
Web 2
 
Otterbein- AmeriCorps VISTA Summer Associate Presentation 2012
Otterbein- AmeriCorps VISTA Summer Associate Presentation 2012Otterbein- AmeriCorps VISTA Summer Associate Presentation 2012
Otterbein- AmeriCorps VISTA Summer Associate Presentation 2012
 
Resume
ResumeResume
Resume
 
Sumários Desenvolvidos de Filosofia do Direito
Sumários Desenvolvidos de Filosofia do DireitoSumários Desenvolvidos de Filosofia do Direito
Sumários Desenvolvidos de Filosofia do Direito
 
Visual Resume
Visual ResumeVisual Resume
Visual Resume
 
Hindi project
Hindi projectHindi project
Hindi project
 
Detail wc
Detail wcDetail wc
Detail wc
 
Scavenger hunt
Scavenger huntScavenger hunt
Scavenger hunt
 
The Haikufinaljan11
The Haikufinaljan11The Haikufinaljan11
The Haikufinaljan11
 
SEMonline XVII: @Mail.Ru
SEMonline XVII: @Mail.RuSEMonline XVII: @Mail.Ru
SEMonline XVII: @Mail.Ru
 
Addiction
AddictionAddiction
Addiction
 
EM Design Studio
EM Design StudioEM Design Studio
EM Design Studio
 
Beyond the Blocks Participant Handout
Beyond the Blocks Participant HandoutBeyond the Blocks Participant Handout
Beyond the Blocks Participant Handout
 
HTML5 Conference 2015 鹿児島
HTML5 Conference 2015 鹿児島HTML5 Conference 2015 鹿児島
HTML5 Conference 2015 鹿児島
 

Similar to 面向对象的CSS

Aspetos gerais de desenvolvimento web.
Aspetos gerais de desenvolvimento web.Aspetos gerais de desenvolvimento web.
Aspetos gerais de desenvolvimento web.Corcioli
 
Einfuehrung in YAML (2010)
Einfuehrung in YAML (2010)Einfuehrung in YAML (2010)
Einfuehrung in YAML (2010)Jens Grochtdreis
 
再来了解文档回流(Reflow)
再来了解文档回流(Reflow)再来了解文档回流(Reflow)
再来了解文档回流(Reflow)EnLei-Cai
 
20 种提升网页速度的技巧
20 种提升网页速度的技巧20 种提升网页速度的技巧
20 种提升网页速度的技巧wensheng wei
 

Similar to 面向对象的CSS (7)

Aspetos gerais de desenvolvimento web.
Aspetos gerais de desenvolvimento web.Aspetos gerais de desenvolvimento web.
Aspetos gerais de desenvolvimento web.
 
Einfuehrung in YAML (2010)
Einfuehrung in YAML (2010)Einfuehrung in YAML (2010)
Einfuehrung in YAML (2010)
 
初识 Html5
初识 Html5初识 Html5
初识 Html5
 
再来了解文档回流(Reflow)
再来了解文档回流(Reflow)再来了解文档回流(Reflow)
再来了解文档回流(Reflow)
 
Html Frameset
Html FramesetHtml Frameset
Html Frameset
 
20 种提升网页速度的技巧
20 种提升网页速度的技巧20 种提升网页速度的技巧
20 种提升网页速度的技巧
 
Wordpress avançat
Wordpress avançatWordpress avançat
Wordpress avançat
 

面向对象的CSS