что такое миксы в ксс
Когда использовать микс, а когда модификатор?
Здравствуйте.
Использую бэм уже продолжительное время, но до сих пор иногда оказываюсь просто в растерянности в некоторых ситуациях
Есть 2 кейса:
Во всех 3-х случаях его элементы выглядят и позиционируются немного по разному. Для позиционирования я делаю микс
Но встает вопрос, как стилизовать элементы:
Давать миксы header__item и header__link не вариант, т.к. в хэдере могут уже существовать эти классы вне контекста .contacts
1) Можно создать еще один пустой микс класс
Раньше я поступал именно так. Но мне все больше не нравится такой подход. Во-первых сам класс выглядит так будто пытается выдать себя за два. Во-вторых мы создаем новый блок просто ради того, чтобы задать косметические изменения, что как мне кажется не верно.
2) Можно делать кучу модификаторов для каждого элемента в отдельности, но тогда страшно представить сколько в проекте будет модификаторов, большинство из которых будет использоваться только 1 раз.
3) Можно сделать модификатор для блока и стилизовать каскадом
Это вроде как противоречит идеям бэм, но мне кажется наиболее удачным решением.
2. Второй кейс. У нас есть базовый блок карточки
Допустим она используется в каталоге. Но так же на странице с портфолио, но выглядит немного иначе.
Создавать пустой микс класс .portfolio-card мне кажется плохой практикой, т.к. мы привязываемся к контексту. А что если эта модифицированная карточка будет еще на какой-то странице? Тогда само слово portfolio уже будет ни к селу ни к городу.
Микс portfolio__img, portfolio__inner и т.д. тоже не жизнеспособны, т.к. нам нужно менять элементы именно в контексте карточки.
Я пришел к тому, что лучше всего будет давать карточкам абстрактные модификаторы
И стилизовать каскадом. Это дает нам полную модульность и свободу. Мы можем использовать модифицированные карточки где угодно в проекте. Более того, можно комбинировать модифицированные карточки с модификаторами элементов как угодно, например:
Был бы очень рад услышать аргументированную критику и ваши мысли на этот счет.
Простой 8 комментариев
Та же самая проблема и в меню футера и хедера
или если стилизовать каскадом от микса portfolio__card
Вызывает путаницу, как по мне.
1.2) В «подвале» почти то же самое, что-то в другом порядке, но это неважно, и нет «кнопки обратной связи» из секции «Контактов».
1.3) Есть ещё самостоятельные секции «Свяжитесь с нами» на главной странице и на странице контактов, которые тоже используют пункты из секции «Контактов» (теперь уже понятно, что такое частое повторение позволяет выделить это в блок).
1.4) Логотип и навигацию тоже выделим в блоки (я разделил логотип на два элемента — изображение и текст, потому что на малых экранах текст превращается в замыленое нечитаемое говно, поэтому его лучше убрать).
2) Вроде, пока хватит. «БЭМизируем» эти данные.
Вот наконец и пригодились миксы. Они лишь позволяют объединить две сущности по схожему признаку (например, лэйаут и позиционирование) на одном теге. А модификаторы обозначают различие между двумя одинаковыми сущностями (например, в одном месте у элемента есть иконка, в другом — нет, хотя это всё тот же элемент).
Блок с контактами делается аналогичным способом:
Ох вы очень глубоко копнули, благодарю)
Я и сам за эти дни еще раз пробежался по форуму и доке бэм и удостоверился, что стилизация элементов каскадом от модификатора блока не плохая практика в общем.
А те блоки что я создавал, по типу header-nav это так называемые приватные(служебные) и лучше бы их сильно не плодить.
или даже
.contacts__tel_size_small
А если у них и размера иконок и цвет текста и размер текста и отступы текста от иконок различаются, то это все будут отдельные модификаторы? Как я понял из документации, вполне обоснованно в таком случае будет сделать
В целом вы правильно мыслите, но пришли немного к неправильному выводу.
— Миксы лучше использовать для позиционирования блока либо модификации блока в контексте другого блока. Например у нас есть contacts и помещая его в header, даже если ничего не менять, желательно сразу задать ему header__contacts потом может пригодиться.
— Если необходимо менять элементы блока внутри контекста другого блока, блока то можно миксовать элементы. Например: contacts__img header__contacts-img немного тавтология, но в небольших порциях уместно
— Но если модификации могут быть неоднократными, то нужно модифицировать сами элементы: contacts__img contacts__img_type_1, тут уже нужно смотреть на контекст проблемы, например если у вас иконка и она где-то слева и где-то справа, то можно задать ей правила с отступами слева и с права в независимости от того какой тип блока: contacts__ico_margin-right_small или contacts__ico_margin-left_large. Это модификатор КЛЮЧ-ЗНАЧЕНИЕ где в ключе мы указываем что у нас существует отступ _margin-left и такой отступ может быть только один, а значение, это размер отступа _large
header-contacts__img, но по сути это одно и то же, что и header__contacts-img
По сути как раз разное.. header-contacts__img в футере будет явно выделяться, в то время как header__contacts-img в любом другом месте просто не может существовать, то есть конкретика в которой сложно ошибиться. Это если придираться к словам, более абстрактное назввание микс-блока конечно вполне подойдет.
А каскад по сути инкапсулирован в самом блоке и никому не мешает.
Виталий,
Ну понятное дело, что в хэдере у меня header-contacts, а в футере footer-contacts был бы.
Хотя насколько я понял про миксы, у них нет вообще никаких ограничений. Т.е. мы вполне можем миксовать блок и элемент другого блока или элементы блоков как угодно и в каком угодно контексте, судя по этой презентации https://www.slideshare.net/yandex/ss-14895358
Можете, пожалуйста, привести пример в котором данный каскад от модификатора может аукнуться. Я не пытаюсь с вами спорить, чтобы доказать свою правоту. Просто хочу найти наилучшее решение.
И что скажете по второму кейсу?
Ну понятное дело, что в хэдере у меня header-contacts, а в футере footer-contacts был бы.
Вы немного не поняли. когда вы создаете самодостаточный блок, то давая такое название header-contacts или footer-contacts вы косвенно привязываетесь к контексту, а поскольку это блок, то он может быть и в шапке, в подвале и в сайдабаре и увидя footer-contacts в сайдбаре будет вызван некий диссонанса. То есть если вы хотите использовать блок один раз и не попасть в просак, то и используйте контекст того одного раза, а не делайте абстрактный блок, который можно пере использовать не по назначению.
Можете, пожалуйста, привести пример в котором данный каскад от модификатора может аукнуться.
2) Можно делать кучу модификаторов для каждого элемента в отдельности, но тогда страшно представить сколько в проекте будет модификаторов, большинство из которых будет использоваться только 1 раз.
Официальная группа проекта RGMIX.eu
Проект RightGame направлен на игровые серверы игры Counter-Strike: Source. С развитием проекта будут открываться дополнительные серверы.
Список серверов:
» MIX #1 : connect css.rgmix.eu:27015
» MIX #2 : connect css.rgmix.eu:27016
» MIX #3 : connect css.rgmix.eu:27017
» MIX #4 : connect css.rgmix.eu:27018
» MIX #5 : connect css.rgmix.eu:27019
» MIX #6 : connect css.rgmix.eu:27020
» MIX #7 : connect css.rgmix.eu:27021
» MIX #8 : connect css.rgmix.eu:27022
» MIX #9 : connect css.rgmix.eu:27023
» MIX #10 : connect css.rgmix.eu:27024
» MIX #11 : connect css.rgmix.eu:27025
» MIX #12 : connect css.rgmix.eu:27026
» MIX #13 : connect css.rgmix.eu:27027
» MIX #14 : connect css.rgmix.eu:27028
» MIX #15 : connect css.rgmix.eu:27029
» MIX #16 : connect css.rgmix.eu:27030
Наш проект объединяет в себе несколько профессионально настроенных игровых серверов. Целью нашего проекта является проведение адекватных миксов с комфортными условиями для общения и совместного времяпрепровождения в любое время суток, на которых игроки будут избавлены от неадекватных игроков, читеров и «отцов CS:S» и смогут сосредоточиться на игре, получая от нее истинное удовольствие.
Чтобы ограничить проект от неадекватных игроков и читеров, работает слаженная команда администраторов, у которых за плечами богатый опыт администрирования, проведения миксов и поиска читеров. На наших серверах не может быть неадекватных администраторов – ими назначаются только проверенные люди, способные серьезно относиться к своей работе. Администрация внимательно следит за соблюдением правил поведения игроков и общепринятых правил этикета и неукоснительно наказывает нарушителей.
Заходи, играй, получай море позитивного настроения и много новых друзей.
|GOOD-MIX.RU | MIXES CSS V34 | UCP|
|GOOD-MIX.RU | MIXES CSS V34 | UCP| запись закреплена
ВНИМАНИЕ!
Показать полностью.
Каждую неделю на сервере разыгрывается 150рублей.
Обязательное условие конкурса:
❶ Быть подписанным на это сообщество
http://vk.com/by.rlxxx
❷ Сделать репост этой записи и не удалять до конца конкурса.
ВНИМАНИЕ!
Показать полностью.
Каждую неделю на сервере разыгрывается 150рублей.
Обязательное условие конкурса:
❶ Быть подписанным на это сообщество
http://vk.com/by.rlxxx
❷ Сделать репост этой записи и не удалять до конца конкурса.
|GOOD-MIX.RU | MIXES CSS V34 | UCP| запись закреплена
|GOOD-MIX.RU | MIXES CSS V34 | UCP| запись закреплена
|GOOD-MIX.RU | MIXES CSS V34 | UCP| запись закреплена
Открылась новая тима HIGHFORCE
Нужны 5 тащеров в тиму.
Требования:
1. Скилл hard
2. Частый онлайн
3. Адекватность
|GOOD-MIX.RU | MIXES CSS V34 | UCP| запись закреплена
После «воскрешения» торговой марки Watch Dogs ритейлеры по всему миру стали публиковать неофициальные даты релиза игры. Как стало известно Gamebomb, по версии магазина Gamesonly, новый блокбастер Ubisoft появится в продаже 18 апреля.
Ранее сотрудники онлайнового отделения розничной сети FNAC указали в качестве даты релиза Watch Dogs 30 апреля 2014 года. Очевидно, у сотрудников австрийского ритейлера Gamesonly другая информация.
По словам некоторых источников, обычно даты в Gamesonly устанавливают достаточно точно. Существует вероятность, что администраторы FNAC не получили точную дату и указали 30 апреля «с запасом», пока не появится официальная информацию.
Watch Dogs готовится к выходу на Xbox 360, PlayStation 3, Xbox One, PlayStation 4 и РС — напоминает Gamebomb
Открылась новая тима HIGHFORCE
Нужны 5 тащеров в тиму.
Требования:
1. Скилл hard
2. Частый онлайн
3. Адекватность
|GOOD-MIX.RU | MIXES CSS V34 | UCP| запись закреплена
Компания Activision собирается перевести серию Call of Duty на трехлетний цикл разработки. Как стало известно Gamebomb, для работы над новыми частями серии привлекли дополнительную студию, а значит новые игры будут выходить все также каждый год.
Показать полностью.
Исполнительный директор Activision, Эрик Хиршберг (Eric Hirshberg) сообщил на собрании инвесторов, что студия Sledgehammer Games присоединится к дуэту Treyarch и Infinity Ward в развитии серии. Команда Sledgehammer теперь будет самостоятельно работать над новыми частями серии.
«Изменения дадут нашим дизайнерам больше времени для внедрения инноваций в каждую новую част серии. Это также позволит создателям контентс сконцентрироваться на дополнениях и микродополнениях… Это также позволит нашим командам уделить больше времени полировке неровностей, чтобы удостовериться в наилучшем возможном качестве для наших фанатов», — заявил Хиршберг.
«Команда Sledgehammer продемонстрировала свою опытность в работе над Call of Duty: Modern Warfare 3, а также на примере своих прошлых проектов, которые заслужили высокие оценки. Студия является отличным претендентом для поддержки нашей стратегии внедрения инноваций и свежих идей для этой отличной серии, которая устанавливает планку для всех игр нового поколения».
По данным Gamebomb, ранее Treyarch и Infinity Ward при поддержке Sledgehammer Games, Neversoft и Raven Software поочередно выпускали по одной игре в календарный год, над которыми каждая студия трудилась в течение 2 лет. Теперь Activision даст разработчикам дополнительный год для разработки новой игры, что должно сказаться на общем качестве продуктов и позволит сохранить темпы производства.