Skip to content

components

garevna edited this page Apr 23, 2019 · 16 revisions

ico25 Компонентная вёрстка

Компонентная верстка - создание малых и независимых CSS-компонентов

Многократно используемый CSS-компонент может применяться к различным элементам в различных частях дерева DOM и не зависит от типов элементов, поскольку опирается на классы

CSS-компонент связан с элементом-контенером с помощью уникального имени класса

Элемент-контейнер может содержать другие элементы

Инкапсюляция стилей этих элементов обеспечивается использованием наследственных селекторов:

.some-component {
    ...
}

.some-component img {
    ...
}

Таким образом стили внутри компонента изолируются от стилей других элементов на странице

Иными словами, мы используем уникальное имя для набора стилей, что позволяет многократно использовать этот набор без повторения CSS-правил

Главное достоинство такого подхода - возможность использовать модификаторы, обеспечивающие различное поведение и внешний вид одного и того же CSS-компонента


ico20 BEM

Технология 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 { ... } 

cap-25 1

html
<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>
css
.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;
}

© Irina H.Fylyppova 2019



Занятие 1


Занятие 2


Занятие 3


Занятие 4


Занятие 5


Занятие 6


Занятие 7


Занятие 8


Дополнительно

Clone this wiki locally