SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
CSS по БЕМ
Руслан Хомяк,
1
CSS до БЕМ
#header div span a {...}
.content .container div span p {...}
.wrapper form .line input {...}
div.footer.black ul li span {...}
.main-content div div a {...}
footer div > div p a.button {...}
01.
02.
03.
04.
05.
06.
2
3
БЕМ (Блок, Елемент, Модифікатор) — методологія, яка забезпечує
компонентний підхід до веб-розробки. В її основі лежить принцип розділу
інтерфейсу на незалежні блоки. Це дозволяє легко і швидко розробляти
інтерфейси будь-якої складності і повторно використовувати існуючий
код.
4
Блок
Логічно і функціонально абсолютно незалежний компонент сторінки, який
є самодостатнім і може бути використаний в будь-якому місці проекту,
при цьому не втрачаючи свого смислу.
5
Особливості блоку
1. Назва повинна характерезувати смисл блоку, а не його стан.
2. Блок не повинен впливати на своє оточення (відступи, позиціонування).
6
Приклад блоку
<!-- Правильно. Семантично осмислений блок 'logo'-->
<div class="logo"></div>
<!-- Неправильно. Описано зовнішній вигляд -->
<div class="top-big-logo"></div>
7
Принцип роботи з блоками
Вкладеність
1. Блоки можна вкладати один в одного.
2. Дозволяється будь-яка вкладеність блоків.
8
<header class="header">
<nav class="menu">
</nav>
</header>
HTML реалізація блоків
<div class="logo"></div>
<ul class="submenu"></ul>
<div class="search"></div>
01.
02.
03.
04.
05.
06.
07.
9
CSS реалізація блоків
<!-- Правильно. Всі блоки абсолютно незалежні. Можуть бути використані у
будь-якому місці проекту.-->
.header {...}
.logo {...}
.menu {...}
.submenu {...}
.search {...}
01.
02.
03.
04.
05.
10
CSS реалізація блоків
<!-- Неправильно. Блоки залежні від своїх батьків і не можуть бути
використаними без них.-->
.header .logo {...}
.header .menu {...}
.header .menu .submenu {...}
.header .search {...}
01.
02.
03.
04.
11
Елемент
Частина блоку, яка зв'язана з ним по смислу і функціонально. Елемент не
може використовуватись без блоку до якого відноситься.
12
Особливості елементу
1. Назва повинна характерезувати смисл елементу, а не його стан.
2. Ім'я елементу відділяється від імені блоку двома підресленнями.
13
<div class="product">
</div>
Приклад елементів
<img class="product__picture">
<h4 class="product__name"></h4>
<span class="product__price"></span>
<button class="product__order"></button>
01.
02.
03.
04.
05.
06.
14
Принципи роботи з елементами
1. Вкладеність
2. Належність
3. Необов'язковість
15
Вкладеність елементів
1. Елементи можна вкладати один в одного.
2. Дозволяється будь-яка вкладеність елементів.
3. Елемент - це завжди частина блоку, тобто він не може бути частиною
іншого елементу.
16
<div class="product">
<div class="product__info">
</div>
<div class="product__action">
</div>
</div>
HTML реалізація елементів
<!-- Правильно. Структура назви елементів відповідає схемі: 'block-name__element-name'-->
<img class="product__picture">
<h4 class="product__name"></h4>
<span class="product__price"></span>
<a href="#" class="product__view"></a>
<button class="product__order"></button>
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
17
CSS реалізація елементів
<!-- Правильно. Елементи знаходяться на одному рівні.-->
.product {...}
.product__picture {...}
.product__info {...}
.product__name {...}
.product__price {...}
.product__action {...}
.product__view {...}
.product__order {...}
Це дозволяє змінювати DOM-структуру без внесення змін в коді кожного окремого елементу.
01.
02.
03.
04.
05.
06.
07.
08.
18
CSS реалізація елементів
<!-- Неправильно. Присутній каскад для елементів.-->
.product {...}
.product__picture {...}
.product__info .product__name {...}
.product__info .product__price {...}
.product__action {...}
.product__action .product__view {...}
.product__action .product__order {...}
01.
02.
03.
04.
05.
06.
07.
19
<div class="product">
<div class="product__info">
</div>
<div class="product__action">
</div>
</div>
HTML реалізація елементів
<!-- Неправильно. Структура назви елементів не відповідає схемі: 'block-name__element-name'-->
<img class="product__picture">
<h4 class="product__info__name"></h4>
<span class="product__info__price"></span>
<a href="#" class="product__action__view"></a>
<button class="product__action__order"></button>
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
20
<div class="product">
<div class="product__info">
</div>
<div class="product__action">
</div>
</div>
<!-- Неправильно. Структура назви елементів не відповідає схемі: 'block-name__element-name'-->
<img class="product__picture">
<h4 class="product__info__name"></h4>
<span class="product__info__description"></span>
<span class="product__info__price">
<span class="product__info__price__old"></span>
<span class="product__info__price__new"></span>
</span>
<a href="#" class="product__action__view"></a>
<button class="product__action__order"></button>
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
21
Належність елементів
Елемент - це завжди частина блоку, він не повинен використовуватись
окремо від нього.
22
<div class="product">
</div>
HTML реалізація
<!-- Правильно. Елементи лежать всередині блоку 'product'.-->
<img class="product__picture">
<h4 class="product__name"></h4>
<span class="product__price"></span>
<button class="product__order"></button>
01.
02.
03.
04.
05.
06.
23
<div class="product">
</div>
HTML реалізація
<!-- Неправильно. Елементи лежать поза блоком 'product'.-->
<span class="product__price"></span>
<button class="product__order"></button>
<img class="product__picture">
<h4 class="product__name"></h4>
01.
02.
03.
04.
05.
06.
24
<footer class="footer">
</div>
Необов'язковість елементів
Елемент - необов'язкова частина блоку. Не у всіх блоків, повинні бути
елементи.
Наприклад:
<nav class="menu"></nav>
<ul class="social"></ul>
01.
02.
03.
04.
25
Це блок чи елемент?
26
<div class="product">
</div>
Можна легко змінити елемент на блок або
навпаки
<img class="illustration product__picture">
<h4 class="product__name"></h4>
<span class="product__price"></span>
<button class="product__order"></button>
01.
02.
03.
04.
05.
06.
27
Модифікатор
Сутність, яка визначає зовнішній вигляд, стан або поведінку блоку чи
елементу і не може бути викорстана окремо від них. Модифікатор має ім'я
і може мати значення. У блоку або елементу, може бути декілька
модифікаторів одночасно.
28
Особливості модифікаторів
1. Назва повинна характерезувати зовнішній вигляд, стан, або поведінку.
2. Ім'я модифікатора відділяється від імені блоку чи елементу одним
підкресленням.
29
Типи модифікаторів
1. Булевий
2. Ключ-значення
<!-- Блок 'button' має булевий модифікатор 'disabled'-->
<button class="button button_disabled"></button>
<!-- Блок 'button' має модифікатор 'size' зі значенням 's'-->
<button class="button button_size_s"></button>
30
Префікси
1. b- (block) - для позначення звичайного блоку.
2. h- (holster) - для задавання відступів групі блоків.
3. l- (layout) - для розташування інших блоків.
4. g- (global) - для глобальних модифікаторів.
5. js- (JavaScript) - для блоків, які використовують JavaScript.
6. ...
<!-- Приклад використання префіксів -->
<div class="b-button"></div>
<div class="g-clearfix"></div>
З розвитком БЕМ, Яндекс відмовився від префіксів.
31
Мікс
Це прийом, який дозволяє використовувати різні БЕМ-сутності на одному
DOM-вузлі.
32
Мікси дозволяють
1. Поєднувати поведінку і стилі декількох сутностей без дублювання коду.
2. Створювати семантично нові компоненти інтерфейсу на основі тих, які вже
є.
33
header__logo
header__menu
header__search
HTML реалізація міксів
<header class="header">
<div class="logo "></div>
<nav class="menu ">
<ul class="submenu"></ul>
</nav>
<div class="search "></div>
</header>
01.
02.
03.
04.
05.
06.
07.
34
CSS реалізація міксів
.header {...}
.header__logo {зовнішня геометрія, позиціювання}
.header__menu {зовнішня геометрія, позиціювання}
.header__search {зовнішня геометрія, позиціювання}
.logo {...}
.menu {...}
.submenu {...}
.search {...}
01.
02.
03.
04.
05.
06.
07.
08.
35
БЕМ і препроцесори
.product {
&__picture {...}
&__info {...}
&__name {...}
&__price {...}
&__action {...}
&__view {...}
&__order {...}
}
36
БЕМ і CSS-каскад
Основний принцип БЕМ — незалежні блоки. Вкладені селектори
збільшують зв'язаність коду і роблять його повторне використання
неможливим. Каскад не забороняється, але не рекомендується.
37
Наприклад, можна використати вкладеність для зміни теми елементів блоку:
.nav {...}
.nav_theme_light .nav__item {'зміна теми пунктів меню'}
.nav__item {...}
або коли потрібно вивести тест з WYSIWYG:
.text h2 {...}
.text p {...}
.text ul li {...}
38
Які переваги надає БЕМ
• Незалежні блоки
• Семантика
• Відсутність колізій
• Структурованість коду
• Масштабування
• Зменшується час на розробку та підтримку проекту
• Поріг входу на проект мінімальний
39
Як перейти на CSS по БЕМ
• Не використовувати id та теги для селекторів
• Абстрагуватись від DOM-моделі і навчитись створювати блоки
• Мінімізувати кількість вкладених селекторів
• Використовувати правила по іменуванню CSS-класів
• Використовувати мікси
• Повторно використовувати блоки
40
Чому не можна використовувати теги або тег
і клас для селекторів
<a class="button button_active"></a>
a.button {...}
a.button_active {...}
З розвитком проекту можуть з'явитись блоки input.button, span.button,
button.button
41
42
https://ru.bem.info/
43
Дякую за увагу
44

Más contenido relacionado

La actualidad más candente

дикі та свійські тварини
дикі та свійські тваринидикі та свійські тварини
дикі та свійські тварини
Vasilij Goncharenko
 
Маркетингове планування роботи бібліотеки навчального закладу
Маркетингове планування роботи  бібліотеки навчального закладуМаркетингове планування роботи  бібліотеки навчального закладу
Маркетингове планування роботи бібліотеки навчального закладу
Library Franko
 

La actualidad más candente (20)

Бібліографічні видання публічної бібліотеки: різновиди та методика створення
Бібліографічні видання публічної бібліотеки: різновиди та методика створенняБібліографічні видання публічної бібліотеки: різновиди та методика створення
Бібліографічні видання публічної бібліотеки: різновиди та методика створення
 
Безпечний інтернет 1
Безпечний інтернет 1Безпечний інтернет 1
Безпечний інтернет 1
 
дикі та свійські тварини
дикі та свійські тваринидикі та свійські тварини
дикі та свійські тварини
 
постмодернізм
постмодернізмпостмодернізм
постмодернізм
 
Марк Туллій Цицерон
Марк Туллій ЦицеронМарк Туллій Цицерон
Марк Туллій Цицерон
 
теорія загальний варіант (електротехнічні роботи)
теорія загальний варіант (електротехнічні роботи)теорія загальний варіант (електротехнічні роботи)
теорія загальний варіант (електротехнічні роботи)
 
Екологічні чинники
Екологічні чинникиЕкологічні чинники
Екологічні чинники
 
Особливості автоматизованої бібліотечно-інформаційної системи ІРБІС
Особливості  автоматизованої бібліотечно-інформаційної системи ІРБІСОсобливості  автоматизованої бібліотечно-інформаційної системи ІРБІС
Особливості автоматизованої бібліотечно-інформаційної системи ІРБІС
 
Безкоштовний воркшоп з основ Arduino. Частина 1.
Безкоштовний воркшоп з основ Arduino. Частина 1.Безкоштовний воркшоп з основ Arduino. Частина 1.
Безкоштовний воркшоп з основ Arduino. Частина 1.
 
Цифрові інструменти в роботі бібліотек
Цифрові інструменти в роботі бібліотекЦифрові інструменти в роботі бібліотек
Цифрові інструменти в роботі бібліотек
 
Сенсорні системи нюху,смаку, рівноваги, дотику.
Сенсорні системи нюху,смаку, рівноваги, дотику.Сенсорні системи нюху,смаку, рівноваги, дотику.
Сенсорні системи нюху,смаку, рівноваги, дотику.
 
Маркетингове планування роботи бібліотеки навчального закладу
Маркетингове планування роботи  бібліотеки навчального закладуМаркетингове планування роботи  бібліотеки навчального закладу
Маркетингове планування роботи бібліотеки навчального закладу
 
Презентація 10 клас Урок 6. Комп`ютерно-орієнтовані засоби діяльності (Ривкін...
Презентація 10 клас Урок 6. Комп`ютерно-орієнтовані засоби діяльності (Ривкін...Презентація 10 клас Урок 6. Комп`ютерно-орієнтовані засоби діяльності (Ривкін...
Презентація 10 клас Урок 6. Комп`ютерно-орієнтовані засоби діяльності (Ривкін...
 
програми та онлайн-середовища для роботи з графічними даними
програми та онлайн-середовища для роботи з графічними данимипрограми та онлайн-середовища для роботи з графічними даними
програми та онлайн-середовища для роботи з графічними даними
 
Cучасні форми роботи в бібліотеках
Cучасні форми роботи в бібліотекахCучасні форми роботи в бібліотеках
Cучасні форми роботи в бібліотеках
 
Uroki trudovogo-navchannya-1-kl
Uroki trudovogo-navchannya-1-kl Uroki trudovogo-navchannya-1-kl
Uroki trudovogo-navchannya-1-kl
 
лекція 19
лекція 19лекція 19
лекція 19
 
софія русова
софія русовасофія русова
софія русова
 
Урок 22 для 7 класу - Практична робота №6. Розробка проектів з повторенням з...
Урок 22 для 7 класу  - Практична робота №6. Розробка проектів з повторенням з...Урок 22 для 7 класу  - Практична робота №6. Розробка проектів з повторенням з...
Урок 22 для 7 класу - Практична робота №6. Розробка проектів з повторенням з...
 
8 tn h_2016
8 tn h_20168 tn h_2016
8 tn h_2016
 

Destacado

Презентация Анны Вахитовой
Презентация Анны ВахитовойПрезентация Анны Вахитовой
Презентация Анны Вахитовой
Nataly Nikitina
 
Agile/Scrum методологии разработки программного обеспечения
Agile/Scrum методологии разработки программного обеспеченияAgile/Scrum методологии разработки программного обеспечения
Agile/Scrum методологии разработки программного обеспечения
jazzteam
 

Destacado (17)

Збираю фронтенд на Brunch і чудово себе почуваю
Збираю фронтенд на Brunch і чудово себе почуваюЗбираю фронтенд на Brunch і чудово себе почуваю
Збираю фронтенд на Brunch і чудово себе почуваю
 
Перевірка і оптимізація верстки
Перевірка і оптимізація версткиПеревірка і оптимізація верстки
Перевірка і оптимізація верстки
 
Stakeholders and expectations, або коли проекти успішні?
Stakeholders and expectations, або коли проекти успішні?Stakeholders and expectations, або коли проекти успішні?
Stakeholders and expectations, або коли проекти успішні?
 
Природа организационных изминений
Природа организационных изминенийПрирода организационных изминений
Природа организационных изминений
 
Прозрачность: что выделяет отличного менеджера среди хороших
Прозрачность: что выделяет отличного менеджера среди хорошихПрозрачность: что выделяет отличного менеджера среди хороших
Прозрачность: что выделяет отличного менеджера среди хороших
 
M3.0 Leadership Path Agenda
M3.0 Leadership Path AgendaM3.0 Leadership Path Agenda
M3.0 Leadership Path Agenda
 
In Team We Trust: How to grow Trust in Agile teams.
In Team We Trust:  How to grow Trust in Agile teams.In Team We Trust:  How to grow Trust in Agile teams.
In Team We Trust: How to grow Trust in Agile teams.
 
Team trust canvas (RUS)
Team trust canvas (RUS)Team trust canvas (RUS)
Team trust canvas (RUS)
 
Презентация Анны Вахитовой
Презентация Анны ВахитовойПрезентация Анны Вахитовой
Презентация Анны Вахитовой
 
Kanban vs Scrum – чьё кунг-фу сильнее
Kanban vs Scrum – чьё кунг-фу сильнееKanban vs Scrum – чьё кунг-фу сильнее
Kanban vs Scrum – чьё кунг-фу сильнее
 
Kanban at Yandex Images (Agile Days 2013)
Kanban at Yandex Images (Agile Days 2013)Kanban at Yandex Images (Agile Days 2013)
Kanban at Yandex Images (Agile Days 2013)
 
Scrum-Kanban-Scrumban
Scrum-Kanban-ScrumbanScrum-Kanban-Scrumban
Scrum-Kanban-Scrumban
 
Agile, SCRUM, Планирование – что в этом для программистов?
Agile, SCRUM, Планирование – что в этом для программистов?Agile, SCRUM, Планирование – что в этом для программистов?
Agile, SCRUM, Планирование – что в этом для программистов?
 
Как работает KANBAN
Как работает KANBANКак работает KANBAN
Как работает KANBAN
 
Agile/Scrum методологии разработки программного обеспечения
Agile/Scrum методологии разработки программного обеспеченияAgile/Scrum методологии разработки программного обеспечения
Agile/Scrum методологии разработки программного обеспечения
 
Agile: Что это такое и какая от него польза
Agile: Что это такое и какая от него пользаAgile: Что это такое и какая от него польза
Agile: Что это такое и какая от него польза
 
Контент в SMM (Контент для продвижения в социальных сетях)
Контент в SMM (Контент для продвижения в социальных сетях)Контент в SMM (Контент для продвижения в социальных сетях)
Контент в SMM (Контент для продвижения в социальных сетях)
 

Similar a CSS по БЕМ

Joomla 3. Що нового для розробників у новій версії - Віталій Маренков
Joomla 3. Що нового для розробників у новій версії - Віталій МаренковJoomla 3. Що нового для розробників у новій версії - Віталій Маренков
Joomla 3. Що нового для розробників у новій версії - Віталій Маренков
Igor Bronovskyy
 
Html мова розмітки гіпертекстового документу
Html  мова розмітки гіпертекстового документуHtml  мова розмітки гіпертекстового документу
Html мова розмітки гіпертекстового документу
zaykoannaivanivna
 
O.Posyniak - UI Components
O.Posyniak - UI ComponentsO.Posyniak - UI Components
O.Posyniak - UI Components
Oleg Posyniak
 

Similar a CSS по БЕМ (20)

ASP.Net MVC
ASP.Net MVCASP.Net MVC
ASP.Net MVC
 
23
2323
23
 
WordPress meetup Kyiv - Starting theme
WordPress meetup Kyiv - Starting themeWordPress meetup Kyiv - Starting theme
WordPress meetup Kyiv - Starting theme
 
Drupal Optimization
Drupal OptimizationDrupal Optimization
Drupal Optimization
 
Розробка веб-сайту. Основні етапи
Розробка веб-сайту. Основні етапиРозробка веб-сайту. Основні етапи
Розробка веб-сайту. Основні етапи
 
DrupalTour. Zhytomyr — Drupal Optimization (Dmitry Kinakh, InternetDevels)
DrupalTour. Zhytomyr — Drupal Optimization (Dmitry Kinakh, InternetDevels)DrupalTour. Zhytomyr — Drupal Optimization (Dmitry Kinakh, InternetDevels)
DrupalTour. Zhytomyr — Drupal Optimization (Dmitry Kinakh, InternetDevels)
 
Layouts vs Templates - Sergey Borodylin
Layouts vs Templates - Sergey BorodylinLayouts vs Templates - Sergey Borodylin
Layouts vs Templates - Sergey Borodylin
 
Лекція #04. Основи блочної верстки
Лекція #04. Основи блочної версткиЛекція #04. Основи блочної верстки
Лекція #04. Основи блочної верстки
 
Theme24-jQuery
Theme24-jQueryTheme24-jQuery
Theme24-jQuery
 
Joomla 3. Що нового для розробників у новій версії - Віталій Маренков
Joomla 3. Що нового для розробників у новій версії - Віталій МаренковJoomla 3. Що нового для розробників у новій версії - Віталій Маренков
Joomla 3. Що нового для розробників у новій версії - Віталій Маренков
 
Методології Front end
Методології Front endМетодології Front end
Методології Front end
 
основи веб дизайну розділ 2 1
основи веб дизайну розділ 2 1основи веб дизайну розділ 2 1
основи веб дизайну розділ 2 1
 
Twig in symfony
Twig in symfonyTwig in symfony
Twig in symfony
 
3
33
3
 
Html мова розмітки гіпертекстового документу
Html  мова розмітки гіпертекстового документуHtml  мова розмітки гіпертекстового документу
Html мова розмітки гіпертекстового документу
 
6 klas
6 klas 6 klas
6 klas
 
57,23.pdf
57,23.pdf57,23.pdf
57,23.pdf
 
O.Posyniak - UI Components
O.Posyniak - UI ComponentsO.Posyniak - UI Components
O.Posyniak - UI Components
 
Випускна робота Лемеш
Випускна робота ЛемешВипускна робота Лемеш
Випускна робота Лемеш
 
Website on WordPress. HTML/CSS/JavaScript
Website on WordPress. HTML/CSS/JavaScriptWebsite on WordPress. HTML/CSS/JavaScript
Website on WordPress. HTML/CSS/JavaScript
 

Más de Stfalcon Meetups

Kubernetes: від знайомства до використання у CI/CD
Kubernetes: від знайомства до використання у CI/CDKubernetes: від знайомства до використання у CI/CD
Kubernetes: від знайомства до використання у CI/CD
Stfalcon Meetups
 

Más de Stfalcon Meetups (20)

Conversion centered design 3
Conversion centered design 3Conversion centered design 3
Conversion centered design 3
 
Discovery phase
Discovery phaseDiscovery phase
Discovery phase
 
Stfalcon QA Meetup 31.01.2020
Stfalcon QA Meetup 31.01.2020Stfalcon QA Meetup 31.01.2020
Stfalcon QA Meetup 31.01.2020
 
Stfalcon QA Meetup 31.01.2020
Stfalcon QA Meetup 31.01.2020Stfalcon QA Meetup 31.01.2020
Stfalcon QA Meetup 31.01.2020
 
Stfalcon PM Meetup 21.11
Stfalcon PM Meetup 21.11Stfalcon PM Meetup 21.11
Stfalcon PM Meetup 21.11
 
Stfalcon PM Meetup 21.11
Stfalcon PM Meetup 21.11Stfalcon PM Meetup 21.11
Stfalcon PM Meetup 21.11
 
Design of the_future_30_05_2019
Design of the_future_30_05_2019Design of the_future_30_05_2019
Design of the_future_30_05_2019
 
2 5404811386729530203
2 54048113867295302032 5404811386729530203
2 5404811386729530203
 
Team evolution
Team evolutionTeam evolution
Team evolution
 
Mobile&Privacy
Mobile&PrivacyMobile&Privacy
Mobile&Privacy
 
Global sales - a few insights
Global sales - a few insightsGlobal sales - a few insights
Global sales - a few insights
 
How to build your own startup
How to build your own startupHow to build your own startup
How to build your own startup
 
Первая и последняя встреча с клиентом
Первая и последняя встреча с клиентом Первая и последняя встреча с клиентом
Первая и последняя встреча с клиентом
 
Парнерство нидерланды
Парнерство нидерландыПарнерство нидерланды
Парнерство нидерланды
 
Риси гарного менеджера
Риси гарного менеджераРиси гарного менеджера
Риси гарного менеджера
 
Между заказчиком и разработчиком
Между заказчиком и разработчикомМежду заказчиком и разработчиком
Между заказчиком и разработчиком
 
Cv vs resume
Cv vs resumeCv vs resume
Cv vs resume
 
Vue.js
Vue.jsVue.js
Vue.js
 
майстер-клас “Управління ризиками”
майстер-клас “Управління ризиками”майстер-клас “Управління ризиками”
майстер-клас “Управління ризиками”
 
Kubernetes: від знайомства до використання у CI/CD
Kubernetes: від знайомства до використання у CI/CDKubernetes: від знайомства до використання у CI/CD
Kubernetes: від знайомства до використання у CI/CD
 

Último

Último (6)

Балади про Робіна Гуда. Аналіз образу Робіна Гуда
Балади про Робіна Гуда. Аналіз образу Робіна ГудаБалади про Робіна Гуда. Аналіз образу Робіна Гуда
Балади про Робіна Гуда. Аналіз образу Робіна Гуда
 
Спектроскоп. Спостереження оптичних явищ
Спектроскоп. Спостереження оптичних явищСпектроскоп. Спостереження оптичних явищ
Спектроскоп. Спостереження оптичних явищ
 
Відкрита лекція на тему: "Сидерати - як спосіб виживання"
Відкрита лекція на тему: "Сидерати - як спосіб виживання"Відкрита лекція на тему: "Сидерати - як спосіб виживання"
Відкрита лекція на тему: "Сидерати - як спосіб виживання"
 
Роль українців у перемозі в Другій світовій війні
Роль українців у перемозі в Другій світовій війніРоль українців у перемозі в Другій світовій війні
Роль українців у перемозі в Другій світовій війні
 
Габон
ГабонГабон
Габон
 
Україна в умовах десталінізації (1953 – 1964 рр.).pptx
Україна в умовах десталінізації (1953 – 1964 рр.).pptxУкраїна в умовах десталінізації (1953 – 1964 рр.).pptx
Україна в умовах десталінізації (1953 – 1964 рр.).pptx
 

CSS по БЕМ

  • 2. CSS до БЕМ #header div span a {...} .content .container div span p {...} .wrapper form .line input {...} div.footer.black ul li span {...} .main-content div div a {...} footer div > div p a.button {...} 01. 02. 03. 04. 05. 06. 2
  • 3. 3
  • 4. БЕМ (Блок, Елемент, Модифікатор) — методологія, яка забезпечує компонентний підхід до веб-розробки. В її основі лежить принцип розділу інтерфейсу на незалежні блоки. Це дозволяє легко і швидко розробляти інтерфейси будь-якої складності і повторно використовувати існуючий код. 4
  • 5. Блок Логічно і функціонально абсолютно незалежний компонент сторінки, який є самодостатнім і може бути використаний в будь-якому місці проекту, при цьому не втрачаючи свого смислу. 5
  • 6. Особливості блоку 1. Назва повинна характерезувати смисл блоку, а не його стан. 2. Блок не повинен впливати на своє оточення (відступи, позиціонування). 6
  • 7. Приклад блоку <!-- Правильно. Семантично осмислений блок 'logo'--> <div class="logo"></div> <!-- Неправильно. Описано зовнішній вигляд --> <div class="top-big-logo"></div> 7
  • 8. Принцип роботи з блоками Вкладеність 1. Блоки можна вкладати один в одного. 2. Дозволяється будь-яка вкладеність блоків. 8
  • 9. <header class="header"> <nav class="menu"> </nav> </header> HTML реалізація блоків <div class="logo"></div> <ul class="submenu"></ul> <div class="search"></div> 01. 02. 03. 04. 05. 06. 07. 9
  • 10. CSS реалізація блоків <!-- Правильно. Всі блоки абсолютно незалежні. Можуть бути використані у будь-якому місці проекту.--> .header {...} .logo {...} .menu {...} .submenu {...} .search {...} 01. 02. 03. 04. 05. 10
  • 11. CSS реалізація блоків <!-- Неправильно. Блоки залежні від своїх батьків і не можуть бути використаними без них.--> .header .logo {...} .header .menu {...} .header .menu .submenu {...} .header .search {...} 01. 02. 03. 04. 11
  • 12. Елемент Частина блоку, яка зв'язана з ним по смислу і функціонально. Елемент не може використовуватись без блоку до якого відноситься. 12
  • 13. Особливості елементу 1. Назва повинна характерезувати смисл елементу, а не його стан. 2. Ім'я елементу відділяється від імені блоку двома підресленнями. 13
  • 14. <div class="product"> </div> Приклад елементів <img class="product__picture"> <h4 class="product__name"></h4> <span class="product__price"></span> <button class="product__order"></button> 01. 02. 03. 04. 05. 06. 14
  • 15. Принципи роботи з елементами 1. Вкладеність 2. Належність 3. Необов'язковість 15
  • 16. Вкладеність елементів 1. Елементи можна вкладати один в одного. 2. Дозволяється будь-яка вкладеність елементів. 3. Елемент - це завжди частина блоку, тобто він не може бути частиною іншого елементу. 16
  • 17. <div class="product"> <div class="product__info"> </div> <div class="product__action"> </div> </div> HTML реалізація елементів <!-- Правильно. Структура назви елементів відповідає схемі: 'block-name__element-name'--> <img class="product__picture"> <h4 class="product__name"></h4> <span class="product__price"></span> <a href="#" class="product__view"></a> <button class="product__order"></button> 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 17
  • 18. CSS реалізація елементів <!-- Правильно. Елементи знаходяться на одному рівні.--> .product {...} .product__picture {...} .product__info {...} .product__name {...} .product__price {...} .product__action {...} .product__view {...} .product__order {...} Це дозволяє змінювати DOM-структуру без внесення змін в коді кожного окремого елементу. 01. 02. 03. 04. 05. 06. 07. 08. 18
  • 19. CSS реалізація елементів <!-- Неправильно. Присутній каскад для елементів.--> .product {...} .product__picture {...} .product__info .product__name {...} .product__info .product__price {...} .product__action {...} .product__action .product__view {...} .product__action .product__order {...} 01. 02. 03. 04. 05. 06. 07. 19
  • 20. <div class="product"> <div class="product__info"> </div> <div class="product__action"> </div> </div> HTML реалізація елементів <!-- Неправильно. Структура назви елементів не відповідає схемі: 'block-name__element-name'--> <img class="product__picture"> <h4 class="product__info__name"></h4> <span class="product__info__price"></span> <a href="#" class="product__action__view"></a> <button class="product__action__order"></button> 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 20
  • 21. <div class="product"> <div class="product__info"> </div> <div class="product__action"> </div> </div> <!-- Неправильно. Структура назви елементів не відповідає схемі: 'block-name__element-name'--> <img class="product__picture"> <h4 class="product__info__name"></h4> <span class="product__info__description"></span> <span class="product__info__price"> <span class="product__info__price__old"></span> <span class="product__info__price__new"></span> </span> <a href="#" class="product__action__view"></a> <button class="product__action__order"></button> 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 21
  • 22. Належність елементів Елемент - це завжди частина блоку, він не повинен використовуватись окремо від нього. 22
  • 23. <div class="product"> </div> HTML реалізація <!-- Правильно. Елементи лежать всередині блоку 'product'.--> <img class="product__picture"> <h4 class="product__name"></h4> <span class="product__price"></span> <button class="product__order"></button> 01. 02. 03. 04. 05. 06. 23
  • 24. <div class="product"> </div> HTML реалізація <!-- Неправильно. Елементи лежать поза блоком 'product'.--> <span class="product__price"></span> <button class="product__order"></button> <img class="product__picture"> <h4 class="product__name"></h4> 01. 02. 03. 04. 05. 06. 24
  • 25. <footer class="footer"> </div> Необов'язковість елементів Елемент - необов'язкова частина блоку. Не у всіх блоків, повинні бути елементи. Наприклад: <nav class="menu"></nav> <ul class="social"></ul> 01. 02. 03. 04. 25
  • 26. Це блок чи елемент? 26
  • 27. <div class="product"> </div> Можна легко змінити елемент на блок або навпаки <img class="illustration product__picture"> <h4 class="product__name"></h4> <span class="product__price"></span> <button class="product__order"></button> 01. 02. 03. 04. 05. 06. 27
  • 28. Модифікатор Сутність, яка визначає зовнішній вигляд, стан або поведінку блоку чи елементу і не може бути викорстана окремо від них. Модифікатор має ім'я і може мати значення. У блоку або елементу, може бути декілька модифікаторів одночасно. 28
  • 29. Особливості модифікаторів 1. Назва повинна характерезувати зовнішній вигляд, стан, або поведінку. 2. Ім'я модифікатора відділяється від імені блоку чи елементу одним підкресленням. 29
  • 30. Типи модифікаторів 1. Булевий 2. Ключ-значення <!-- Блок 'button' має булевий модифікатор 'disabled'--> <button class="button button_disabled"></button> <!-- Блок 'button' має модифікатор 'size' зі значенням 's'--> <button class="button button_size_s"></button> 30
  • 31. Префікси 1. b- (block) - для позначення звичайного блоку. 2. h- (holster) - для задавання відступів групі блоків. 3. l- (layout) - для розташування інших блоків. 4. g- (global) - для глобальних модифікаторів. 5. js- (JavaScript) - для блоків, які використовують JavaScript. 6. ... <!-- Приклад використання префіксів --> <div class="b-button"></div> <div class="g-clearfix"></div> З розвитком БЕМ, Яндекс відмовився від префіксів. 31
  • 32. Мікс Це прийом, який дозволяє використовувати різні БЕМ-сутності на одному DOM-вузлі. 32
  • 33. Мікси дозволяють 1. Поєднувати поведінку і стилі декількох сутностей без дублювання коду. 2. Створювати семантично нові компоненти інтерфейсу на основі тих, які вже є. 33
  • 34. header__logo header__menu header__search HTML реалізація міксів <header class="header"> <div class="logo "></div> <nav class="menu "> <ul class="submenu"></ul> </nav> <div class="search "></div> </header> 01. 02. 03. 04. 05. 06. 07. 34
  • 35. CSS реалізація міксів .header {...} .header__logo {зовнішня геометрія, позиціювання} .header__menu {зовнішня геометрія, позиціювання} .header__search {зовнішня геометрія, позиціювання} .logo {...} .menu {...} .submenu {...} .search {...} 01. 02. 03. 04. 05. 06. 07. 08. 35
  • 36. БЕМ і препроцесори .product { &__picture {...} &__info {...} &__name {...} &__price {...} &__action {...} &__view {...} &__order {...} } 36
  • 37. БЕМ і CSS-каскад Основний принцип БЕМ — незалежні блоки. Вкладені селектори збільшують зв'язаність коду і роблять його повторне використання неможливим. Каскад не забороняється, але не рекомендується. 37
  • 38. Наприклад, можна використати вкладеність для зміни теми елементів блоку: .nav {...} .nav_theme_light .nav__item {'зміна теми пунктів меню'} .nav__item {...} або коли потрібно вивести тест з WYSIWYG: .text h2 {...} .text p {...} .text ul li {...} 38
  • 39. Які переваги надає БЕМ • Незалежні блоки • Семантика • Відсутність колізій • Структурованість коду • Масштабування • Зменшується час на розробку та підтримку проекту • Поріг входу на проект мінімальний 39
  • 40. Як перейти на CSS по БЕМ • Не використовувати id та теги для селекторів • Абстрагуватись від DOM-моделі і навчитись створювати блоки • Мінімізувати кількість вкладених селекторів • Використовувати правила по іменуванню CSS-класів • Використовувати мікси • Повторно використовувати блоки 40
  • 41. Чому не можна використовувати теги або тег і клас для селекторів <a class="button button_active"></a> a.button {...} a.button_active {...} З розвитком проекту можуть з'явитись блоки input.button, span.button, button.button 41
  • 42. 42