当前位置: 首页 > Web前端 > CSS

前端领域的BEM到底是什么

时间:2023-03-31 12:41:41 CSS

BEM在前端领域到底是什么?为什么我们需要它们?末尾明确指出CSSModules不需要BEM,那么BEM到底是什么?接下来,我将翻译BEM官网的教程,带大家搞清楚什么是前端领域的BEM。BEM-BlockElementModfier(块元素编辑器)是一种非常有用的方法,可以帮助您创建可重用的前端组件和前端代码。它具有以下三个特点:易用性如果你想使用BEM,你只需要采用BEM命名约定为单元独立的块和CSS选择器,这可以使你的代码可重用和单元灵活性。使用BEM后,可以按照您喜欢的方式组织和配置方法和工具。下面将从3开始BEM到底是什么?BEM是一种高可用、强大、简单的命名约定,可以让你的前端代码更易读易懂,易于与他人协作,易于扩展,更强大更清晰,关键更严谨。命名BEM方法可确保参与网站开发的每个人都可以使用同一个代码库并使用同一种语言。使用BEM格式的命名约定,可以从容应对需求的变化。为什么FAQ不应用语义标签,而是直接对块元素使用CSS类?我可以在同一个选择器中组合标签和类,比如button.button吗?如果还有更多疑惑,可以查看FAQ列表!在小型手册站点上,如何组织您的样式通常不是大问题。你进去,写一些CSS,或者甚至一些SASS。使用SASS生产设置将其编译成样式表,然后聚合它,将模块中的所有样式表变成一个漂亮整洁的包。但是当涉及到更大、更复杂的项目时,你组织代码的方式至少在三个方面是生产力的关键:它会影响编写代码需要多长时间、你需要编写多少代码以及你的浏览器不会work不做太多加载。当您与团队合作并且高绩效必不可少时,这一点变得更加重要。对于使用遗留代码的长期项目也是如此(请参阅“如何使用Sass和SMACSS扩展和维护遗留CSS”——SMACSS和BEM的一些不错的组合)。方法目前有很多方法可以减少CSS占用空间、组织程序员之间的协作以及维护大型CSS代码库。这在Twitter、Facebook和Github等大型项目中很明显,但其他项目往往很快就会发展到“巨大的CSS文件”状态。OOCSS使用CSS“对象”分隔容器和内容SMACSS样式指南为您的CSS编写CSS规则的五类SUITCSS结构化类名和有意义的连字符更好吗?无论您选择在项目中使用哪种方法,您都将受益于更加结构化的CSS和UI的优势。有些风格不那么死板,更灵活,而另一些则更容易理解和适应团队。我选择BEM而不是其他方法的原因归结为:它比其他方法(即SMACSS)更容易混淆,但仍然为我们提供了我们想要的良好架构(即OOCSS)和可识别的术语。MarkMcDonnell,BEM可维护的CSSBlocks、Element和Modifier听到BEM是该方法的关键元素-Block、Element和Modifier的首字母缩写词,您不会感到惊讶。BEM的严格命名可以在这里找到。块是一个独立的实体,它本身是有意义的。示例标题、容器、菜单、复选框、输入元素是块的一部分,没有独立的含义,并且在语义上与其块相关。示例菜单项、列表项、复选框标题、标题标题修改块或元素上的徽标。使用它们来改变外观或行为。例子Disabled,highlighted,checked,fixed,sizebig,coloryellow深入理解下面我们来看一个使用BEM的元素,就是Github的按钮:我们可以用一个普通的按钮来处理普通的情况,然后使用两种不同的应对不同的情况。因为我们使用BEM方法将类绑定到Block,所以我们可以使用任何我们想要实现的标签。(按钮,a甚至div)。但是命名规则告诉我们,我们需要使用block-modifier-value语法。HTML:普通按钮成功按钮危险按钮CSS:.button{display:inline-block;边界半径:3px;填充:7px12px;边框:1px实心#D5D5D5;背景图像:线性渐变(#EEE,#DDD);font:70013px/18pxHelvetica,arial;}.button--state-success{color:#FFF;背景:#569E3D线性渐变(#79D858,#569E3D)重复x;border-color:#4A993E;}.button--state-danger{color:#900;}优点:单一块的样式从不依赖于同一页面上的其他元素,所以你永远不会遇到级联问题。您还可以将块从已完成的项目转移到新项目中。可重用性以不同方式组织独立块并智能地重用它们可以减少必须维护的CSS代码量。通过一系列样式指南,您可以构建一个块库,使您的CSS超级有效。结构化BEM方法可以使您的CSS代码结构良好,从而更易于理解。进一步阅读“为什么选择BEM?”简而言之MindBEMding—让你的头脑了解BEM语法CSS指南小型项目的BEM方法论BEMIt!BrandwatchUsedandAbused——CSS继承和我们对Cascade的滥用健康技能——第3部分案例研究:我们希望尽快编写“如何将现有项目迁移到BEM”。同时,您可以观看NicoleSullivan的精彩演讲——“CSS预处理器性能”。她很好地概述了她在大多数网站上遇到的问题,并提供了跟踪和处理这些问题的方法。命名在计算机科学中,只有两个非常难的问题:一个是缓存失效,另一个是命名。-PhilKarlton一本好的风格指南会显着提高开发速度、调试速度,以及在原有代码上完成新功能的效率。不幸的是,大多数CSS代码是在没有任何结构和命名约定的情况下开发的。从长远来看,这会使生成的CSS代码库难以维护。BEM方法保证了参与同一个网站开发项目的每个人都基于一套代码规范进行开发,这对于团队成员理解彼此的代码很有帮助,对于即将接手的同学来说也是一件好事项目稍后。Block封装了一个只对它自己有意义的实体。虽然块可以嵌套并相互交互,但它们在语义上是等价的;没有等级关系。不存在由DOM表示的整体实体。(例如,控制器和模型也可以是块)命名块名称包含拉丁字母、数字和句点。当组合一个完整的CSS类时,您可以添加一个短前缀:.blockHTML任何DOM节点都可以用作块,只要它接受类名。...

CSS在同一页面中只使用没有标签名和/或id的类名选择器,不依赖于其他块或元素如.block{color:#042;}ElementBlock的一部分,单独拿出来,没有实际意义。任何元素都在语义上连接到它自己的块。NamingElement的名称可以包含拉丁字母、数字、句点和下划线。CSS类名由块名改为元素名加两条下划线,最后组织成块名。HTMLBlock中的任何DOM节点都是一个元素。在给定的块中,所有元素在语义上都是相等的。
CSS只选择类名作为选择器,没有标签名或id不依赖其他块或elementGood.block__elem{当前页面的颜色:#042};Bad.block.block__elem{color:#042;}div.block__elem{color:#042;}Modifierblock或元素的标志。使用它们来改变样式、行为或状态。NamingModifier的名称可以包含拉丁字母、数字、句点和下划线。CSS类可以由块或元素名称后跟--组成,例如.block--mod或.block__elem--mod,以及.block--color-black.block--color-red。复杂修饰符中的空格由破折号代替。-HTML修饰符是在块或元素类名之后添加的附加类名。只为他们负责修改的块或元素添加类,然后保持原来的类不变。好...
...
...CSS使用修饰符类名作为选择器。block--hidden{}根据块级修饰符修改元素。block--mod.block__elem{}Elementmodifier.block__elem--mod{}示例:假设你的表单Block包含修饰符:theme:"xmas"和simple:true和element:inputandsubmit,submit自己的修饰符被禁用:true.HTML:CSS:.form{}.form--theme-xmas{}.form--simple{}.form__input{}.form__submit{}.form__submit--disabled{}期待与您交流并制作一起进步,欢迎大家加入我创建的与前端开发息息相关的技术讨论群:SegmentFault技术圈:ES新规范语法糖SegmentFault专栏:趁年轻做个好前端工程师优秀的前端工程师Github博客:趁你还年轻233的个人博客前端开发QQ群:660634678微信公众号:人兽鬼才/excellent_developers努力成为优秀的前端工程师!