SASS 中的混合器实现基于 BEM 规范的 CSS 样式

阅读时长 4 分钟读完

前言

前端开发中,CSS 样式是不可避免的。样式的写法多种多样,如何写出易维护、易扩展的样式呢?其中一种方案就是 BEM(Block Element Modifier)规范。本文主要介绍如何用 SASS 中的混合器来实现基于 BEM 规范的 CSS 样式。

BEM 规范

BEM 规范是一种命名规范,它将一个组件抽象为一个“块”(Block),将块中的元素抽象为“元素”(Element),将元素的修饰符抽象为“修饰符”(Modifier)。例如,一个视频播放器,可以把整个播放器看作是一个块,播放器中的播放按钮、暂停按钮、音量调节条等可以看作是元素,其中播放按钮按下后的样式、暂停按钮按下后的样式、音量调节条静音状态下的样式等可以看作是修改器。这样的规范使得 CSS 样式的命名更加规范、可读性更好,方便协作开发、维护和扩展。

SCSS 混合器

SCSS 是 Sass 的一种语法,允许用户使用 Sass 的一些高级功能,比如变量、嵌套、混合器等。SCSS 的混合器允许我们定义一个 CSS 样式组合,可以在需要的地方引用使用,实现 CSS 的代码复用。混合器可以带参数或不带参数,我们可根据具体情况来定义。

如何用混合器实现基于 BEM 规范的 CSS 样式

基于 BEM 规范的样式命名规则为 .block__element--modifier { },在 SCSS 里,我们可以将其实现为一个混合器:

-- -------------------- ---- -------
------ ------------- --------- ----- ---------- ----- -
  --- -------- -- ---- --- --------- -- ---- -
    --------- -
      ---------
    -
  -
  ----- -- -------- -- ---- --- --------- -- ---- -
    ---------------------- -
      ---------
    -
  -
  ----- -- -------- -- ---- --- --------- -- ---- -
    ------------------------------------ -
      ---------
    -
  -
-

这个混合器 b-e-m 接收三个参数 $block, $element, $modifier,其中 $element$modifier 是可选参数,没有传值时默认值为 null。混合器根据参数判断出 .block.block__element.block__element--modifier 并为其设置样式。

我们可以通过下面的示例代码来理解如何使用:

-- -------------------- ---- -------
------- ----------------------

-------- --------------- -
  -- ----
  ---------- -----
  ------ -----
  ----------------- -----
-

-------- --------------- ------- -
  -- --------
  --------- -
    -------- ---
    ------ -----
    ------- -----
    ----------------- -------------------
  -
-

-------- --------------- ------- --------- -
  -- ---------
  ----------------- -----
  ------ -----

  --------- -
    ------- ----------------
  -
-

这里我们定义了一个按钮 .button,并有一个带有图标的状态 .button__icon,还有一个被激活时的状态 .button__icon--active。使用混合器,我们可以用命名规范来定义 CSS 样式,实现代码的复用和可读性的提高。

总结

本文介绍了如何使用 SASS 中的混合器实现基于 BEM 规范的 CSS 样式,通过代码复用和命名规范提高了代码的可维护性和可读性。在实际开发中,我们可以根据具体情况,结合 BEM 规范和 SASS 的混合器,来实现更加易维护的 CSS 样式。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64cb219b5ad90b6d041eea73

纠错
反馈