Из описания https://ru.bem.info/method/faq/#Почему-нельзя-делать-общий-сброс-стилей-reset человеку не знакомому с БЭМ непонятно - почему нельзя делать общий сброс (или нормализацию). Впрочем, мне, как знакомому - непонятно тоже. Как я догадываюсь, речь идет о том, что библиотека блоков Яндекса (bem-bl) расчитана на определенные дефолтные стили у html-элементов , а reset собьёт их, поэтому css reset в Яндексе нельзя. Но ведь это личное дело Яндекса какие у него базовые стили? Опять-таки если мы говорим о надежности и универсальности - то в блоке должны быть прописаны все нужные стили, исходя из того что может быть reset. Или, если проще, то только те, которые отличаются от Normalize, который сейчас стандарт де-факто.
Я задавал аналогичный вопрос пару лет назад тут: http://clubs.ya.ru/bem/replies.xml?item_no=1777, мне кажется сказали что у Яндекса просто свой normalize. Увы это сейчас нельзя открыть и найти поиском на новом форуме тоже.
Почему нельзя открыть? У меня идёт редирект на https://ru.bem.info/forum/-199/
reset плох не тем, что мы где-то на него (не)опираемся, а тем, что
1) компоненты от этого перестают быть независимыми, они зависят от наличия внешнего для них блока с ресетом
2) невозможно вставить на страницу с ресетом код, который ожидает ненормализованные стили, например, пользовательский код или код внешний по отношению к сайту.
Мы рекомендуем делать сброс стилей в каждом конкретном блоке.
Но если это по какой-то причине не подходит и написанные вышли проблемы не важны — можно сделать блок reset и написать в него глобальные стили с ресетом.
Этот текст — пересказ ответа на этот вопрос с FAQ GetBEM. Там написано подробнее. http://getbem.com/faq/#global-css-resets Так понятнее?
И еще обсуждение здесь же https://ru.bem.info/forum/105/
Считаю что этот пункт в FAQ вводит людей в заблуждение и его лучше удалить вообще. Уверенного объяснения почему не нужно использовать reset - нет. Сейчас есть 2 пункта: 1) Нужно прописывать все-все сбросы в каждом блоке, только тогда у вас будет библиотека блоков где все блоки будут независимы (а вдруг их вставят в код где нет reset или normalize!). 2) Сбросив (или нормализовав) стили вы уже не сможете отобразить Browser defaut (а вот вдруг вам понадобится!)
По 1:
По 2: В тот редком случае когда это понадобится - это решится разработчиком. Это наверно 1 на миллион случаев.
Я не увидел по этой ссылке «у нас сверху нормалайз». Там вообще речь о том, нужно ли сбрасывать вообще все или только то, что блоку необходимо. И мы всегда придерживались идеи, что сбрасывается то, что нужно. Это никак не противоречит исходному тезису.
Это не привязка к библиотеке блоков Яндекса, а рекомендация, как написать свою библиотеку блоков так, чтобы она была так же качественна, как библиотека блоков Яндекса. Если у кого-то на проекте требования к качеству кода ниже — он может писать как ему угодно, хоть те самые
a {font: 12px Arial !important; color: #00f;}
. А мы продолжим рекомендовать лучшие практики.Предложу тебе простой эксперимент — отключи
normalize
у себя на проекте и посмотри, сколько правок в конкретных блоках понадобится, чтобы все стало хорошо. Думаю, ты удивишься, как мало в нем смысла на проекте, сверстанном нормально.Соглашусь и с @delka в части про то, что много проектов использует какой-то "normalize" и поэтому не совсем очевидна польза от его отказа, в то же время @tadatuta говорит о более общем применении методологии, в самом ядре лежит понятие независимости и поэтому в данном случае
normalize
нарушает это правило и делает ре-использование блоков между проектами сильно сложнее, нельзя просто так взять и вставить, придется что-то костылякать. :pensive:@delka Всегда есть окружение, но одно дело у нас только браузеры, под которые разработчик подстраивает свои блоки, и которые редко меняются и более-менее стабильны, а другое дело у нас еще и огромная пачка библиотек резетов и нормалайзеров, под которые надо тоже подстраивать блоки. И если первое — неизбежность, то второе — явно грабли. Писать блоки под N браузеров — это одна сложность, а писать блоки под N браузеров с учетом M нормалайзеров и резетов — грубо, в M раз, или на порядок, сложнее.