[사양] CSS BEM 작성 사양
BEM 명명 규칙을 사용하면 이론적으로 css
코드의 각 줄에는 선택기가 하나만 있습니다. css
代码都只有一个选择器。
BEM代表“块(block),元素(element),修饰符(modifier)”,我们常用这三个实体开发组件。
在选择器中,由以下三种符合来表示扩展的关系:
- 中划线 :仅作为连字符使用,表示某个块或者某个子元素的多单词之间的连接记号。 __ 双下划线:双下划线用来连接块和块的子元素 _ 单下划线:单下划线用来描述一个块或者块的子元素的一种状态 type-block__element_modifier
块(block)
一个块是设计或布局的一部分,它有具体且唯一地意义 ,要么是语义上的要么是视觉上的。
在大多数情况下,任何独立的页面元素(或复杂或简单)都可以被视作一个块。它的HTML容器会有一个唯一的CSS类名,也就是这个块的名字。
针对块的CSS类名会加一些前缀( ui-
),这些前缀在CSS中有类似 命名空间 的作用。
一个块的正式(实际上是半正式的)定义有下面三个基本原则:
- CSS中只能使用类名(不能是ID)。
- 每一个块名应该有一个命名空间(前缀)
- 每一条CSS规则必须属于一个块。
例如:一个自定义列表 .list
是一个块,通常自定义列表是算在 mod
类别的,在这种情况下,一个 list
列表的block写法应该为:
.list
元素(element)
块中的子元素是块的子元素,并且子元素的子元素在 bem
里也被认为是块的直接子元素。一个块中元素的类名必须用父级块的名称作为前缀。
如上面的例子,li.item
block
🎜블록은 의미상으로나 시각적으로나 구체적이고 고유한 의미를 갖는 디자인이나 레이아웃의 일부입니다. 🎜🎜대부분의 경우 독립적인 페이지 요소(복잡하거나 단순)는 블록으로 간주될 수 있습니다. 해당 HTML 컨테이너에는 블록의 이름인 고유한 CSS 클래스 이름이 있습니다. 🎜🎜일부 접두사(ui-
)가 블록의 CSS 클래스 이름에 추가됩니다. CSS의 이러한 접두사는 네임스페이스의 역할 🎜. 🎜🎜블록의 형식적(실제로는 준형식적) 정의에는 다음 세 가지 기본 원칙이 있습니다. 🎜- CSS에서는 클래스 이름(ID 아님)만 사용할 수 있습니다.
- 각 블록 이름에는 네임스페이스(접두사)가 있어야 합니다.
- 각 CSS 규칙은 블록에 속해야 합니다.
.list
는 블록입니다. 일반적으로 사용자 정의 목록은 mod
범주에 포함됩니다. , list
목록의 블록 쓰기는 다음과 같아야 합니다: 🎜.list{}.list.select{}.list .item{}.list .item.active{}.list{}.list_select{}.list__item{}.list__item_active{}🎜