Имеется код
.row {
&__controls {
}
&:hover .row__controls {
}
}
Смущает то, что для row_controls нужно обязательно писать его имя. В результате в соседних правилах описываются стили одного элемента,
но глазами этого не видно, потому что один раз он пишется как &_controls
, а второй раз .row_controls
.
Как вы пишете такие конструкции?
Ну в библиотеке не используются псевдоселекторы, вместо этого в js контролам добавляется модификатор hovered. соответственно стиль будет выглядеть так:
@Guria то есть
&.row_hovered
, соберется в.row_controls.row_hovered
. Это мне не поможет.Я хочу чтобы controls показывались, когда курсор оказывается над блоком. В вашем коде controls не покажутся, потому что над невидимыми объектами не бывает ховера
Пардон. Тогда
PS. у вас элемент
controls
с одним подчёркиванием или это модификатор всё же?@Guria да, controls – это элемент. Исправил подчеркивания для понятности.
Решение ок, но теперь повторяется
.row
.@just-boris ну так это вполне норм ;)
Нет ничего страшно в повторениях. js тоже можно не подключать:
Можно использовать стайлус на полную катушку.
@h4 можно, но зачем?
@Guria чтобы всё, что касается стилей элемента
__controls
лежало в одном визуальном блоке.Вопрос @just-boris был «Как вы пишете такие конструкции?». Мы пишем из так.
@h4 если уж оптимизировать, то в
$ctx
сразу и класс записывать -$ctx = '.row'
. Не нужно будет потом везде точку дописывать ;) Если уйти от примера, то вместо.row
там может быть что-то и помассивнее, поэтому вариант с {$ctx} клевый. Просто не нужно им злоупотреблять@sipayRT точку мы не дописываем, потому что такой ход позволяет делать так:
@h4 у меня less, поэтому получилось как-то так:
в случае, когда стилей больше чем пара строк, лучше сохранить имя блока в переменную, чтобы не потерялось при рефакторингах
@just-boris переходи на Stylus. Тут можно не писать скобочки и точки с запятой ;)
@h4 интересный кейс, спс
@h4 зато нельзя пользоваться mixin-ами bootstrap и переопределять его переменные. Но это уже другая история.
Всем спасибо за показанные примеры!
Вообще,
{$ctx}
штука полезная и для переименования блоков, поэтому точка там противопоказана. Ну и в целом лучше{$block}
или{$b}
, чтобы была возможность еще и{$elem}
или{$e}
использовать.@zxqfox +1. Будто с моей головы написал слова ;)
@zxqfox ну я
{$ctx}
тупо из кода bem-components позаимствовал.