-
Notifications
You must be signed in to change notification settings - Fork 2
components
Компонентная верстка - создание малых и независимых CSS-компонентов
Многократно используемый CSS-компонент может применяться к различным элементам в различных частях дерева DOM и не зависит от типов элементов, поскольку опирается на классы
CSS-компонент связан с элементом-контенером с помощью уникального имени класса
Элемент-контейнер может содержать другие элементы
Инкапсюляция стилей этих элементов обеспечивается использованием наследственных селекторов:
.some-component {
...
}
.some-component img {
...
}Таким образом стили внутри компонента изолируются от стилей других элементов на странице
Иными словами, мы используем уникальное имя для набора стилей, что позволяет многократно использовать этот набор без повторения CSS-правил
Главное достоинство такого подхода - возможность использовать модификаторы, обеспечивающие различное поведение и внешний вид одного и того же CSS-компонента
Технология BEM ( block, element, modifier ), разработанная ребятами из Яндекса, представляет собой способ информативного именования CSS-классов, чтобы сделать их более понятными для других разработчиков
Смысл BEM заключается в том, чтобы рассказать другим разработчикам больше о том, что делает фрагмент разметки только от своего имени
Прочитав некоторый HTML-код с некоторыми классами, можно понять, как связаны элементы
- что-то может быть просто компонентом
- что-то может быть дочерним элементом этого компонента
- а что-то может быть вариацией или модификатором этого компонента
Схема именования CSS-классов:
.block { ... }
.block__element { ... }
.block--modifier { ... }где
- .block представляет класс компонента
- .block__element представляет класс потомка элемента класса .block
- .block--modifier представляет другую версию класса .block
Здесь использованы двойные, а не одиночные дефисы и подчеркивания
Причина этого в том, что в имени самого блока может быть использован дефис или подчеркивание
/* Блок */
.site-search { ... }
/* Элемент */
.site-search__field { ... }
/* Модификатор */
.site-search--full { ... } ![]() |
|---|
<figure class="overshadow">
<img src="https://images.pexels.com/photos/450038/pexels-photo-450038.jpeg"
alt="Welcome"
class="overshadow__image">
<div class="overshadow__shadow">
<div class="overshadow__text">Welcome</div>
</div>
</figure>.overshadow {
position: relative;
width: 50%;
margin: 0 25%;
box-sizing: border-box;
}
.overshadow__image {
display: block;
width: 100%;
height: auto;
}
.overshadow__shadow {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
opacity: 0;
transition: .5s ease;
background-color: #003030b0;
transform: rotate(30deg) scale(0.5);
}
.overshadow:hover .overshadow__shadow {
opacity: 1;
transform: rotate(0deg) scale(1);
}
.overshadow__text {
font-family: Arial;
color: white;
font-size: 5vmin;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
}
Компонентная вёрстка
BEM
1
Всемирная паутина
Пример
