Возможно ли получить родительский родитель?
Я пробовал & & { }
, но это не сработало.
Я пытаюсь создать дочерний элемент на основе его бабушки и дедушки.
Возможно ли получить родительский родитель?
Я пробовал & & { }
, но это не сработало.
Я пытаюсь создать дочерний элемент на основе его бабушки и дедушки.
Вы не можете сделать это напрямую в большинстве случаев (см. второй пример для исключения).
Если бабушка и дедушка - это элемент
Это требует некоторого повторения, но не позволяет бабушке и дедушке не быть самой внешней оберткой (так что может быть большой бабушка и дедушка).
МЕНЬШЕ
grandparent {
/* grandparent styles */
parent {
/* parent styles */
child {
/* child styles */
}
}
&.specialGrandpa {
child {
/* child styles with special Grandpa */
}
}
&.specialGrandma {
child {
/* child styles with special Grandma*/
}
}
}
Выход CSS
grandparent {
/* grandparent styles */
}
grandparent parent {
/* parent styles */
}
grandparent parent child {
/* child styles */
}
grandparent.specialGrandpa child {
/* child styles with special Grandpa */
}
grandparent.specialGrandma child {
/* child styles with special Grandma*/
}
Если grandparent - это класс, идентификатор и т.д., и это внешняя оболочка
Здесь нет повторений, но вы не можете иметь great grandparent
в миксе. Также это только для версии LESS 1.3.1+ (более ранняя версия неправильно добавляет пробел):
МЕНЬШЕ
.grandparent {
/* grandparent styles */
.parent {
/* parent styles */
.child {
/* child styles */
.specialGrandparent& {
/* child styles with special grandparent*/
}
}
}
}
Выход CSS
.grandparent {
/* grandparent styles */
}
.grandparent .parent {
/* parent styles */
}
.grandparent .parent .child {
/* child styles */
}
.specialGrandparent.grandparent .parent .child {
/* child styles with special grandparent*/
}
Этот код работает, добавляя к "фронту" селектора дедушки и бабушки, поэтому дедушка и бабушка должны быть классом, идентификатором или другим селектором.
Добавление
На основе комментария о желании иметь красный фон, когда span
пуст. Это не помещает фон в родительский элемент, но "подделывает" его с помощью дочернего элемента.
span:empty:after {
content: '';
position: absolute;
top: -1px;
right: -10px;
left: -1px;
bottom: -10px;
display: block;
background-color: red;
z-index: -1;
}
Вы не можете произвольно перемещаться по DOM с меньшим количеством селекторов. Вместо этого используйте javascript.
&
меньше обозначает объявленный селектор на один уровень вверх. Ярлык для уже определенного правила. В отличие от того, что вы якобы ищете.
В соответствии с функцией LESS родительских селекторов, можно изменить порядок выбора, поместив &
после элементов в вашем гнезде, тем самым получив доступ к родительский родительский элемент.
МЕНЬШИЙ код:
span {
color:red;
h6 & {
color:white;
div & {
color:blue;
}
}
}
Результат CSS:
span {
color: red;
}
h6 span {
color: white;
}
div h6 span {
color: blue;
}
Вы можете использовать mixin, тогда вы можете передавать переменные на него по спецификациям селектора grandparent.
Пример:
ul {
.color-links(@color) {
li a { // any link inside a child li
color: @color;
}
}
&.red {
.color-links(#ff0000);
}
&.green {
.color-links(#00ff00);
}
}