Что делает селектор * * CSS?


97

Недавно наткнулся * *на CSS .

Ссылка на сайт - Ссылка на сайт .

Для однократного *использования в таблице стилей CSS Интернет и переполнение стека наводнены примерами, но я не уверен, что использовать два * *символа в CSS.

Я погуглил, но не смог найти никакой соответствующей информации об этом, так как один *выбирает все элементы, но я не уверен, почему сайт использовал его дважды. Чего здесь не хватает и почему используется этот хак (если это хак)?

Ответы:


138

Как и в любой другой раз, когда вы помещаете два селектора один за другим (например li a), вы получаете комбинатор потомков. То * *же самое с любым элементом, который является потомком любого другого элемента - другими словами, любого элемента, который не является корневым элементом всего документа.


спасибо за ответ .. это то, о чем я думал, но не уверен, поэтому думал спросить у сообщества .. скоро приму это +1
swapnesh

1
Еще один вопрос - действительно ли уместно использовать * *? как
будто

2
@swapnesh похоже на взлом браузера. Есть * { font-size: XXX }правило и * * { font-size: YYY }правило. Один из них применим к большинству браузеров, а другой - к браузерам с определенной ошибкой, хотя у меня нет терпения разбираться в деталях. Это похоже на * htmlвзлом, который обычно использовался для обнаружения старого IE.
hobbs

спасибо за добавление последнего подробного блока под комментариями .. он почти идеальный .. не нужно проводить больше мозговых штурмов для этого :)
спасибо

10
Обратите внимание, что таким образом * html, * * будет соответствовать элементу html в IE6.
Alohci

80

Просто маленький большой пример:

Попробуйте добавить это на свой сайт:

* { outline: 2px dotted red; }
* * { outline: 2px dotted green; }
* * * { outline: 2px dotted orange; }
* * * * { outline: 2px dotted blue; }
* * * * * { outline: 1px solid red; }
* * * * * * { outline: 1px solid green; }
* * * * * * * { outline: 1px solid orange; }
* * * * * * * * { outline: 1px solid blue; }

Демо: http://jsfiddle.net/l2aelba/sFSad/


Пример 2:

Что делает селектор * * CSS?

Демо: http://jsfiddle.net/l2aelba/sFSad/34/


7
Это не совсем ответ, но какая прекрасная визуализация!
aboy021

1
@ l2aelba действительно хорошее объяснение :) +1
swapnesh

33

* *Соответствует всему, кроме элемента верхнего уровня, например html.


Спасибо, Джо, протестировал его здесь, а также в соответствии с комментариями выше: * *селектор эквивалентен html *для всех браузеров, кроме старого доброго IE6 :-)
Stano

@Stano * *эквивалентно html *... для файла HTML. Но CSS можно использовать для стилизации других документов (в частности, SVG).
Sylvain Leroux

11

* означает применение заданных стилей ко всем элементам.

* *означает применение заданных стилей ко всем дочерним элементам элемента. Пример:

body > * {
  margin: 0;
}

Это применяет стили полей ко всем дочерним элементам body. Так же,

* * {
  margin: 0;
}

применяется margin: 0к *дочерним элементам. Короче говоря, это применимо margin: 0практически ко всем элементам.

В общем, *достаточно одного . Два не нужны * *.


2
спасибо за объяснение +1 .. хотя даже я не уверен в том, что вы только что упомянули в последней строке: «Как правило, * достаточно. Нет необходимости в * *. Я думаю».
swapnesh

3
* *применяет стили для потомков элементов, а не дочерние элементы. Дочерние элементы будут такими же, >как в вашем примере, а не пробелом. Потомок и ребенок - это не одно и то же.
BoltClock

7

Это выбирает все элементы, вложенные в другой элемент, почти так же, как div aи все <a>элементы, вложенные где-то внутри <div>элемента.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.