Что такое методология BEM?
недавно я слышал о методологии BEM.
- В чем именно заключается использование методологии BEM ?
- каким образом BEM делает нашу работу проще ?
- это хорошая практика, чтобы использовать BEM ?
2 ответов
BEM-это методология именования. Он означает модификатор блочных элементов, и его цель-облегчить модульность и сделать стили и классы намного проще в обслуживании.
это нелегко объяснить в ответе, но я могу дать вам основную идею.
Итак, если вы думаете о меню, то вся структура элемента / компонента будет:
блок: элемент: пункт модификатор(ы): горизонтальный, вертикаль
и, следуя стандартным соглашениям BEM, вы напишете что-то вроде этого в CSS:
html,
body {
height: 100%;
}
.menu {
display: block;
}
.menu__item {
display: inline-block;
line-height: 30px;
width: 100px;
}
.menu--horizontal {
width: 100%;
height: 30px;
}
.menu--vertical {
width: 100px;
height: 100%;
}
.menu--horizontal .menu__item {
border-right: 1px solid #e5e5e5;
text-align: center;
}
.menu--vertical .menu__item {
border-bottom: 1px solid #e5e5e5;
text-align: left;
}
<div class="menu menu--horizontal">
<div class="menu__item">Home</div>
<div class="menu__item">About</div>
<div class="menu__item">Contact</div>
</div>
как вы видите из кода, элементы отделены от Блока двумя подчеркиваниями, а модификаторы разделены двумя тире.
теперь, если вы измените модификатор в меню --horizontal
to --vertical
конкретные стили модификатора будут подобраны для обоих блок и элемент внутри.
Это должен быть базовый пример, но он должен дать вам представление о том, насколько мощна эта методология, потому что она позволяет разделить любой компонент на эти основные структуры блока-элемента-модификатора, делая все легким для поддержания.
также написание этого с помощью прекомпилятора, такого как SASS, делает его еще проще (я не буду вдаваться в детали, но дать вам идею):
.menu {
display: block;
&__item {
display: inline-block;
line-height: 30px;
width: 100px;
}
&--horizontal {
width: 100%;
height: 30px;
}
&--vertical {
width: 100px;
height: 100%;
}
}
это методология, которая масштабируется, поэтому ее можно использовать для небольших проекты или крупные проекты.
требуется немного привыкнуть, поэтому проведение некоторых исследований и игра с ним в малом масштабе проекта будет хорошей отправной точкой.
вот вариант использования, если вы хотите увидеть его в использовании в реальном проекте https://m.alphasights.com/how-we-use-bem-to-modularise-our-css-82a0c39463b0#.2uvxts71f
надеюсь, что это помогает :)
что такое BEM?
БЭМ расшифровывается как Blocks, Elements and Modifiers
. Это методология, изначально задуманная российской технологической компанией Яндекс. Как следует из того же, bem metholology-это все о компонентизации вашего HTML и CSS-кода на три типа компонентов:
блоки: автономные сущности, которые имеют значение сами по себе. Примеры
header
,container
,menu
,checkbox
&textbox
элементы: часть блоков, которые не имеют автономного значения и семантически привязаны к своим блокам. Примеры
menu item
,list item
,checkbox caption
&header title
модификаторы: флаги на блоке или элементе, используемые для изменения внешнего вида или поведения. Примеры
disabled
,highlighted
,checked
,fixed
,size big
&color yellow
цель BEM - держите оптимизировать читаемость, ремонтопригодность и гибкость кода CSS. Для этого необходимо применять следующие правила.
- стили блоков никогда не зависят от других элементов на странице
- блоки должны иметь простое, короткое имя, а не
_
или-
символы - при стилизации элементов используйте селекторы формата
blockname__elementname
- при стилизации модификаторов используйте селекторы формата
blockname--modifiername
иblockname__elementname--modifiername
- элементы или блоки, которые имеют модификаторы, должны наследовать все от Блока или элемента, который он изменяет, кроме свойств, которые модификатор должен изменить
пример кода
если вы применяете BEM к своим элементам формы, ваши селекторы CSS должны выглядеть примерно так:
.form { } // Block
.form--theme-xmas { } // Block + modifier
.form--simple { } // Block + modifier
.form__input { } // Block > element
.form__submit { } // Block > element
.form__submit--disabled { } // Block > element + modifier
соответствующий HTML должен выглядеть примерно так:
<form class="form form--theme-xmas form--simple">
<input class="form__input" type="text" />
<input class="form__submit form__submit--disabled" type="submit" />
</form>
следует ли использовать БЭМ?
BEM получил довольно определенную тягу среди американских и западноевропейских веб-разработчиков после того, как был популяризирован влиятельными гуру CSS, такими как Гарри Робертс. Это особенно популярно в сочетании с простые OOCSS селекторы и SMACSS (которые все на самом деле просто вариации на тех же принципах, как писать модульный CSS). И модульный CSS поставляется с довольно много преимуществ. Однако модульный CSS может быть довольно многословным, и BEM в особенно часто является весьма некрасиво.
в конце концов, все зависит от того, для чего используется ваш код и кто еще будет читать и изменять ваш код в будущем. Я бы определенно рекомендовал модульный CSS для любого проекта с большой кодовой базой и несколькими сопровождающими, но это не означает, что вам нужно идти с соглашениями об именах BEM или строго применять принципы OOCSS/SMACSS для компонентизации.
если вероятность вашего кода когда-либо была поддерживаемый разработчиками, которые уже имеют опыт работы с BEM/OOCSS/SMACSS, является значительным, вы можете выбрать одну или несколько из этих методологий и быть строгими в отношении их применения, просто потому, что это сделает сотрудничество с этими разработчиками намного проще. Если нет, есть мало преимуществ строго придерживаться любого из этих конкретных соглашений, и вы должны чувствовать себя свободно выбирать свои собственные соглашения об именах и свои собственные вариации на BEM/OOCSS/SMACSS. В конце концов, полезность любого стандарта во многом зависит от того, кто его фактически использует.