[Spécification] Spécification d'écriture CSS BEM


En utilisant la convention de dénomination BEM, théoriquement, chaque ligne de code css n'a qu'un seul sélecteur. css 代码都只有一个选择器。

BEM代表“块(block),元素(element),修饰符(modifier)”,我们常用这三个实体开发组件。

在选择器中,由以下三种符合来表示扩展的关系:

-   中划线 :仅作为连字符使用,表示某个块或者某个子元素的多单词之间的连接记号。
__  双下划线:双下划线用来连接块和块的子元素
_   单下划线:单下划线用来描述一个块或者块的子元素的一种状态

type-block__element_modifier

块(block)

一个块是设计或布局的一部分,它有具体且唯一地意义 ,要么是语义上的要么是视觉上的。

在大多数情况下,任何独立的页面元素(或复杂或简单)都可以被视作一个块。它的HTML容器会有一个唯一的CSS类名,也就是这个块的名字。

针对块的CSS类名会加一些前缀( ui-),这些前缀在CSS中有类似 命名空间 的作用。

一个块的正式(实际上是半正式的)定义有下面三个基本原则:

  1. CSS中只能使用类名(不能是ID)。
  2. 每一个块名应该有一个命名空间(前缀)
  3. 每一条CSS规则必须属于一个块。

例如:一个自定义列表 .list 是一个块,通常自定义列表是算在 mod 类别的,在这种情况下,一个 list 列表的block写法应该为:

.list

元素(element)

块中的子元素是块的子元素,并且子元素的子元素在 bem 里也被认为是块的直接子元素。一个块中元素的类名必须用父级块的名称作为前缀。

如上面的例子,li.item

BEM signifie "bloc, élément, modificateur". Nous utilisons couramment ces trois entités pour développer des composants.

block

🎜Un bloc est une partie d'une conception ou d'une mise en page qui a une signification spécifique et unique, sémantiquement ou visuellement. 🎜🎜Dans la plupart des cas, tout élément de page indépendant (complexe ou simple) peut être considéré comme un bloc. Son conteneur HTML aura un nom de classe CSS unique, qui est le nom du bloc. 🎜🎜Certains préfixes (ui-) seront ajoutés au nom de classe CSS du bloc. Ces préfixes en CSS sont similaires à Le rôle de l'espace de noms 🎜. 🎜🎜La définition formelle (en fait semi-formelle) d'un bloc repose sur les trois principes de base suivants : 🎜
  1. Seuls les noms de classe (pas les identifiants) peuvent être utilisés en CSS.
  2. Chaque nom de bloc doit avoir un espace de noms (préfixe)
  3. Chaque règle CSS doit appartenir à un bloc.
🎜Par exemple : une liste personnalisée .list est un bloc. Habituellement, la liste personnalisée est comptée dans la catégorie mod. Dans ce cas, Suivant. , l'écriture en bloc d'une liste list doit être : 🎜
.list{}.list.select{}.list .item{}.list .item.active{}.list{}.list_select{}.list__item{}.list__item_active{}
🎜

LESS 书写规范

使用 .less 后缀的文件来存储变量、混合代码以及最终合并压缩。

Utilisez les fichiers suffixés .less pour stocker les variables, mélanger le code et la compression finale de la fusion.

子less注解
lib-base.less预定义的变量,例如颜色、字号、字体
lib-mixins.less用于混合的代码,例如渐变、半透明的混合
lib-reset.less初始化
lib-ui.less颗粒化ui功能
xxx.lessComme dans l'exemple ci-dessus, il représente une liste sélectionnée et un élément de liste activé

<ul class="xxx">
    <li class="xxx__item">第一项
        <div class="xxx__product-name">我是名称</div>
        <span class="xxx__ming-zi-ke-yi-hen-chang">看类名</span>
        <a href="#" class="xxx__link">我是link</a>
    <li>
    <li class="xxx__item xxx__item_current">第二项 且 当前选择项
        <div class="xxx__product-name">我是名称</div>
        <a href="#" class="xxx__item-link">我是link</a>
    <li>
    <li class="xxx__item xxx__item_hightlight">第三项 且 特殊高亮
         <div class="xxx__product-name">我是名称</div>
        <a href="#" class="xxx__item-link">我是link</a>
    <li>
</ul>

Spécification d'écriture LESS

lib-base.lessVariables prédéfinies, telles que la couleur, la taille de la police, la police
enfant moinsAnnotation
🎜🎜lib-mixins.less🎜🎜Code pour le mélange, tel que les dégradés, mélange translucide🎜🎜🎜lib-reset.less🎜🎜Initialisation🎜🎜🎜lib-ui.less🎜🎜fonction granulaire de l'interface utilisateur 🎜🎜🎜xxx.less🎜🎜Style de module🎜🎜🎜🎜

L'ordre de référence des fichiers .less affectera la portée et la priorité du style final compilé. Veuillez essayer de les référencer dans l'ordre du bas vers le personnalisé. .less 文件的引用顺序会对最终编译的样式的作用域和优先级产生影响,请尽量按照由底层到自定义的顺序来引用。

关于风格

书写原则

1. 原则上不会出现2层以上选择器嵌套

使用BEM原则,用命名来解耦,所有类名都为一层,增加效率和复用性

2. 两层选择器嵌套出现在.mod-xxx__item_current子元素的情况,如下:

使用推荐的嵌套写法

常规写法:

rrreee

推荐:

rrreee

对应的HTML结构如下:

rrreee

BEM 解决问题

组件之间的完全解耦,不会造成命名空间的污染,如:.mod-xxx ul li