如何在 LESS 中使用 BEM(块、元素、修饰符)命名法

阅读时长 5 分钟读完

前端开发中,样式的命名一直是一个非常重要的话题。Web 开发中使用的 BEM 命名法则,是当前比较流行的命名方式之一。它的全名叫做 "块、元素、修饰符" 直译成中文,也就是将一个 Web 页面中的各个部分划分成块、元素和修饰符三个层级,分别描述出 Web 页面中组成部分的基本特征,从而达到清晰可读,易于维护的效果。而在 LESS 中使用 BEM 命名法,可以更大程度地避免 CSS 样式冲突等问题,方便团队合作维护项目。

BEM 命名法概述

BEM 命名法是一种 CSS 类命名的规范,它的三个部分组成如下:

  • 块(Block):代表高层次(如页面)中的组件的独立块,类名使用单词连字符(-)。
  • 元素(Element):块的一个组成部分,类名使用双下划线(__)。
  • 修饰符(Modifier):一种可用于块和元素的修饰符,用于定义它们的外观、状态等特征,类名使用“修饰符”单词和双连字符(--)。

因此,一个具有层次结构的完整的样式类名应该是这样的:.block__element--modifier

例如:

在这个示例中,.header 是一个块,.header__logo.header__nav.header 的元素,.header--main.header 的一个修饰符。

在 LESS 中使用 BEM 命名法

LESS 是一种预处理器语言,它将 CSS 语言进行扩展并增加了许多新的功能。通过 LESS,可以更优雅地定义样式,避免代码的重复和冗余。

LESS 中可以使用 BEM 的命名方式来定义样式,同时,还有一些很有用的函数和语法来辅助我们更好地完成样式的编写。下面,我们将讲解具体的步骤和注意事项。

BEM 的语法

在 LESS 中,可以使用和 CSS 相同的 BEM 划分方式,只是需要添加变量前缀和使用中括号括起来。例如:

这里的 & 实现了 BEM 中的上下文语义,代表当前选择器的父级。

可以用这些变量来定义 Less 的类选择器,例如:

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

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

这样编译出来的 CSS 如下:

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

使用 mixin 函数

LESS 中非常实用的一个功能是 mixin 函数,它能够让我们定义可重用的类名和样式,可以将一个块的公共样式和属性都写在 mixin 中。

在 LESS 中,定义 mixin 使用 . 开头,类似于定义类名,例如:

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

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

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

这里我们定义了一个名为 .link 的 mixin,包含了文本的装饰(去掉下划线并加上鼠标悬浮效果),在 a 标签中使用它。

嵌套的 BEM

LESS 中可以模拟 HTML 的嵌套结构,也可以嵌套 BEM 的结构。例如:

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

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

这里定义了 .header__nav 的样式和 .header__nav--dark 的样式,以及 .header__nav:hover 的样式。

可以看到,这种嵌套的结构更加紧凑,并且能够明确地表达出 BEM 的层次结构,对样式的分层管理十分有用。

变量的使用

在 LESS 中,可以使用变量来存储多次重复使用的样式元素,减少代码冗余,更方便修改样式。

例如,可以定义一组颜色变量:

然后在样式中使用:

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

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

上面的代码中,使用了 LESS 的变量功能存储颜色,使得 CSS 样式更加易于维护。

总结

在 LESS 中使用 BEM 命名法虽然需要一定的编写成本,但是它能够避免样式冲突等问题,方便团队合作维护项目,具有很大的指导意义。通过本文的介绍,我们了解了在 LESS 中使用 BEM 的一些基本语法和技巧,希望能够对你有所帮助。

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

纠错
反馈