SMACSS:一个关于CSS的最佳实践-3.Layout Rules
本篇笔者要介绍的是Layout Rules。看完本篇,大家将会知道Layout Rules的作用,以及哪些CSS应该归类为Layout Rules。
什么是Layout Rules?
Layout Rules指的是用于布局的CSS。我们常常对布局和内容不加区分,总是将所有的CSS写在一块,从而降低了代码的可重用性。SMACSS将布局CSS抽象为Layout Rules,内容CSS抽象为Module Rules。一个module只需要关心自己长什么样就可以了,至于放在哪里,那是它的容器需要考虑的问题。所以,用于布局的CSS完全可以独立出来。
Layout样式可大可小,大的样式诸如header, footer, sidebar等等,为整个页面的大布局;小的如grid系统。通常,大布局如header, footer, sidebar只需要一个ID选择符就足够了。但是基于可重用的考虑,我们应该尽量避免使用ID,而是花点时间去思考下如何从中抽象出一个公共的class。实际上,已经有很多的CSS框架提供了可重用的布局系统。
Layout Rules实例
接下来,我们需要通过一个例子来加深对Layout Rules的理解。
上图中,我们看见一个grid,grid包含了一条条新闻,我们将其HTML代码简化为如下:
<div>
<h2>Featured</h2>
<ul>
<li><a href="…">…</a></li>
<li><a href="…">…</a></li>
…
</ul>
</div>
在不应用SMACSS的情况下,一般人可能会这么写CSS代码,给最外层的div加上一个ID:
div#featured ul {
margin:;
padding:;
list-style-type: none;
}
div#featured li {
float: left;
height: 100px;
margin-left: 10px;
}
这种写法存在几个问题:
- 使用ID作为选择符,无法重用
- li元素将高度设置为100px,更加限定了其业务场景,无法通用
- 已经使用ID选择符,则前面的div选择符已经没有必要存在了,这样做不但增加了浏览器的比较次数,同时也限定了最外层只能是div
之所以会出现这样的css,究其原因是没有将布局及内容进行区分。在这个例子中,我们可以将用于布局的grid抽象为Layout Rules,而作为内容的新闻信息可以抽象为Module Rules。
.l-grid {
margin:;
padding:;
list-style-type: none;
}
.l-grid > li {
display: inline-block;
margin: 0 0 10px 10px;
}
这样,一个通用的grid布局便完成了,它只负责布局,不关心里面的内容。li的高度由里面的内容决定。下篇笔者将介绍Module Rules,它是关于内容的CSS。
相关阅读
上一篇 SMACSS:一个关于CSS的最佳实践-2.Base Rules
下一篇 SMACSS:一个关于CSS的最佳实践-4.Module Rules
SMACSS:一个关于CSS的最佳实践-3.Layout Rules的更多相关文章
- SMACSS:一个关于CSS的最佳实践-2.Base Rules
回顾 在上一篇SMACSS:一个关于CSS的最佳实践-Overview中,讲到SMACSS将CSS Rules分为5个Categories: Base Layout Module State Them ...
- SMACSS:一个关于CSS的最佳实践-1.Overview
什么是SMACSS? SMACSS(发音"smacks"),全称Scalable and Modular Architecture for CSS.顾名思义,SMACSS是一个可扩 ...
- Vue中CSS模块化最佳实践
Vue风格指南中介绍了单文件组件中的Style是必须要有作用域的,否则组件之间可能相互影响,造成难以调试. 在Vue Loader Scope CSS和Vue Loader CSS Modules两节 ...
- CSS规范 - 最佳实践--(来自网易)
最佳选择器写法(模块) /* 这是某个模块 */ .m-nav{}/* 模块容器 */ .m-nav li,.m-nav a{}/* 先共性 优化组合 */ .m-nav li{}/* 后个性 语义化 ...
- 最重要的 Java EE 最佳实践
參考:IBM WebSphere 开发人员技术期刊: 最重要的 Java EE 最佳实践 IBM WebSphere 开发人员技术期刊: 最重要的 Java EE 最佳实践 2004 年 IBM® W ...
- Git 最佳实践:分支管理
5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践.最后我为团队选择了这个git分支管理实践 A successful Git branching ...
- SpringBoot系列: Spring项目异常处理最佳实践
===================================自定义异常类===================================稍具规模的项目, 一般都要自定义一组异常类, 这 ...
- MaxCompute 构建企业云数据仓库CDW的最佳实践建议
在本文中阿里云资深产品专家云郎分享了基于阿里云 MaxCompute 构建企业云数据仓库CDW的最佳实践建议. 本文内容根据演讲视频以及PPT整理而成. 大家下午好,我是云郎,之前在甲骨文做企业架构师 ...
- 使用DataStax Java驱动程序的最佳实践
引言 如果您想开始建立自己的基于Cassandra的Java程序,欢迎! 也许您已经参加过我们精彩的DataStax Academy课程或开发者大会,又或者仔细阅读过Cassandra Java驱动的 ...
随机推荐
- restful_api
http://www.ruanyifeng.com/blog/2014/05/restful_api.html
- CentOS7 vs centos6
The CentOS Project has announced general availability of CentOS-7, the first release of the free Lin ...
- mongodb remove删除文档的用法
在看<mongoDB权威指南>中,在删除文档时,出现问题: 书中介绍:采用db.foo.remove()命令则可以删除foo集合中所有的文档,但是在执行该命令时,shell客户端却报错. ...
- 面向对象程序设计-C++_课时12访问限制
private: 只有这个类(相同的类,不同的对象也可以)的成员函数可以访问这些成员变量或函数 public: 任何人都可以访问 protected: 只有这个类以及它的子子孙孙可以访问
- NSFileHandle编写json数据格式
代码如下: + (void)writeToFile:(NSDictionary *)params filePath:(NSString *)path { NSData *jsonData = [sel ...
- Asp.net 获取图片列表并打包下载
先引用:ICSharpCode.SharpZipLib.dll 后台代码: using System.IO; using ICSharpCode.SharpZipLib.Zip; using ICSh ...
- English - because of,due to ,thanks to ,owing to ,as a result of ,on account of解析
because of,due to ,thanks to ,owing to ,as a result of ,on account of 等都可以用来表示原因,但其用法却各有不同.下面就其用法分述如 ...
- csapp lab2 bomb 二进制炸弹《深入理解计算机系统》
bomb炸弹实验 首先对bomb这个文件进行反汇编,得到一个1000+的汇编程序,看的头大. phase_1: 0000000000400ef0 <phase_1>: 400ef0: 48 ...
- 为什么IIS中找不到.net framework 4.5(转)
.net 4.5是4.0的update,所以直接用4.0部署就可以了 .NET 4.5 is an in-place replacement for .NET 4.0, When .NET 4.5 i ...
- 一次http完整的请求tcp报文分析
一次http请求的报文分析 数据包如下: 第一个包113.31的主机(下边称之为客户端)给114.80的主机(下边称之为服务器)发送一个syn包请求建立连接 第二个包服务器回复客户端syn+ack表示 ...