Atitit OOCSS vs bem
Atitit OOCSS vs bem
1. 今天最流行的CSS开发框架技术当属OOCSS,尽管还有其他类似的技术存在,如BEM。1
1. 今天最流行的CSS开发框架技术当属OOCSS,尽管还有其他类似的技术存在,如BEM。
2. CSS设计模式:OOCSS 和 SMACSS
真心觉得写出 CSS 并不难,但是要写出可被维护的 CSS 比其他程式语言都还难。所幸已经有许多大师级的人物,提出许多设计模式和思维,借由站在巨人的肩膀上可以让事情事半功倍。这篇文章就来说说 OOCSS、SMACSS 和撰写 CSS 时应该注意的规范。
作者:: ★(attilax)>>> 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
(本文的例子用的是 SCSS 语法)
2.1. OOCSS
OOCSS 不是什么新技术,只是一种撰写 CSS 的设计模式,或者可以说是一种「道德规范」,大致上我觉得重点只有两个:
2.2. 减少对 HTML 结构的依赖
2.3. 增加 CSS class 重复性的使用
2.3.1. 减少对 HTML 结构的依赖
|
1 2 3 4 5 6 7 |
<nav class="nav--main"> <ul> <li><a>.........</a></li> <li><a>.........</a></li> <li><a>.........</a></li> </ul> </nav> |
一般的导航栏写法,结构应该会像上面的 HTML 范例一样,如果要对那些 <a> 标签定义样式,CSS 的写法可能写成.nav--main ul li a {},这种写法先不管效能上的问题,可以看出来过度地依赖元素标签的结构,有可能之后 HTML 结构改变,这个 CSS 就必须跟著重构,造成维护上多余的成本。
若从这个例子来考量,原则上 <a> 都一定会接在 <li> 标签的后面,一个 <li> 只会有一个 <a>,通常不会独立存在,那就可以写成 .nav--main a {},会是比较好的写法,甚至是直接给 <a> 加上 class nav--main_item。后者是 OOCSS 所提倡的用法。
这样的写法,一来效能理论上比较好(我没办法验证),二来层次比较单纯。
2.3.2. 增加 CSS class 的重复使用
在 OOCSS 的观念中,强调重复使用 class,而应该避免使用 id 作为 CSS 的选择器。这种想法就是像
OOP
尽量抽离重复的程式码,例如以下这个例子,这是两种按钮的 CSS 样式属性:
|
1 2 3 4 5 6 7 |
.button { display: inline-block; padding: 6px 12px; color: hsla(0, 100%, 100%, 1); &.button-default { background: hsla(180, 1%, 28%, 1); } &.button-primary { background: hsla(208, 56%, 53%, 1); } } |
上面的 CSS 将两种不同样式的 button,抽离出重复的部份,并且定义在同个 class
上。因此,要使用这样的样式,HTML 的写法可能长这个样子:
|
1 2 |
<a class="button button-default"> <a class="button button-primary"> |
先用 button 宣告此为一个按钮的样式,再用 button-default 或 button-primary 作为按钮底色的区别。这么做可以维护成本变得比较低,例如:想要改网站上所有按钮的大小,就只要修改 .button 的 padding 而已。
3. OOCSS
OOCSS,字面意思是面向对象的CSS,是由Nicole Sullivan提出的css理论,虽说是理论,实则更像一种程序员间约定的规范:
* Separate structure and skin(分离结构和主题)减少对 HTML 结构的依赖
* Separate container and content(分离容器和内容)增加样式的复用性
3.1. 减少对 HTML 结构的依赖
<div class="container-list">
<ul>
<li><a href="#">...</a></li>
<li><a href="#">...</a></li>
<li><a href="#">...</a></li>
</ul>
</div>
· 1
· 2
· 3
· 4
· 5
· 6
· 7
一般我们在书写列表的时候结构大概会如上面的结构所示,这种时候我们如果要对a修改样式可能经常会用.container-list ul li a这种方式来选择,一方面这种写法在效率上比较拙劣,另一方面一旦我们在项目后期过程中对列表中的html结构进行了重构,这意味着我们同时也需要对css进行重构,使html与css的耦合性变得十分强,造成维护上的困难,也要避免没必要的嵌套地狱
而OOCSS推荐的写法是在a标签内加上list-item样式,此时便能通过.container-list .list-item的方式来控制解耦
3.2. 增强 CSS 样式的复用性
在 OOCSS 的观念中,强调重复使用 class,而应该避免使用 id 作为 CSS 的选择器。
以BootStrap为例(BootStrap便是根据OOCSS规范写的),以下为LESS文件:
OOCSS追求元件的复用,其class命名更为抽象,一般不体现具体事物,而注重表现层的抽取.
这样的写法能有效提高页面的可维护性,结合LESS和SASS等预编译语言更是有无穷的力量,这是如果我们需要改变整个页面label的大小,我们也许只需要改变一下基础类.label上的样式便可以了。
4. 跟bem一达使用
使用class not id选择器
Bem结构...
元素的名称使用上下文短名称..
class命名更为抽象,一般不体现具体事物,而注重表现层的抽取.
CSS设计模式:OOCSS 和 SMACSS - 博客 - 伯乐在线.html
CSS开发框架技术OOCSS编写和管理CSS的方法_CSS教程_前端技术.htm
Atitit OOCSS vs bem的更多相关文章
- Atitit.css 规范 bem 项目中 CSS 的组织和管理
Atitit.css 规范 bem 项目中 CSS 的组织和管理 1. 什么是BEM?1 1.1. 块(Block)2 1.2. 元素(Element)2 1.3. BEM树(和DOM树类似).3 ...
- CSS规范(OOCSS SMACSS BEM)
Css规范 OOCSS SMACSS BEM OOCSS(Object Oriented CSS)面向对象的css 主要分成四个部分 Template :模板 Grids :栅格布局 Module : ...
- Atitit..css的体系结构
Atitit..css的体系结构 1. Oocss 与 bem标准化1 1.1. 四种样式表及六种选择器1 1.2. 常用的css框架 amazeui bootstrap1 1.3. Css图标 ...
- 无废话网页重构系列——(6)HTML主干结构:站点(site)、页面(page)
本文作者:大象本文地址:http://www.cnblogs.com/daxiang/p/4653546.html 在分析和切出设计稿,以及部署项目目录文件后,开始写HTML Demo. 首先,弄出H ...
- CodePen's CSS
p{text-indent:2em;}前端开发whqet,csdn,王海庆,whqet,前端开发专家 翻译自:CodePen's CSS 翻译人员:前端开发whqet,意译为主.不当之处欢迎大家指正. ...
- Sass介绍及入门教程
Sass是什么? Sass是"Syntactically Awesome StyleSheets"的简称.那么他是什么?其实没有必要太过于纠结,只要知道他是“CSS预处理器”中的一 ...
- CSS架构的优选和解决方案
背景 上周我厂前端小伙伴们开了一个技术交流会,关于如何优选CSS架构.解决掉平时写CSS时频繁出现的各种问题,这是前端人员老生常谈的问题,但却很少搬上台面,铺开正式地开交流会.这次会议,便是围绕CSS ...
- Sass带来的变革_sass, scss 教程_w3cplus - Google Chrome
Sass带来的变革 作者:大漠 日期:2014-11-17 点击:5291 sass scss 接触Sass差不多有一个年头了,在这一年来的时间中,也花了不少心思在Sass的学习上.同时也让自己喜欢上 ...
- 如何去组织你的CSS代码
1.Object Oriented CSS (OOCSS) 面向对象的 CSS.OOCSS 的想法首先要明白 CSS 的 “Object” 是个毛线玩意. CSS的样式是需要应用到页面的结构上的.通俗 ...
随机推荐
- luogu P2024 食物链
题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...
- 5.1 java类集(java学习笔记)Collection、List接口及ArrayList、LinkedList类。
一.类集 类集就是一组动态的对象数组,说类集可能不好理解,类集又称容器,容器顾名思义就是放东西的地方. 类集就是为了让我们更加简洁,方便的存放.修改.使用数据的. 二.Collection接口 我们看 ...
- C语言计算器
地址: https://wenda.so.com/q/1371173683061754?src=140
- cocos2d-x 扩展 修改 备注
1.引擎源码相关扩展 说明:class/cellsExt 下的全部文件为扩展文件,有auto字样的文件为生成文件,*.pkg文件为自动生成文件的接口配置档,参考tolua++,源文件中代在[s ...
- Delphi 二维码产生和扫描
Zint用于产生二维码. Zxing用读取二维码. VFrames.pas和VSample.pas用于摄像头. 另附带摄像头相关的类库,也可用开源的dspack也可用于摄像头的需求. 以上为开源的信息 ...
- iOS开发——Autolayout下动态调整单元格高度
情景描述: 有时候我们希望更新某一个单元格的数据,通常的做法是使用reloadData方法更新整个单元格.但是对一些情况是不适用的或者说实现起来比较麻烦.比如说这种简单的"点开"一 ...
- JavaScript之链式结构序列化1
一.概述 在JavaScript中,链式模式代码,太多太多,如下: if_else: if(...){ //TODO }else if(...){ //TODO }else{ //TODO } swi ...
- 针对标签中设置 disabled="true",$("#id").serialize()获取不到value的解决方法
今天给<select>增加disabled="true", 发现$("#form").serialize()的结果不包含select标签的值,解决办 ...
- 微信开发之自定义菜单--weixin-java-tools
一.前言 平时在开发微信的过程中,肯定会设计到微信的相关菜单的使用,这次就和大家介绍下如何使用weixin-java-tools来管理菜单 二.自定义菜单分类 1.click:点击推事件用户点击cli ...
- servlet虚拟路径映射
在web.xml文件中,一个<servlet-mapping>元素用于映射一个Servlet的对外访问路径,该路径也称为虚拟路径.例如<url-pattern>/TestSer ...