В чем разница между '>' и пробелом в селекторах CSS?
Какой смысл использовать этот синтаксис
div.card > div.name
Какая разница между этим
div.card div.name
4 ответа
A > B
выберет только B, которые являются прямыми дочерними элементами для A (то есть между ними нет других элементов).
A B
выберет любой B, который находится внутри A, даже если между ними есть другие элементы.
>
это дочерний селектор. Он определяет только непосредственные дочерние элементы, а не потомков (включая внуков, правнуков и т. Д.), Как во втором примере без >
,
Дочерний селектор не поддерживается IE 6 и ниже. Отличная таблица совместимости здесь.
> против космоса
Рассмотрим два сценария div > span { }
vs. div span { }
Здесь
(пробел) выделяет все <span>
элементы внутри <div>
элемент, даже если они вложены более чем в один элемент. В>
выбирает всех потомков <div>
элемент, но если они не находятся внутри другого элемента.
Взгляните на два примера:
> (Больше чем):
div > span {
color: #FFBA00 ;
}
<body>
<div>
<div>
<span>Hello...</span>
<p><span>Hello!</span></p>
</div>
<span>World!</span>
</div>
</body>
Этот просто выбирает <span>Hello...</span>
(потому что сразу после вложенного div
тег), и <span>World!</span>
и он не будет искать <span>
внутри <p>
тег, потому что он не сразу после div
тег.
Космос
div span {
color: #0A0 ;
}
<body>
<div>
<div>
<span>Hello...</span>
<p><span>Hello!</span></p>
</div>
<span>World!</span>
</div>
</body>
Он выбирает все теги span, даже если они вложены в другие теги.
div.card > div.name
Матчи <div class='card'>....<div class='name'>xxx</div>...</div>
но это не соответствует <div class='card'>....<div class='foo'> ... <div class='name'>xxx</div>..</div>....</div>
div.card div.name
соответствует обоим.
Это >
селектор гарантирует, что выбранный элемент на правой стороне >
является непосредственным потомком элемента на его левой стороне.
Синтаксис без >
соответствует любому <div class='name'>
это потомок (не только ребенок) <div class='card'>
,
A > B выбирает B, если это прямые дочерние элементы A, тогда как A B выбирает B независимо от того, является ли это прямым дочерним элементом B или нет.
<p> USING SPACE </p>
<style>
.a .b {
background-color: red;
}
</style>
<span class="a">
a
<br>
<span class="b"> a b</span>
<br>
<span class="c">
<span class="b"> a b c</span>
</span>
</span>
<br><br>
<p> USING GREATER THAN SIGN</p>
<style>
.x > .y {
background-color: red;
}
</style>
<span class="x">
x
<br>
<span class="y"> x y</span>
<br>
<span class="z">
<span class="y"> x y z</span>
</span>
</span>