你了解CSS设计模式吗?

嘿,坐(作)前排(端)的同学!在普遍全套技能加身的你,是否有为可维护CSS烦恼过?是继承打补丁逐类复写,还是来套媒体查询大法,还是自己再造一套。ok,此时你后排的同学,或许也是这么想的。如果是这样我们不妨简单来了解下CSS设计模式,也许会让你眼前一亮。(老生常谈,众老司机请自觉 return;)

主题(上干货)
BEM

OOCSS

SMACSS

Atomic Design

**BEM **

BEM全称(block、element、modifier)是Yandex 团队提出的CSS Class命名法.


经典用例:


.block { /* styles / } // 代表块
.block__element { /
styles / } // 代表元素
.block--modifier { /
styles */ } // 代表修饰语

Block 块是一个独立实体,块可以是简单的或复合的。这里需要注意Block的含义,是独立块。块可以包含块。例如:

一个头部块,包含其他块。logo是独立块,menu是独立块。搜索及登陆都是独立块。
Element 元素是块的基础元素,是与块上下文相关的。通俗的讲就是对应的子元素。元素名称在块的范围内必须是唯一的。一个元素可重复多次使用。



input和button是搜索块的自元素。
Modifier 是描述Block和Element的属性、状态及外观。同一Block或Element可以有多个Modifier。

<ul class="menu menu_size_big menu_type_buttons" >...</ul>.menu_size_big {// CSS code to specify height}.menu_type_buttons .menu__item {// CSS code to change item's look}

BEM 优点 :
CSS 各块之间的优先级保持相对扁平。
合理的块命名便于维护解读,让查找一目了然。
能立即知道块下都有那些元素及元素状态。
开发人员对CSS各块之间便于拓展维护。
开发人员不用担心命名冲突等问题。
OOCSS
OOCSS全称(Object Oriented CSS)由Nicole Sullivan提出的css理论,但更像一种约定规范:

  • 减少对 HTML 结构依赖。(结构和主题分离。Separate structure and skin。)
  • 增加 CSS 的 Class 重复使用。(容器和内容分离。Separate container and content。)
    结构和主题分离:
    <ul class="nav"> <li> <a href="#">首页</a> </li></ui>

CSS多为 ul.nav > li > a 逐级写。减少对结构的依赖,就是减少Dom结构层级、ul.nav a 或者给a加块元素名、行为类名 ul.nav a.nav-item。后者为OOCSS推荐。
容器和内容分离:
就像面向对象,抽离重复部分为对象。加强重复使用Class类。
.btn { width: 100px; height: 100px; background-color: 999; &.btn-primary { background-color: yellow; }}

OOCSS 优点 :
与html结构结偶,减少对html结构依赖。
提倡类名抽象,类高复用。
减少代码量,缩减文件大小。
SMACSS
SMACSS是Jonathan Snook的一个CSS框架。在SMACSS网站上,他表示,它更像是一个“风格指南”,而不是硬性的CSS框架。
规则重点分为五类:- Base- Layout- Module- State- Theme
Base 用于默认值,如html,body,a,a:hover。
这包括CSS重置,并且通常在自己的基本CSS文件或主要CSS的开始。
Layout 将页面分为具有页眉,页脚和文章等元素的部分。
Module 模块化元件。SMACSS文档将模块视为您的大多数元素。
State 用于每个元素的可能的变化(例如,活动,非活动,扩展,隐藏)。这些以前缀,例如。is-active,is-inactive,is-expanded,is-hidden或者通过伪类,例如:hover和:focus或media queries。
Theme 类似于状态,但是定义了模块和布局的外观。它更适用于具有共同元素的较大网站,整个展示区域不同。您可以在每页或每个部分的基础上添加主题变体。
Atomic Design
什么是原子设计?原子设计,原子原子顾名思义让我们联想到化学领域一切物质都是由原子所构成,原子结合构成分子。。。这就是原子设计的基本思想。原子设计是创建设计系统的系统方法。分为5个层次:
原子(Atoms)

分子(Molecules)

组织(Organisms)

模板(Templates)

页面(Pages)


Atoms原子是物质的基本构成。应用于Web界面,原子是我们的HTML标签,例如表单标签,输入或按钮。

Molecules 分子是键合在一起的原子团,是化合物的最小基本单元。
比如,一个表单标签,输入框或者一个按钮单独的情况并不能完成一个用户功能,但是把它们组合在一起形成一个表单后,现在它们能共同完成一个任务比如搜索。

Organisms 组织是由一组分子联合起来所形成的相对复杂,独立的界面功能块。

Templates 模板主要由组装在一起形成页面的组织群组成。

Pages 页面是模板的特定实例。
在这里,占位符内容被替换为真实的占位内容,以准确描述用户最终将看到什么。

(题外话:这让我想起乐高玩具。)
写在最后

头脑风暴了一圈,是不是感觉可以融汇贯通一下,没有绝对的模式,灵活运用就好。BEM的写法+OOCSS的理念也是一种方式。结合下乐高方式也不错。你的选择呢?
参考引用:
BEM | https://www.smashingmagazine.com/2012/04/a-new-front-end-methodology-bem/
OOCSS | https://github.com/stubbornella/oocss/wiki
BEM SMACSS | https://www.sitepoint.com/bem-smacss-advice-from-developers/
**SMACSS **| https://smacss.com/
Atomic Design | http://bradfrost.com/blog/post/atomic-web-design/

[转自]王维佳* 前端工坊
| 作者: 京东金融-前端开发工程师 王维佳
查看原文

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,744评论 1 92
  • 【译】前端BEM命名方法论之一:BEM 官方简介文档【译】前端BEM命名方法论之三:命名惯例 重要概念 Block...
    咚门阅读 5,262评论 0 7
  • 是否,有那么一种偶遇 就如踽踽独行一个人 在不经意间看到了一树花开 心中便充盈了喜悦和清欢 不必多言 却有多少暗香...
    兰馨若冰阅读 457评论 4 9
  • 我曾是个干瘪的气球 满是破釜沉舟的勇气 满是让人振奋的希望 满是好高骛远的志向 一点一点被充进内部 我插上了飞翔的...
    守时阅读 428评论 1 0
  • 下载Tomcat Tomcat下载地址 复制文件 解压刚才下载的 zip 包.解压文件 将解压的apache-to...
    王世军Steven阅读 1,574评论 0 1