css规则中区块block,CSS的命名方式:BEM(区块、元素、修饰符)

原标题:CSS的命名方式:BEM(区块、元素、修饰符)

本资源由 伯乐在线- 凝枫整理,您也想贡献一份力量?欢迎加入我们 »

9fabd601a0a39ae15193c512b102d925.png

重要概念

“Block”区块

区块的定义是:一个逻辑和功能兼备的独立页面组件,也可以称为web组件。一个区块包含有行为(JS)、模板、样式(CSS)以及其他实现方法。由于区块有独立性,所以允许被重用,也可以适当促进项目开发的进程。

区块属性

嵌套结构

区块之间可被嵌套使用,例如:head区块可以包含一个logo (logo) 、一个搜索表单 (search) 、以及一个认证模块 (auth) 。

1278bbad36f4bd0909a1122038042e17.png

随意处置

区块可以被放在页面的任何位置,也可以在页面或者项目之间相互移动。区块的实现靠的是独立的实体,所以允许开发着放在改变其位置,保证整体的功能和外观的效果。也就是说,不需要修改CSS或者任何JS代码,就可以让logo和认证表单两块交换位置。

69dadf08dd073b3726cd3f83bfa4795e.png

348414d8a4671a5600002aa510e2dd31.png

重用

允许多个相同的区块实例同时存在于一个界面里。

86fae4c52ba7600e5d9f9b66276986d1.png

“Element”元素

元素的定义是: 区块中无法被用在其他组件上的部分,例如:某个菜单子项是无法用于菜单区块以外的地方的,所以它属于元素。

2f2342c70be185488f76da5047fb98a1.png

区块还是元素,我到底该选哪个?

BEM方法不建议元素之间嵌套

“Modifier”修饰符

区块或者元素的外观样式和行为,称为BEM实体。

是否使用修饰符,你可以自由选择。修饰符本质上和HTML的属性类似,相同的区块因为其使用的修饰符不同而不尽相同。例如:菜单区块的外观可能会因为其所依赖的修饰符变化而发生改变。

a929753465727aaa74fe4c667cf1401d.png

BEM实体

区块、元素、以及修饰符统称为BEM实体,这个概念既可以用于一个单独的BEM实体,也可以作为区块、元素和修饰符的整体概念。

混合体

即不同的BEM实体实例寄主于一个DOM节点上。

它能帮我们

在不复制代码的情况下,组合多个BEM实体的行为和样式在已存在的BEM实体的基础上,创建有语义的新的界面组件

让我们来看看这样的情况:假设代码里的链接都是通过一个 link区块实现的,现在,我们需要把菜单项都转为链接,有几种方法可以实现:

新建一个修饰符,通过它把菜单项一个个转换为链接。不过这样实现起来,就不可避免地需要复制这个 link区块的行为和样式,代码就会重复;利用一个混合体,把一个一般 link区块和一个 menu区块里的 link元素结合起来,在不复制代码之余,组合了两者的混合体又能保留它们各自的基础功能( link的链接以及 menu的CSS规则)。

BEM树

BEM树是一种由区块、元素和修饰符组成的网页结构,相对于DOM树(能表示BEM实体及其状态、排序、嵌套、附加代码等)来说,BEM树更像一种抽象概念。在实际项目中,BEM树可能以任何形式出现在树状结构里。让我们看看这个DOM树的例子:

XHTML

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

  • en

  • ru

对应的BEM树则是:

1

2

3

4

5

6

7

8

9

10

header

├──logo

└──search-form

├──input

└──button

└──lang-switcher

└──lang-switcher__item

└──lang-switcher__link

└──lang-switcher__item

└──lang-switcher__link

对于同一个BEM树,XML 和BEMJSON的表达方式略有不同:

XML

XHTML

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

BEMJSON

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

{

block:'header',

content:[

{block:'logo'},

{

block:'search-form',

content:[

{block:'input'},

{block:'button'}

]

},

{

block:'lang-switcher',

content:[

{

elem:'item',

content:[

{elem:'link'}

]

},

{

elem:'item',

content:[

{elem:'link'}

]

}

]

}

]

}

区块实现

不同的技术方法都可以决定一个BEM实体:

行为外观测试模板文本依赖性描述附加数据(如图像)

实现技术

即用于实现区块的技术方法。

区块可以通过一种或多种方式实现,例如:

行为 — Java、Coffee外观 — CSS、Stylus、Sass模板 — BEMHTML、BH、Pug、Handlebars、XSL文本 — Markdown、Wiki、XML

比如,一个区块的外观由CSS控制,也就可以说这个区块是用CSS技术实现的。同理,这个区块的文档由Markdown编写,就可以说这个区块也是用Markdown技术实现的。

区块重定义

即通过在不同级别上添加新的功能来修改区块实现方式。

重定义等级

即一系列BEM实体及其部分实现方式。

区块的最终实现方式可分为不同的重定义等级,每个新的等级扩展或覆盖的原有的实现方式,最终结果就是——该区块由各自独立的实现技术集合而成,并且其重定义等级都以预先指定的顺序排列。

BEM实体的任一实现方式都可以被重定义。例如,有个第三方的库在一个单独的级别上链接到项目中,这个库包含了一些现成的区块实现,而项目特有的区块则被放置在另一个重定义等级里。假如现在我们需要修改库中某个区块的样式,那么,不必修改库代码或者副本中的CSS,只需要在项目级别编写新的CSS规则即可。在编译过程中,最终的实现将会结合库原本的代码以及项目中的新代码两者的效果。

如果你在文中发现了任何错误,或者有需要帮助的地方,不要犹豫,请在GitHub上联系我们,或者在prose.io.发表勘误文章也是可以的。

官方网站:https://en.bem.info/返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

表达式如何获取复选框的值_Nuke表达式 Expression节点讲解

nuke中的表达式节点对于大多数人来说有点神秘,但它非常强大。通常它通过简单的if / else语句修补数据,但在这里我们将从最基本的原则,到一些长期被遗忘的高中数学做一些简单的技巧,最后把它们融合在一起。第一步创建Constant节点&…

如何在 ASP.NET Core MVC 5 中处理未知的 Action

ASP.NET Core MVC 5 是一个轻量级,开源的,利于单元测试的基于 ASP.NET Core 运行时的 web 框架,在开发时你肯定会遇到不少那些 request 无法匹配 Action 的情况,通常做法是抛出 404,但有些场景下我希望能收口到统一一个…

一文读懂 HMM 模型和 Viterbi 算法

隐含马尔可夫模型(Hidden Markov Model)隐含马尔可夫模型并不是俄罗斯数学家马尔可夫发明的,而是美国数学家鲍姆提出的,隐含马尔可夫模型的训练方法(鲍姆-韦尔奇算法)也是以他名字命名的。隐含马尔可夫模型…

qtabwidget设置tab高度_VC|富文本编辑框CRichEditCtrl的字体与段落设置

将富文本编辑框设置为2.0,关联一个control变量m_textblock:1 字体设置富文本编辑框关于字体设置的成员函数:BOOL CRichEditCtrl::SetSelectionCharFormat( CHARFORMAT& cf );此成员函数用来设置这个CRichEditCtrl对象中的当前选择的文本的…

云计算的关键特点及挑战

本文节选自《云计算:实现、管理与安全》导言 云计算的关键特点 一个云计算环境有几个关键特点。服务经常提供给特定 的看到因他们的资本支出最小化而获益的消费者和小企业。 这有助于降低在市场进入门槛,因为用来提供这些产品的基础设施由云服务提供商拥…

Mock 框架 Moq 的使用

Mock 框架 Moq 的使用IntroMoq 是 .NET 中一个很流行的 Mock 框架,使用 Mock 框架我们可以只针对我们关注的代码进行测试,对于依赖项使用 Mock 对象配置预期的依赖服务的行为。Moq 是基于 Castle 的动态代理来实现的,基于动态代理技术动态生成…

凝思系统改时间_国产操作系统往事:四十年激变,终再起风云

在这一轮技术浪潮中,无论是底层的开发生态,算力的硬件基础,还是五花八门的商业化落地场景,中国企业都有着毋庸置疑的话语输出能力。而另一个全民皆知、中国ICT产业的长期阵痛——国产操作系统,也在2019世界人工智能大会…

程序员必知的 Python 陷阱与缺陷列表

我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你“想当然“”的方式。如果一段代码直接出错,抛出了异常,我不认为这是陷阱。比如,Python程序员应该都遇到过的“UnboundLocalError”, 示例:>&…

楚乔传手游 服务器维护,楚乔传手游网络异常进不去游戏怎么办?楚乔传网络异常解决方法...

随着楚乔传的大热,手游楚乔传也应运而生,上线后的楚乔传手游版虽然好玩但也出现了许多的BUG和问题,最近有小伙伴说楚乔传手游下载后,打不开一直显示网络异常,但是网都好的,那么楚乔传手游网络异常怎么办?楚…

聊一聊和Nacos 2.0.0对接那些事

前言 nacos 2.0.0 已经发布了 alpha1, alpha2 和 beta 三个版本了,部分测试报告也已经出来了。Nacos2.0.0-ALPHA2 服务发现性能测试报告Nacos 2.0.0-ALPHA2 配置性能测试报告还是比较值得期待的。前段时间也一直在完善 nacos-sdk-csharp 这个项目。主要就是对接 Nac…

家用简单电线路图_家庭配电箱接线图解 家用配电箱安装方法

家居装修对水电的关注不可或缺,家庭电路的铺设更是至关重要的环节,其中家庭配电箱安装涉及到家居用电的安全问题。因此,小编特地对家庭配电箱安装的知识,以及家庭配电箱接线图作出相关整理,帮助大家对家庭配电箱有一个…

决策树算法及实现

在计算机科学中,树是一种很重要的数据结构,比如我们最为熟悉的二叉查找树(Binary Search Tree),红黑树(Red-Black Tree)等,通过引入树这种数据结构,我们可以很快地缩小问…

ElasticSearch+NLog实现.net core分布式日志管理

概述Elasticsearch可广泛应用于日志分析、全文检索、结构化数据分析等多种场景,大幅度降低维护多套专用系统的成本,在开源社区非常受欢迎。在系统中,如果将日志作为文件输出,查看系统日志将非常不便;如果将日志保存到数…

双路服务器只显示一半内存,双路服务器只显示一半内存

双路服务器只显示一半内存 内容精选换一换北京时间1月3日,Intel处理器芯片被曝出存在严重的Meltdown和Spectre安全漏洞,漏洞详情如下:漏洞名称:Intel处理器存在严重芯片级漏洞漏洞编号:CVE-2017-5753、CVE-2017-5715、…

不想再被鄙视?那就看进来! 一文搞懂 Python 2 字符编码

程序员都自视清高,觉得自己是创造者,经常鄙视不太懂技术的产品或者QA。可悲的是,程序员之间也相互鄙视,程序员的鄙视链流传甚广,作为一个Python程序员,自然最关心的是下面这幅图啦我们项目组一值使用Python…

mysql的外键_mysql如何查看外键

展开全部查看mysql外键方式主要是通过第三方工具或者62616964757a686964616fe4b893e5b19e31333431373233是sql语句,主要有以下三种方式1、使用Navicateformysql,打开数据库、查看数据库表、查看设计表、选择外键选项卡,就可以查看外键2、使用…

循环递归,相互结合,释放数据的价值

随着经济的发展,目前各行各业已经积累了海量的数据,并且还在持续增长,可是这些数据非常杂乱还占空间,因此,如何有效利用它们,达到资源不浪费也就成为了相关工作者的首要思考问题。此时,数据分析…

黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block

企业库日志应用程序模块工作原理图: 从上图我们可以看清楚企业库日志应用程序模块的工作原理,其中LogFilter,Trace Source,Trace Listener,Log Formatter的信息都可以在Category配置文件中反映出来,通过配置文件,调用LogWriter类的Writer方法,就可以将包含日志信息的LogEntry实…

Webapi测试工具WebBenchmark v1.3发布

这个版本更新的内容是统一使用BeetleX的Web SPA 插件作为服务的基础支持功能方便后期功能扩展,修复线程池配置太小引起的测试问题,修复统计显示的BUG。安装工具提供win64和linux64两个版本,可以根据自己需要下载对应系统的运行版本。地址是:h…

详解哈希表的查找

哈希表和哈希函数在记录的存储位置和它的关键字之间是建立一个确定的对应关系(映射函数),使每个关键字和一个存储位置能唯一对应。这个映射函数称为哈希函数,根据这个原则建立的表称为哈希表(Hash Table),也叫散列表。…