css-BEM OOCSS

BEM是什么?

关于BEM

简单来说 理解成css的命名一种规范。

B E M分别指:Block Element Modifier
BEM官网示例代码

BEM官网示例代码

weui的代码示例

.weui-btn_cell {
}
.weui-btn_cell__icon {
}
.weui-btn_cell-default {
}
.weui-btn_cell-primary {}
.weui-btn_cell-warn {}

BEM要解决的问题

  1. css命名冲突
  2. css模块组织方式
  3. ...

参考:

  1. 具体的实现应用可以使用weui

OOCSS是什么?

定义和设计css样式 书写方式的一种方案;强调按照视觉功能的角度组织 css样式定义;通过组合的方式实现通用和扩展性。

BootstrapOOCSS的应用:

Bootstrap

解决的问题

(1)样式的复用、扩展性
(2)减少重复的属性设置样式代码,比如设计稿中 很多的地方字号都是14px,不需要每一个样式定义中重复的设置 font-size: 14px
(3)如何进行覆盖,扩展
(4)...


OOCSS vs BEM

  1. OOCSS 从功能模块的角度来模块划分
    比如:容器类、间距类、文案色值类
.container 
.nav 
.footer

.color-primary
.color-warning
.color-active
.color-desc
.color-info

.font-title
.font-desc

....
  1. BEM中的模块 从页面功能结构上划分
    比如:顶部导航、侧边栏、轮播图、弹窗等
.nav 
.nav--item
.nav-item-active

.sidebar
.sidebar--list

  1. BEM相比OOCSS 本身更多的解决了命令空间和命名冲突的问题, OOCSS需要自己通过增加特殊前缀或者其他的方案来实现。

  2. OOCSS中的class类名定义和BEM中的modifier的命名,基本上都有两个方向,一个是以视觉来定义,一个是语义化定义

// BEM 规范
.nav {}
.nav--item {}
// 导航条中每一个导航单元的选中状态
// 1. 语义化(从具体的表达的意义角度命名)
.nav--item-active {
  color: red;
}
// 2. 视觉化(从视觉稿上的表现来命名)
.nav--item-red {
  color: red;
}

从长远规划的角度来讲,语义化是更好的选择方案;但是具体到落地的时候,还需要考虑团队大小、产品设计、UI 规范等各个方面的因素。
(1)语义化的定义需要开发人员之间的概念统一(一般采用文档规范输出以及和UI设计同学约定规范)以及对语义定义的准确性。
(2)视觉化的好处是对于当前的设计来说非常的直观,一一对应,我们看下设计稿的配色,就能快速的想起我们定义的class类名,缺点就是多套ui设计标准下通用性不强,需要整个修改。

有时候不妨两者结合的使用,毕竟不论是使用BEM还是OOCSS,最终的目的都是提高我们开发和维护的效率。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者:灵感原文 什么是设计模式? 曾有人调侃,设计模式是工程师用于跟别人显摆的,显得高大上;也曾有人这么说,不是设...
    YjWorld阅读 2,849评论 0 3
  • 原文日期:2014-09-30最近在The Sass Way里看到了Modular CSS typography一...
    videring阅读 3,180评论 0 0
  • 最近学习到CSS的继承属性,正好看到这篇文章,便将它翻译出来。作者的思想,在平时的项目中或多或少都有用过,但是从来...
    hershin阅读 4,453评论 0 1
  • 生命教育课已经成为孩子们的最爱!每周五下午孩子们便会早早地来到教室,小助手王浠宁和张语涵会根据主题布置漂亮...
    唐山市安各庄小学刘宏阅读 3,240评论 0 1
  • 昨夜,一场大风卷起漫天的尘埃,我眯着眼离开了玉米地畔,轻松啊。 快奔四的我,竟然也险些犯起迷糊来,现在自己终于释然...
    邓文伟阅读 1,859评论 1 2