常见的 CSS 架构模式

前言:作为前端API调用工程师,经常会遇到其他人的代码冗余且重复,难以去维护和重构的情况。这种情况不仅仅只发生在JS中,在CSS中也会出现。如果开发者从来没有CSS架构意识,那么他的项目CSS代码将会一团糟。常见的如:class命名毫无章法,css代码存放位置毫无规律等等。 要解决上述的问题就需要用到现如今各种的CSS架构模式。

常见的 CSS 架构模式有很多:OOCSSACSSBEMSMACSSITCSS 等,其中 SMACSS 和 ITCSS 很相似。在项目中最常使用的是简化版的 ITCSS + BEM + ACSS

 

ACSS

ACSS 模式几乎是一个样式属性就对应了一个样式类。这种方式非常灵活,复用性很强、维护成本低,但破坏了 CSS 命名语义化。常见的例如:

.f {
  display: flex;
}
.f-c {
  display: flex;
  flex-direction: column;
}
.f-r {
  display: flex;
  flex-direction: row;
}
.f-1 {
  flex: 1 1 0;
}
.oy-h {
  overflow-y: hidden;
}
.oy-a {
  overflow-y: auto !important;
}
.ox-h {
  overflow-x: hidden;
}
.o-h {
  overflow: hidden;
}

 

BEM 

BEM (Block Element Modifier)模式是一种常用的命名方法论,其将页面的视图分为:块 (Block)、元素 (Element)、修饰符 (Modifier)

  • Block:代表功能独立的整体。块的类名应该使用简短而具有描述性的名字,例如:`header`,`container`,`menu`,`tabs`,`card`。
  • 元素 Element: 代表块的一部分,使用两个短下划线(__)进行连接。例如:`header__title`,`menu__item`。
  • 修饰符 Modifier: 代表块或元素上的标志。用它们来改变外表或行为。使用两个短中划线(--)连接,例如:`color--yellow`,`--fixed`。

例如,定义一个正常的按钮,在不同的情况下有两个状态:

<button class="button">
	Normal button
</button>
<button class="button button--state-success">
	Success button
</button>
<button class="button button--state-danger">
	Danger button
</button>
.button {
	display: inline-block;
	border-radius: 3px;
	padding: 7px 12px;
	border: 1px solid #D5D5D5;
	background-image: linear-gradient(#EEE, #DDD);
	font: 700 13px/18px Helvetica, arial;
}
.button--state-success {
	color: #FFF;
	background: #569E3D linear-gradient(#79D858, #569E3D) repeat-x;
	border-color: #4A993E;
}
.button--state-danger {
	color: #900;
}

 

OOCSS

OOCSSObject-Oriented CSS)即像面向对象那样使用封装继承这两个特性。

譬如定义一个.table包含了表格的基本样式,如宽高、边框、内边距等等。这就是把基本的样式统一封装在了table类中。

// 表格对象
.table {
    // 基础的表格样式
}

然后去定义各种带有不同特性的表格:

.featured-table {
  // 特定的表格样式
}

最后就可以基于上面的设定来创建不同样式的表格组件。

<table class="table featured-table">
  <!-- 表格内容 -->
</table>

通过上述的方式就实现了表格样式的复用和可维护性。如果想要修改所有表格的基础样式,就只需修改表格对象.table;如果想要修改特定的表格样式,则只需要修改对应的子类样式。

 

ITCSS

ITCSS 是一种样式的分层结构,一共有七层,七个层次从上到下依次为:

  • Settings 层:通常是一些样式变量,如定义通用的颜色值、字体大小的数值等;
  • Tools 层:定义一些辅助函数、混合器(mixins)或者其他工具类。例如 SCSS 中的 @mixin 、@function;
  • Generic 层:通用基础样式,一般是对浏览器默认样式进行重置,如 normalize.css、resets 等库;
  • Base 层:对某些全局使用的元素进行通用的定制化样式,如页面的设置、ul 标签的设置等;
  • Objects 层:所有使用 OOCSS 的地方,即某些结构和样式相分离的专用类;
  • Components 层:具体的组件,其实可以对应到组件库中的每个组件;
  • Trumps 层:重写某些样式,如 height 重新设置为 100px,只会影响某一小块的 DOM 元素,权重最高,类似 ACSS,但通常会加上 !important。

一般情况会根据实际的项目去进行简化,并不是七层都是必须的 。

最后,如果这篇文章对大家有所帮助的话,希望大家一键三连红豆泥阿里嘎多

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值