CSS设计模式:OOCSS 和 SMACSS

真心觉得写出 CSS 并不难,但是要写出可被维护的 CSS 比其他程式语言都还难。所幸已经有许多大师级的人物,提出许多设计模式和思维,借由站在巨人的肩膀上可以让事情事半功倍。这篇文章就来说说 OOCSS、SMACSS 和撰写 CSS 时应该注意的规范。

OOCSS

OOCSS不是什么新技术,只是一种撰写 CSS 的设计模式,或者可以说是一种「道德规范」,大致上我觉得重点只有两个:

  • 减少对 HTML 结构的依赖
  • 增加 CSS class 重复性的使用

减少对 HTML 结构的依赖

CSS

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 所提倡的用法。

这样的写法,一来效能理论上比较好(我没办法验证),二来层次比较单纯。

增加 CSS class 的重复使用

在 OOCSS 的观念中,强调重复使用 class,而应该避免使用 id 作为 CSS 的选择器。这种想法就是像
OOP
尽量抽离重复的程式码,例如以下这个例子,这是两种按钮的 CSS 样式属性:

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 的写法可能长这个样子:

CSS

1

2

<a class="button button-default">

<a class="button button-primary">

先用 button 宣告此为一个按钮的样式,再用 button-default 或 button-primary 作为按钮底色的区别。这么做可以维护成本变得比较低,例如:想要改网站上所有按钮的大小,就只要修改 .button 的 padding 而已。

SMACSS

我对 SMACSS 的理解还不是很深入,或许把 Scalable and Modular Architecture for CSS 看完后会有更深一曾的理解。目前对 SMACSS 的概念仅限于它对 CSS 不同的业务逻辑所做的划分方式:

但我认为原本的设计不是很妥当,因此我自己做了一些改良:

Base

Base 就是设定标签元素的预设值,例如浏览器的 reset 可以写在这里,如果用的是 Compass,只要 @include global-reset 即可。这里只会对标签元素本身做设定,不会出现任何 class 或
id,但是可以有属性选择器或是伪类:

CSS

1

2

3

html {}

input[type=text] {}

a:hover {}

Layout

Layout 是指整个网站的「大架构」的外观,而非 .button 这种小元件的 class。网站通常会有一些主要的大区块,可能是 header 或 footer,Layout 就是用来定义这些「大架构」的 CSS。如果有做 Responsive Web Design 或是用 Grid System,也是把规则写在 Layout 这里。

以下这是个范例:

CSS

1

2

3

4

5

6

#header { margin: 30px 0; }

#articles-wrapper { ......; }

.sidebar {

&.sidebar--right { ......; }

&.sidebar-left { ......; }

}

通常只有一个选择器,一个 id、或一个 class。

原文地址:https://www.cnblogs.com/ssming/p/9728969.html

时间: 2024-10-25 13:01:48

CSS设计模式:OOCSS 和 SMACSS的相关文章

css盒模型与bfc与布局与垂直水平居中与css设计模式等

一.css盒子与布局相关 盒子内部的布局 盒子之间的布局visual formatting 脱离正常流normal flow的盒子的布局 absolute布局上下文下的布局 float布局上下文下的布局 flow下的盒子的布局 BFC布局上下文下的布局 IFC布局上下文下的布局 FFC布局上下文下的布局 table布局上下文下的布局 css grid布局上下文下的布局 1.css盒模型 页面上显示的每个元素(包括内联元素)都可以看作一个盒子,即盒模型( box model ) 盒模型有4部分组成

CSS规范(OOCSS SMACSS BEM)

Css规范 OOCSS SMACSS BEM OOCSS(Object Oriented CSS)面向对象的css 主要分成四个部分 Template :模板 Grids :栅格布局 Module :组件 Content :内容 Template模板 主要负责HTML的结构,让HTML更有层次感. 可以按功能模块来构建HTML的结构 常见的如: 人体架构 .header .body .footer 垂直方向 .top .middle .bottom 水平方向 .left .main .right

CSS设计模式之三权分立模式篇

市面上我们常常会看到各种各样的设计模式书籍,Java设计模式.C#设计模式.Ruby设计模式等等.在众多的语言设计模式中我唯独找不到关于CSS设计模式的资料,即使在网上找到类似内容,细细一看之下才发觉是南辕北辙.经过浩瀚文章搜索发掘下依旧一无所获之后,直接导致了我萌生一股写一篇CSS设计模式的冲动,至此写下这篇文章,其中叙述如有不当之处,也恳请各位提出意见,分享出您宝贵的经验. 在写页面之中,width, margin, padding这三个CSS属性可以说是用到频率最高的几个属性之一.但根据我

HTML &amp;&amp; CSS 设计模式

1.Div子元素水平.垂直居中 设置container Div 的属性 display:box; box-pack:center;bor-orient:vertical;/*or horizontal*/ box-align:center;/*垂直居中*//*需要加前缀 -moz- -webkit-等*/ 疑问:box-pack:justify 时不能平均分割剩余空间,是抛弃该属性了吗?  怎样做到完全自定义的布局?比如水平元素之间的空间大小设定? HTML && CSS 设计模式

CSS设计模式之三权分立模式篇 ( 转)

转自 海玉的博客 市面上我们常常会看到各种各样的设计模式书籍,Java设计模式.C#设计模式.Ruby设计模式等等.在众多的语言设计模式中我唯独找不到关于CSS设计模式的资料,即使在网上找到类似内容,细细一看之下才发觉是南辕北辙.经过浩瀚文章搜索发掘下依旧一无所获之后,直接导致了我萌生一股写一篇CSS设计模式的冲动,至此写下这篇文章,其中叙述如有不当之处,也恳请各位提出意见,分享出您宝贵的经验. 在写页面之中,width, margin, padding这三个CSS属性可以说是用到频率最高的几个

css设计模式

(转载)原版地址:https://kb.cnblogs.com/page/551422/ 什么是设计模式? 曾有人调侃,设计模式是工程师用于跟别人显摆的,显得高大上:也曾有人这么说,不是设计模式没用,是你还没有到能懂它,会用它的时候. 先来看一下比较官方的解释:"设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码

Atitit &#160;OOCSS&#160;vs bem

Atitit  OOCSS vs bem     1. 今天最流行的CSS开发框架技术当属OOCSS,尽管还有其他类似的技术存在,如BEM.1 2. CSS设计模式:OOCSS 和 SMACSS1 2.1. OOCSS2 2.2. 减少对 HTML 结构的依赖2 2.3. 增加 CSS class 重复性的使用2 2.3.1. 减少对 HTML 结构的依赖2 2.3.2. 增加 CSS class 的重复使用3 3. OOCSS4 3.1. 减少对 HTML 结构的依赖4 3.2. 增强 CSS

CSS 继承深度解析

FROM ME: 之前在研究前端性能优化的时候,就有学习关于CSS中“善用CSS中的继承”. 原文:CSS Inheritance, The Cascade And Global Scope: Your New Old Worst Best Friends 译文:掘金翻译计划 我酷爱模块化设计.长期以来我都热衷于将网站分离成组件,而不是页面,并且动态地将那些组件合并到界面上.这种做法灵活,高效并且易维护. 但是我不想我的设计看上去是由一些不相关的东西组成的.我是在创造一个界面,而不是一张超现实主

Atitit.css 规范 bem &#160;项目中 CSS 的组织和管理

Atitit.css 规范 bem  项目中 CSS 的组织和管理 1. 什么是BEM?1 1.1. 块(Block)2 1.2. 元素(Element)2 1.3. BEM树(和DOM树类似).3 1.4. 修饰符(modifier)的3 2. 块的独立性4 3. 独立的CSS4 3.1. 为独立的CSS类命名5 4. BEM争议最大的就是它的命名风格 6 5. OOCSS6 6. ACSS6 7. CSS 组织和管理 结论attilax总结7 8. Atibem7 8.1. Modifier