Несколько классов в селекторе CSS
Я вижу селектор, как это,
.class1 .class2 .class3 {
}
что это значит?
я использовал несколько селекторов классов без пробелов. Пространство означает потомок, но это не имеет смысла для классов.
5 ответов
допустим, есть страница со следующей разметкой,
<div class="class1">
<div class="class2">
<div class="class3">
Some page element(s).
</div>
</div>
</div>
в CSS вы предоставили бы стиль всех элементов под класс_3, которые находятся под класс2, которые находятся под класс1.
то есть, скажем, это был стиль,
.class1 .class2 .class3{
color:red;
}
он будет отображать текст как красный, что эквивалентно следующему,
div.class1 div.class2 div.class3 {
color:red;
}
наконец, следующее ничего не сделает,
.class1.class2.class3{
color:red;
}
Edit: если разметка вместо этого была следующее,
<div class="class1 class2 class3">
Some page element(s).
</div>
он будет работать и отображать текст красным цветом.
Примечание:
http://www.thunderguy.com/semicolon/2005/05/16/multiple-class-selectors-in-internet-explorer/ http://www.w3.org/TR/2004/CR-CSS21-20040225/selector.html#class-html
другие ответы предоставляют вам объяснение, которое вам нужно; я скинусь с практическим случаем использования, чтобы удовлетворить чье-либо любопытство.
общий реальный случай использования для нескольких селекторов классов, разделенных комбинаторами потомков, - это когда сайт имеет другой класс тела для определенных страниц или определенных устройств.
например, рассмотрим эту разметку простого веб-сайта. Помимо верхнего и нижнего колонтитулов, он также имеет столбец содержимого и два боковые панели:
<!-- DTD, html, head... -->
<body>
<div id="wrap">
<div id="header">
<h1>My Site</h1>
</div>
<div id="content">
<!-- ... -->
</div>
<div id="side1" class="sidebar"><!-- ... --></div>
<div id="side2" class="sidebar"><!-- ... --></div>
<div id="footer">
<p>Copyright LOLOLOL</p>
</div>
</div>
</body>
</html>
настройка по умолчанию может быть организовать #content
между .sidebar
, сделано с плавающей обман я не здесь.
на мобильном устройстве, помимо изменения размера всего этого для небольшого разрешения, возможно, дизайнер хочет покончить с боковыми панелями, чтобы вернуть некоторое горизонтальное состояние экрана. Помимо медиа-запросов, есть также гораздо более простая возможность использовать серверный код для обнаружения мобильных браузеров и тегов body
С класс соответственно, вот так (ASP.NET c# пример):
<% if (((HttpCapabilitiesBase) Request.Browser).IsMobileDevice) { %>
<body class="mobi">
<% } else { %>
<body>
<% } %>
вот где ваш пример пригодится. Дизайнер просто использует следующее правило, чтобы скрыть боковые панели с мобильных устройств:
/* This would appear just beneath the .sidebar { ... } rule */
.mobi .sidebar {
display: none;
}
конечно, тот же код обнаружения браузера может быть использован, чтобы скрыть разметку боковой панели в целом, размер бритья страницы и все, что джаз, но опять же, это просто еще один способ приблизиться к этому. Я просто даю быстрый практический пример того, как несколько селекторов классов в иерархия может использоваться в CSS.
div{
padding: 5px;
border: 1px solid #f00
}
.class1 .class2 .class3 {
background-color: #000;
}
изменит фон самого внутреннего div:
<div class="class1">
<div class="class2">
<div class="class3">
</div>
</div>
</div>
другими словами, это означает применить стиль для class3
, который является ребенком class2
, который является ребенком class1
.
если вы игнорируете пробелы правило стиля будет применяться следующим образом:
.class1.class2.class3{
background-color: #000;
}
<div class="class1 class2 class3">
</div>
это все еще означает потомок, и это имеет смысл для классов, если у вас есть вложенные иерархии. Например:
.blackOnWhite .title {
color:black;
}
.whiteOnWhite .title {
color:white;
}
чтобы соответствовать подмножеству значений" class", каждому значению должно предшествовать".", в любом порядке.
пример(ы):
например, следующее правило соответствует любому элементу P, "класс" атрибуту был присвоен список разделенные пробелами значения, включающие "пасторальный" и "морской":
п.пастырское.морской { цвет: зеленый }
это правило соответствует, когда class= " pastoral blue aqua marine", но не соответствует для класса= "пасторальный синий".
http://www.w3.org/TR/2004/CR-CSS21-20040225/selector.html#class-html