博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSS的组件化方案:OOCSS + BEM
阅读量:6844 次
发布时间:2019-06-26

本文共 2474 字,大约阅读时间需要 8 分钟。

CSS由于缺少命名空间,所有的class都是全局的,所以大团队项目如果没有良好的命名规范,会容易失控。

举例实现以下效果:

图片描述

通过 class + tag

.pageButtons {            display: flex;            justify-content: center;        }        .pageButtons button{            width: 80px;            height: 30px;            margin: 5px;            border-radius: 4px;            border: none;            font-size:13px;            cursor: pointer;            outline: none;        }        .primary-button {            color: white;            background-color: rgba(200,0,0,.9);            transition: background-color 1s,font-weight 1s;        }        .primary-button:hover {            font-weight: 700;            background-color: rgba(255,0,0,1);        }

想象下,把此页面(或者做成组件)嵌入到另外一个页面,而它也以button 标签定义了button的样式,会造成非我们期望的button样式。所以尽量避免标签定义样式。还有一个问题是,.primary-button看似是一个普通的类,也有可能在别的地方定义,所以维护会比较困难。

通过 OOCSS + BEM实现

OOCSS就是通过选择符重用CSS类。BEM全称Block-name__element--modifier.

.pageButtons {            display: flex;            justify-content: center;        }        .pageButtons__prev,        .pageButtons__next,        .pageButtons__next--primary {            width: 80px;            height: 30px;            margin: 5px;            border-radius: 4px;            border: none;            font-size:13px;            cursor: pointer;            outline: none;        }        .pageButtons__next--primary {            color: white;            background-color: rgba(200,0,0,.9);            transition: background-color 1s,font-weight 1s;        }        .pageButtons__next--primary:hover {            font-weight: 700;            background-color: rgba(255,0,0,1);        }

相对于前种方案,BEM命名比较冗长,但这正是保证CSS类名不会重复的途径,是BEM的核心思想。

通过OOSCSS

如果用SASS写:

%button {  width: 80px;  height: 30px;  margin: 5px;  border-radius: 4px;  border: none;  font-size:13px;  cursor: pointer;  outline: none;}%primaryState {  color: white;  background-color: rgba(200,0,0,.9);  transition: background-color 1s,font-weight 1s;}%hoverState {  font-weight: 700;  background-color: rgba(255,0,0,1);}.pageButtons {  display: flex;  justify-content: center;  &__prev,  &__next,  &__next--primary {    @extend %button;  }  &__next--primary {    @extend %primaryState;  }  &__next--primary:hover {    @extend %hoverState;  }}

这里稍提下%placeHolder 和 @mixin,如果不用传人参数,用%placeHoder,这样可以以选择符重用类,相对于@mixin复制代码,减少了代码体积。

转载地址:http://dldul.baihongyu.com/

你可能感兴趣的文章
模块化数据中心的多种形式
查看>>
存储器:芯片国产化之路的第一站
查看>>
智能家居何以成CES必争之地?
查看>>
爱立信前CEO卫翰思加入Verizon 负责网络和技术部门
查看>>
计算机:政府大数据加速落地
查看>>
AT&T:ONAP将在短期内发布代码
查看>>
嘿,微软:Windows Store到底有多少应用了?
查看>>
系统宕机:设备和应用不再是大问题,人为错误是关键
查看>>
来看看Win32资源监视器在Fluent Design设计语言下的样子
查看>>
网络攻击事件频发 黑客成当前最热门的技术工作
查看>>
保护地球的"保护伞" 艾特网能再提环保
查看>>
docker(8):使用alpinelinux 构建 golang http 看看能有多小
查看>>
物联网再升级 物联智慧MWC推新IoT方案
查看>>
云存储呼唤软实力
查看>>
未来,曙光说要像搭积木一样搭建数据中心
查看>>
惠州云计算智能终端产值 力争5年后达3000亿
查看>>
RocketMQ架构模块解析
查看>>
物联网时代需要开放、好用及可信的平台
查看>>
Android Monkey测试
查看>>
Intel芯将整合雷电技术 未来MBP因此便宜点
查看>>