本篇笔者要介绍的是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;
}

这种写法存在几个问题:

  1. 使用ID作为选择符,无法重用
  2. li元素将高度设置为100px,更加限定了其业务场景,无法通用
  3. 已经使用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的更多相关文章

  1. SMACSS:一个关于CSS的最佳实践-2.Base Rules

    回顾 在上一篇SMACSS:一个关于CSS的最佳实践-Overview中,讲到SMACSS将CSS Rules分为5个Categories: Base Layout Module State Them ...

  2. SMACSS:一个关于CSS的最佳实践-1.Overview

    什么是SMACSS? SMACSS(发音"smacks"),全称Scalable and Modular Architecture for CSS.顾名思义,SMACSS是一个可扩 ...

  3. Vue中CSS模块化最佳实践

    Vue风格指南中介绍了单文件组件中的Style是必须要有作用域的,否则组件之间可能相互影响,造成难以调试. 在Vue Loader Scope CSS和Vue Loader CSS Modules两节 ...

  4. CSS规范 - 最佳实践--(来自网易)

    最佳选择器写法(模块) /* 这是某个模块 */ .m-nav{}/* 模块容器 */ .m-nav li,.m-nav a{}/* 先共性 优化组合 */ .m-nav li{}/* 后个性 语义化 ...

  5. 最重要的 Java EE 最佳实践

    參考:IBM WebSphere 开发人员技术期刊: 最重要的 Java EE 最佳实践 IBM WebSphere 开发人员技术期刊: 最重要的 Java EE 最佳实践 2004 年 IBM® W ...

  6. Git 最佳实践:分支管理

    5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践.最后我为团队选择了这个git分支管理实践 A successful Git branching ...

  7. SpringBoot系列: Spring项目异常处理最佳实践

    ===================================自定义异常类===================================稍具规模的项目, 一般都要自定义一组异常类, 这 ...

  8. MaxCompute 构建企业云数据仓库CDW的最佳实践建议

    在本文中阿里云资深产品专家云郎分享了基于阿里云 MaxCompute 构建企业云数据仓库CDW的最佳实践建议. 本文内容根据演讲视频以及PPT整理而成. 大家下午好,我是云郎,之前在甲骨文做企业架构师 ...

  9. 使用DataStax Java驱动程序的最佳实践

    引言 如果您想开始建立自己的基于Cassandra的Java程序,欢迎! 也许您已经参加过我们精彩的DataStax Academy课程或开发者大会,又或者仔细阅读过Cassandra Java驱动的 ...

随机推荐

  1. 一个由proguard与fastJson引起的血案

    更多内容在这里查看 https://ahangchen.gitbooks.io/windy-afternoon/content/ 更新微信sdk导致ComposeData中的内部类ComposeDat ...

  2. “Options模式”下的配置是如何绑定为Options对象

    “Options模式”下的配置是如何绑定为Options对象 配置的原子结构就是单纯的键值对,并且键和值都是字符串,但是在真正的项目开发中我们一般不会单纯地以键值对的形式来使用配置.值得推荐的做法就是 ...

  3. sql like 通配符 模糊查询技巧及特殊字符

    最近碰到like模糊匹配的问题,找到一些答案接触迷惑,觉得有知识是自己忽略的,现在整理出来,既强化记忆,又是一次记录,以下转自一篇Blog,关于sql server like的通配符和字符带通配符的处 ...

  4. outlook 2003配置连接exchange server 2010报错——无法完成此操作。 与 Microsoft Exchange Server 的连接不可用。 Outlook 必须联机或连接才可完成该操作

    最近安装了一台Exchange 2013邮件服务器,但在客户端Outlook 2013手动配置邮箱时却发现了如下错误:   这里说一个简单的解决办法,实际上第一次启动Outlook时可以自动发现,只需 ...

  5. c语言libcurl 使用实例get/post方法+c语言字符串处理

    #include <stdio.h> #include <curl/curl.h> #include <string.h> #include <ctype.h ...

  6. struts2中从数据库中读取数据,并在JSP页面中遍历保存有JavaBean对象的List对象

    0x1:前言 前面搭建struts就不说了,大家都能成功完毕. 0x2:Model 这里我们须要一个Model类来接收 <span style="font-size:10px;font ...

  7. SQL Server索引进阶:第十五级,索引的最佳实践

    在本文中我们将推荐14条贯穿本系列的规则,这些规则帮助你为数据库创建最好的索引结构. 格式来自于<Framework Design Guidelines>.每条推荐用四个词来总结:Do做, ...

  8. angular的post传参后台php无法接收

    很多时候我们需要用ajax提交post数据,angularjs与jq类似,也有封装好的post. 但是jQuery的post明显比angularjs的要简单一些,人性化一些. 两者看起来没什么区别,用 ...

  9. JavaScript值延迟脚本和异步脚本

    Html 4.0为<script>标签定义了defer属性,这个属性的用途是表名脚本在执行时,不会影响页面的构造.也就是说,脚本会延迟到整个页面解析完毕之后在运行,因此,在<scri ...

  10. jquery + ajax调用后台方法

    前台js: var parameter = ""; $.ajax({ type: "POST", //提交方式 url: "Default.aspx/ ...