什么是 BEM 方法? [关闭]

2024-01-24

我最近听说了 BEM 方法。

  • BEM 方法到底有什么用途?
  • BEM 在哪些方面让我们的工作变得更轻松?
  • 使用 BEM 是一个好的做法吗?

BEM 是一种命名方法。它代表块元素修饰符,其目的是促进模块化并使样式和类更容易维护。

在回复中解释它并不容易,但我可以给你基本的想法。

因此,如果您正在考虑菜单,那么整个元素/组件结构将是:

Block: menu Element: item 修饰符:水平垂直

通过遵循标准 BEM 约定,您可以在 CSS 中编写如下内容:

html,
body {
  height: 100%;
}

.menu {
  display: block;
}

.menu__item {
  display: inline-block;
  line-height: 30px;
  width: 100px;
}

.menu--horizontal {
  width: 100%;
  height: 30px;
}

.menu--vertical {
  width: 100px;
  height: 100%;
}

.menu--horizontal .menu__item {
  border-right: 1px solid #e5e5e5;
  text-align: center;
}

.menu--vertical .menu__item {
  border-bottom: 1px solid #e5e5e5;
  text-align: left;
}
<div class="menu menu--horizontal">
  <div class="menu__item">Home</div>
  <div class="menu__item">About</div>
  <div class="menu__item">Contact</div>
</div>

正如您从代码中看到的,元素与块之间用 2 个下划线分隔,修饰符用 2 个破折号分隔。

现在,如果您更改菜单上的修改器--horizontal to --vertical,将为块和内部元素选取特定的修饰符样式。

这应该是一个基本的示例,但它应该让您了解这种方法有多么强大,因为它允许将任何组件拆分为这些基本的块元素修饰符结构,使一切都变得轻而易举地维护。

另外,使用 SASS 这样的预编译器来编写它会更容易(我不会详细介绍,但给你一个想法):

.menu {
  display: block;

  &__item {
    display: inline-block;
    line-height: 30px;
    width: 100px;
  }

  &--horizontal {
    width: 100%;
    height: 30px;
  }

  &--vertical {
    width: 100px;
    height: 100%;
  }
}

这是一种可扩展的方法,因此它可以用于小型项目或大型项目。

这需要一些时间来适应,因此做一些研究并在小规模项目中使用它将是一个很好的起点。

这是一个用例,如果您想看到它在实际项目中的使用https://m.alphasights.com/how-we-use-bem-to-modularise-our-css-82a0c39463b0#.2uvxts71f https://m.alphasights.com/how-we-use-bem-to-modularise-our-css-82a0c39463b0#.2uvxts71f

希望能帮助到你 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是 BEM 方法? [关闭] 的相关文章

  • 如何在javascript中获取基本url

    我正在建立一个网站代码点火器 http ellislab com codeigniter 我有各种资源 我用base url http ellislab com codeigniter user guide helpers url help
  • Wkhtmltopdf 每页右侧的垂直文本

    下面是使用 wkhtmltopdf 生成的 PDF 示例 我需要在每一页的右书脊上生成文本 我尝试将其添加到标题代码中 似乎会剪辑 PDF 的正文 我正在使用 wkhtmltopdf 的页眉和页脚参数 不太确定如何或是否可以在每个页面的右侧
  • 我不明白 flex-grow 属性吗?

    恐怕我一定不明白flex grow 如果你跳到下面的 JSFiddle 按照我的理解 big应该是另一个大小的三倍 flex item 正如你所看到的 事实并非如此 为什么 http jsfiddle net nrur6mmo http j
  • 表格底部的粘性滚动条

    我不确定 粘性 是否是这个术语 但是有没有办法使滚动条overflow auto保持可见 我有一个相当大的表格 我希望它可以水平滚动 但是 表格也相当高 因此当页面加载时 水平滚动条不在浏览器的视口内 因此很难判断表格是否可滚动 div s
  • 使用Java获取CSS文件中图像的URL?

    我正在尝试使用 Java 获取远程 CSS 文件中图像 所有 MIME 类型 的 URL 我正在使用 jsoup 来获取 css 的 URL 经过无数个小时的观看CSS解析器 http cssparser sourceforge net 由
  • css 在 body 上应用宽度

    我对 html 和 css 完全陌生 所以我的问题可能非常基本 但希望你们能帮助我 udnerstnad 我正在使用以下 css 代码 body background color Olive width 550px font family
  • GWT - css 中常量的问题

    我是 GWT 新手 我正在构建一个小型示例应用程序 我有几个 CSS 文件 我能够成功使用 ClientBundle 和 CssResource 将样式分配给 UiBinder 脚本中定义的元素 现在我想更进一步 使用 def css ru
  • HTML/CSS:页面左侧的导航栏

    我发现创建这样具有良好语义的布局很尴尬 左侧是大约 150 像素宽的列 其中包含导航元素 我想将网站这部分的 HTML 放在 HTML 代码的开头 然后有一个简单的方法来强制页面的其余部分不侵占左侧的区域 150 像素列 我考虑过一些选择
  • 如何获得 CSS 变量引用的颜色装饰以在 VS Code 中工作?

    我正在研究 CSS 自定义属性及其修改 似乎将 alpha 通道添加 更改为颜色的最佳方法是使用hsl符号 root green 120deg 100 50 box background hsl var green 0 5 这种方法的问题是
  • rgb() 和 rgba() 不透明度有什么区别?

    我发现另一个关于 rgb 与 rgba 的问题非常相似 但它缺少关于使用的答案RGB 不透明度 我知道两者之间的区别 rgba 只是 rgb 但带有 alpha 不透明度 问题是 我使用带有不透明度值的 RGB 已经有几个月甚至几年了 它一
  • jQuery / CSS3 动画阴影效果

    所以这个问题可能会被否决 但我认为有人可能会提供帮助 我正在寻找的效果是蓝色块像气球一样上下盘旋 当块上 下移动时 阴影在其下方不断增大和缩小 关于如何编程的任何想法 或者有人知道可以完成的教程 插件吗 你可以使用 jQuery 来完成 或
  • 如何更改 .NET MAUI Blazor 项目中的默认字体?

    我有一个用于 NET MAUI Blazor 应用程序的默认 Visual Studio 项目 针对 Windows x64 构建 我尝试了两种不同的更改字体的方法 在MauiProgram cs中有一个字体的配置ConfigureFont
  • IE jquery click 仅适用于 li 中的文本,不适用于整个框

    我创建了一系列作为 li 的按钮 我希望用户能够单击它们 ul class item list li class item button style color 4bb2c5 1 li li class item button style
  • CSS:如何在“div”内垂直对齐“标签”和“输入”?

    考虑以下代码 http jsfiddle net s2qBw 3 HTML div div
  • 允许指针(单击)事件穿过元素,同时保持滚动功能

    我的目标是拥有一个允许 下面要点击 交互的元素 滚动 众所周知 1 的解是pointer events none 这正如中所描述的单击 DIV 到底层元素 https stackoverflow com questions 3680429
  • 如何在 Chrome 中实现抓取光标图标?

    我知道可以在 Chrome 中使用抓取光标图标 当然是在 Gmail 中 但我不知道如何在我的代码中实现它 我已经尝试过 在CSS中 body cursor grab body cursor webkit grab body cursor
  • scrapy获取同一个类的第n个子文本

    我附上了一张照片 我面临的问题是获取同一类的第一个元素 我想得到 adxHeader gt adxExtraInfo 1st one gt adxExtraInfoPart 1st one gt a text 我编写了以下代码但不起作用 任
  • JSDoc:如何在生成的文档中包含自定义 css 文件模板?

    JS文档docs https jsdoc app about configuring default template html say 将图像目录复制到输出目录 复制全部 将 myproject static 中的静态文件复制到输出目录
  • 当我尝试转发电子邮件时,时事通讯无法隐藏 Gmail 上的响应内容

    我正在尝试写一份时事通讯 但当我测试时 我无法隐藏响应式内容GMail On Outlook and Yahoo一切正常 但如果我尝试转发电子邮件 隐藏的内容就会可见 我测试使用 putsmail https putsmail com gt
  • 响应式菜单:悬停子菜单显示错误

    简而言之 我根据教程创建了一个响应式菜单 当您将鼠标悬停在投资组合按钮上时 菜单应该显示子菜单 而在移动模式下 您需要按该按钮才能显示子菜单 效果很好 问题是该教程有一个错误 如果您在桌面模式下按组合按钮 子菜单将不会再次显示 除非您按 单

随机推荐

  • 在 Javascript 中覆盖警报并确认

    有没有办法覆盖alert and confirm 在 JavaScript 中 我使用 jQuery 所以如果有办法在这个框架中做到这一点 我将不胜感激 我想做这样的事情 override alert msg Show custom stu
  • 按数组列表自定义分页

    我想在java代码中通过数组列表创建自定义分页 import org springframework data domain Sort import org springframework data domain PageRequest i
  • 从字典列表中创建不矛盾项的字典

    这个问题的灵感来自于这个问题 https stackoverflow com q 9906944 589206 我想从字典列表中获取一个字典 该字典应包含所有字典中的所有键 值对 这些字典要么只包含一次 要么所有字典都同意关联值 示例 取自
  • (在Eclipse中使用处理库)如何使用窗口模式?

    http processing org learning eclipse http processing org learning eclipse 根据步骤5 我使用了PApplet main new String present MyGa
  • 检索数据时数据库崩溃问题

    This is the Database field values 下面是我用来从 sqlite 数据库获取数据的代码 void readDataFromRestaurantTable self openDataBase const cha
  • 如何退出gdb中的wh模式

    gdb 中的 wh 模式对我来说效果不太好 当我转储一些数据时 命令窗口和程序文本窗口会重叠 看起来很混乱 我想退出 wh 模式而不退出调试器 也不终止正在运行的程序 我设置了几个断点 所以我不想退出调试器 C x C a C x a C
  • 无法让 CSS 属性选择器工作

    我正在尝试将此 css 转换为使用属性 starts with 选择器 因为我有几个带有 id 属性的锚元素 它们以相同的值开始 a cta button 127944 79d30f48 4e68 43c8 949d a9734a713b3
  • 为什么我应该使用bundle exec 而不是仅仅运行命令? [复制]

    这个问题在这里已经有答案了 使用运行可执行文件是众所周知的最佳实践bundle exec
  • 每 4 件商品替换颜色 [重复]

    这个问题在这里已经有答案了 是否可以使用纯 CSS 创建一个每 4 个项目交替的颜色网格 例如 前 4 个项目为蓝色 接下来的 4 个为红色 然后接下来的 4 个项目为蓝色 依此类推 div Item 1 blue div div Item
  • T-SQL 将多行连接并分组为一行[重复]

    这个问题在这里已经有答案了 我正在寻找一种分组方法 同时还将行连接成逗号分隔的字符串 例子 Name Place Steve Jones New York Steve Jones Washington Albert Smith Miami
  • 将节点从 6 升级到最新版本时,npm i 在 React Native 项目中失败并显示 ENOENT

    在 React Native 项目上将 npm 从 6 14 升级到最新版本时 使用节点14 nvm切换节点版本 理想情况下我想转到节点16 但是特别是在更新npm时 无论14还是16都会发生类似的问题 我也在 mac M1 上使用自制程序
  • 如何计算交易的最低硬币找零?

    嘿大家 我有个问题 我正在使用 Visual Basic Express 我应该计算交易的变化 现在我会使用什么代码 我已经部分工作了 但它开始变得有点混乱 谢谢 对于那些想了解更多信息的人 假设我有一美元 我去商店买东西 我必须要求用户输
  • 无法禁用 OpenCart (PHP) 中的错误报告

    我似乎无法禁用 PHP 中的错误报告 我已经尝试了所有方法 但仍然显示 注意 错误 我的 php ini 有 display errors Off error reporting 0 我的 htaccess 有 php value erro
  • 如何将核心数据模型项传递到视图中进行编辑

    我有一个最小的示例项目CD传递Q https github com ericg xcode questions CDPassingQ 我的主要 内容视图 https github com ericg xcode questions CDPa
  • JSON 发布,我是否把 JSON 推得太远了?

    我只是想知道我是否把 JSON 推得太远了 如果有人以前打过这个 我有一个 xml 文件
  • 在 Spark Scala 中将时间戳转换为 UTC

    我的环境是Spark 2 1 Scala 这可能很简单 但我很伤脑筋 我的数据框 myDF 如下所示 orign timestamp origin timezone 2018 05 03T14 56 America St Johns 201
  • elasticsearch_dsl:聚合生成多个桶

    我想生成这个 GET packets 2017 09 25 search size 0 query match transport protocol tcp aggs clients terms field layers ip src ke
  • Excel宏来合并数据

    我的一个文件夹中有很多excel文件 我想要一个宏来遍历每个文件并复制名为最终成本并在目标文件中制作一个带有源文件名称的工作表 就像有三个文件 A B C 每个文件都有一个名为 最终成本 新文件将包含三个工作表 名称为 A B C 编辑后的
  • Bloc 7.2 迁移 - 在流内传递参数

    我目前正在将一个项目从 Bloc 7 0 迁移到 bloc 7 2 我曾经有一个流 我会yield 在不同的流中并每次传递不同的值作为参数 Stream
  • 什么是 BEM 方法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我最近听说了 BEM 方法 BEM 方法到底有什么用途 BEM 在哪些方面让我们的工作变得更轻松 使用 BEM 是一个好的做法吗 BE