前端体系的变化可谓是突飞猛进,短短一年时间,从理论、框架、构建工具、甚至开发语言都发生很是大的变化。 随着新项目就即将启动,我抽时间回顾了一下以往项目的前端架构,零零散散产生了许多想法,尽可能一一记录下来,为新的框架搭建作点准备。html
首先来聊聊CSS的的各类规范与理论。回顾过去的代码,首先让我头痛不已的就是那些不知所谓的类名,以及数不清的难以维护的CSS/LESS代码。前端
我曾经对本身和前端小组的成员提出过要求,强制使用BEM方法来书写CSS,可是在使用的过程当中,也出现了总总问题。 编程
它带来的好处是显而易见的,每一个元素都被清晰描述出来,这也很是符合自文档化代码的要求。但同时也引起不少诸多问题浏览器
在这个过程当中,咱们开始松懈了要求,这使得咱们的CSS代码又回到了混乱无序的原始时代。微信
所以我想我必须去从新去探究CSS的各类规范与理论。架构
1、OOCSS(面向对象的CSS)框架
OOCSS有两个主要的原则:分离结构和外观,以及分离容器和内容。ide
与任何基于对象的编程方法同样,OOCSS 的目的是鼓励代码复用,使得最终的样式能够更快地和更有效地添加和维护。模块化
OOCSS风格的CSS也能够描述为两点:增长class、不使用继承选择符。工具
<div class="box simple"> <div class="box-content active"> <p class="box-title">OOCSS</p> </div> </div>
上面这段代码是一段遵循OOCSS模式的代码
OOCSS的缺点
2、SMACSS(模块化架构可扩展CSS)
咱们把上面的代码用SMACSS风格来再次写出来
<div class="box box-simple"> <div class="box-content is-active"> <p class="box-title">SMACSS</p> </div> </div>
尽管SMACSS和OOCSS有许多类似之处。但不一样点是它把样式系统划分为五个具体类别。
html {} input[type=text] {} a:hover {}
button
这种小元件的 class.header {} .articles {} .sidebar {}
3、BEM(块元素修饰符)
一样的,使用BEM风格,重写上面的代码
<div class="box box--simple"> <div class="box__content box__content--active"> <p class="box__title">BEM</p> </div> </div>
BEM是一个CSS命名的命名规则,它不涉及如何书写CSS的结构,只是建议每一个元素都添加带有以下内容的CSS类名
所属组件的名称
元素在块里面的名称
任何与块或元素相关联的修饰符
BEM模式下,看起来很累赘、很冗余,可是每个CSS类名都很好的描述了它的做用,在结合LESS或者SASS使用时,会使它的书写复杂程度下降。
4、规则文档
咱们每每会很是注重大的方法,而忘记细节,而一份完善的规则文档会时刻提醒咱们按照要求书写代码
一份好的规则文档,应该遵循如下规范:
5、综合方案
就像开篇所说同样,单纯的使用BEM并无很好的解决咱们在项目中所遇到能再的问题,反而产生了新的问题。
但这并非BEM的责任,CSS做为前端架构的重要一环,咱们必需要针对项目来选择一个合适的解决方案,而不是由于业界流行就去使用它。
每每单一的理论是没法支撑起真实需求的,所以,咱们必须结合现有的方法来制定一个新的方案。好比继续坚持BEM风格以及js hook,同时引入SMACSS、OOCSS亦或者其余方法,而且用一份严格的规则文档来规范整个项目的细节。
若是喜欢个人文章,能够扫描二维码关注个人微信公众号
争取天天都分享一点我本身的开发和练习体验~