首页 > 其他分享 >CSS架构之BEM设计模式

CSS架构之BEM设计模式

时间:2023-02-11 09:33:13浏览次数:32  
标签:... BEM Element CSS 设计模式 Block

为什么需要CSS架构?

其实在日常开发CSS当中,会遇到许多的问题,使用设计模式能够很好的解决。例如在日常开发项目,需要组件化时,组件内部的class样式类管理就非常的杂乱。 大部分公司的命名规则还是只有大小驼峰、使用英文等这些基础的命名规则。经常会自己都忘了自己命名的css是啥,使用设计模式就能很好的解决该问题。

CSS架构也能让html与css更好的解耦,能更好的抽取样式中可复用的部分,使你的html代码更具语义,也符合了HTML5中想让日常开发更具有语义化的理念。了解这些设计模式无疑会使css代码更具模块化,块样式不依赖于页面上的其他元素,因此也较好的避免了遇到级联问题。多人协作的时候,也能高效避免命名重复问题。最重要是提取精华,灵活应用,更加的规范规模化,在达到提高效率的同时兼顾性能。

最重要的是,不用再为命名CSS绞尽脑汁了。

BEM的简介

BEM就是:

  • B代表:Block(块),独立实体,独立的意义,每个页面都可以看做是多个Block组成,见下图1-1;
  • E代表:Element(元素),block 的一部分,没有独立意义,是组件下的一个元素,多个元素形成一个组件,见下图1-2;
  • M代表: Modifier (修饰符),block 或 element 上的标记,是描述Block或Element的属性或状态,同一Block或Element可以有多个Modifier。

BEM全称BlockElementModifier是由Yandex(俄罗斯最著名的互联网企业)的开发团队提出的前端开发理论。通过Block、Element、Modifier来描述页面,通过 _-- 连接 ,关键就是为了解决多人协作的命名问题。

image.png

[1-1.block图解]

image.png

[1-2.Element图解]

BEM的基础使用

模块block()

没有前缀,多个单词用 - 连接,是对一个组件名抽象。

例如:

 //一个普通列表的a标签
 <li><a class='li-a'>...</a></li>
 
 //一个在导航栏的a标签
 <li><a class='nav-li-a'></a></li>
 
 //一个被选中的在导航栏的a标签
 <li><a class='nav-li-a is-active'></a></li>
 
 //一个在头部的图片
 <header>
    <img class="header-img" src="#" alt="#">
 </header>

元素Element

元素在模块之后,可以有多个层级,以 __ 连接。element 也不是死板的,是根据具体的需求演变的,中间也可以使用 - 来演变。

<li class="nav--main__item  js-nav--main__item"><a>...</a></li>
<li class="nav--main__item  js-nav--main__item"><a>...</a></li>
<li class="nav--main__item  js-nav--main__item"><a>...</a></li>


 //几个普通列表的a标签
 <li>
   <a class='li-a__item'>...</a>
   <a class='li-a__item'>...</a>
   <a class='li-a__item'>...</a>
  </li>
 //几个在导航栏的a标签
 <li>
   <a class='nav-li-a__item'></a>
   <a class='nav-li-a__item'></a>
   <a class='nav-li-a__item'></a>
 </li>

修饰Modifier

某元素、或者某模块特别的状态,必须有一个状态名和状态值,使用 _ 链接

主要针对的是 Block 本身,是对于Block做修饰。例如有:

  • 颜色
  • 大小
  • 用途

案例:

 //一个用作logo的图片
 <header>
    <img class="header-img_logo" src="#" alt="#">
 </header>

使用BEM的好处

  • 使html代码更具语义
  • 使css代码更具模块化
  • 多人协作的时候,也能高效避免命名重复问题
  • 更加的规范规模化
  • 减轻CSS命名烦恼

标签:...,BEM,Element,CSS,设计模式,Block
From: https://www.cnblogs.com/naitang/p/17102163.html

相关文章

  • CSS:粘性定位 使正文标题置顶
    案例效果关键代码代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><meta......
  • CSS伪类选择器
    我们经常会看到页面中有一些特殊的动态样式,例如,点击文本的时候,文本颜色发生变化,鼠标悬停在文本区域的时候,文本区域背景颜色发生了改变,这样的效果该如何实现呢?(案例参照:新闻类......
  • CSS组合选择器
    如果页面结构很复杂,给每个元素设置类名会是很‘头疼’的事情。我们来举个例子。通过布局和样式,实现这样的页面效果。在004目录下,创建一个css-combinators.html文件,构建......
  • 好客租房163-css Module的应用
    1使用cssModules修改NavHeader样式2在样式文件中修改当前组件的样式3对于组件库中已经有的全局样式(比如:am-navber-title)importReactfrom'react'import{NavBar}fro......
  • 好客租房161-css modules的说明
    cssmodules通过对css类名重命名保证每个类名的唯一性从而避免样式冲突的问题换句话:所有类名就具有局部作用域只能当前组件内部生效webpack的css-loader原因......
  • CSS: 绝对定位fixed
    属性介绍元素会被移出正常文档流,并不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时,元素会出现在......
  • 视频直播app源码,纯css实现横向滚动
    视频直播app源码,纯css实现横向滚动<!DOCTYPEhtml><html> <head>  <title>横向滑动</title>  <metaname="viewport"content="width=device-width,initial-sca......
  • CSS 根据 type 类型显示不同的样式
    <spantype="par">【背景切换】</span>span[type]{font-size:13px;}span[type='par']{color:#e05c69;background-color:#e1f1fa;.modify;}span[......
  • 前端设计模式:观察者与发布订阅模式
    观察者模式描述:观察者模式(ObserverPattern)由被观察者和观察者组成,观察者可以是多个,被观察者维护着多个观察者,如添加或删除观察者;当被观察着数据变化时,会通过广播的方式......
  • css节流
    众所周知,函数节流(throttle)是JS中一个非常常见的优化手段,可以有效避免函数过于频繁的执行。 举个例子:一个保存按钮,为了避免重复提交或者服务器考虑,往往需要对点击行为......