Пора нам начать изучать новый CSS, не так ли?
Мы все привыкли к новым функциям, внедряемым в фреймворки слева и справа, но мы часто забываем, что новые функции постоянно разрабатываются на основных веб-языках, которые мы используем каждый день.
Проект редактора W3C
Проект CSS Selectors Level 4 от 15 января обрисовывает в общих чертах основные возможности CSS.
Прежде чем мы начнем, вы должны знать: CSS, который вы найдете в этой статье сегодня, в основном не будет работать в любом браузере. Даже самое новое из нового. Причина этого в том, что черновик — это именно черновик. Это четвертая версия черновика 4-го уровня, начатая еще в 2011 году. Селекторы, предложенные в черновике, являются спецификацией для новых селекторов, которые предлагаются редакторами самого документа, путем обдумывания и сотрудничества с люди из сообщества, которые участвуют в списке рассылки W3C.
Так что это значит? Это означает, что в относительно ближайшем будущем мы, вероятно, увидим, что многие из этих функций будут реализованы, и многие из них будут реализованы в таких версиях браузеров, как Chrome и Firefox.
Давайте посмотрим на некоторые из новых селекторов!
1 .: нет (.warning, .alert)
Мы уже видели селектор :not
селекторах третьего уровня. Однако текущий черновик селектора уровня 4 :not
допускает использование нескольких аргументов с более сложным соответствием.
Ранее :not
можно было использовать только с одним селектором и нельзя объединять. Например, уровень 3 :not
может выглядеть так:
1
2
3
|
a:not([href*=»somesite.com»]) {
}
|
Это позволит выбрать все теги привязки, у которых нет href
включая строку "somesite.com"
. Но с новым проектом мы можем сделать больше интересных вещей.
Вскоре мы рассмотрим :has
, но пока, вот селектор, который выбирает все ссылки, которые не являются прямыми потомками элементов с классом col
или классом, который начинается с col
(как классы сетки Bootstrap col-md-4
) , Он также будет игнорировать якоря, которые имеют элементы img в качестве потомков.
1
2
3
|
a:not([class|=»col»]>a, :has(img)) {
}
|
Этот селектор также позволяет нам делать такие вещи, как:
1
2
3
|
div:not(div+div) {
}
|
При этом выбираются все элементы div, которые не являются ближайшими родственниками других элементов div.
Взять это еще дальше
С добавлением псевдокласса :nth-last-child
мы можем также делать такие вещи:
1
2
3
|
div:not(.container>div:nth-last-child(-n+2)) {
}
|
Это позволит выбрать все элементы div, кроме тех, которые являются прямыми потомками элементов .container
и являются последними двумя братьями и сестрами.
Как видите, эти правила могут стать очень мощными и сложными; но давайте добавим еще больше гибкости, введя псевдоселектор :has
.
2 .: имеет (div, p,> a)
Псевдо-селектор :has
позволяет вам выбирать элементы с переданными аргументами как дочерние. Например, чтобы выбрать все якорные ссылки, у которых элементы изображения являются дочерними, вы должны использовать следующий синтаксис:
1
2
3
|
a:has(img) {
}
|
Однако :has
не ограничивается простыми селекторами. Вы можете комбинировать :has
с :not
и :nth-*
селекторы для создания довольно сложных реляционных селекторов.
Например, давайте выберем элементы table
которые имеют более десяти строк:
1
2
3
|
table:has(tr:nth-of-type(11)) {
}
|
Сочетание: имеет () и: не ()
Как насчет выбора элемента body
, последний дочерний элемент которого не является нижним колонтитулом?
1
2
3
|
body:not(:has(footer:last-child)) {
}
|
3 .: любая ссылка
В настоящее время мы можем таргетировать гиперссылки, используя :link
и :visited
Это больше, чем просто использование селектора, так как он проверяет наличие href
и проверяет историю просмотров пользователя, чтобы определить, была ли посещена данная ссылка.
1
2
3
|
:link, :visited {
color: blue;
}
|
С предложенными селекторами уровня 4 мы могли бы стилизовать все ссылки, посещенные или нет, используя :any-link
. Вышеуказанный стиль относительно эквивалентен:
1
2
3
|
:any-link {
color: blue;
}
|
4 .: область действия
До селекторов уровня 4 CSS был предоставлен глобальный охват. Другими словами, если вы добавите следующий CSS:
1
2
3
|
div {
color: #444;
}
|
все div получат правило стиля color: #444
. (Предполагается, что никакие другие конкурирующие стили не применяются.) Селекторы уровня 4 позволяют использовать таблицы стилей и теги стилей для элемента:
01
02
03
04
05
06
07
08
09
10
11
|
<section>
<h2>This is outside the scope.</h2>
<aside>
<style scoped>
h2 {
font-size: 2rem;
}
</style>
<h2>This is within the scope</h2>
</aside>
</section>
|
В этом примере мы применили область действия к тегу стиля внутри элемента aside
. Правила в этом теге стиля будут применяться только к потомкам родительского элемента style
.
5 .: совпадения (селектор1, селектор2)
Псевдоселектор :matches
позволяет нам проверить, соответствует ли элемент списку элементов. Например, если вы хотите настроить таргетинг на все теги привязки, абзаца и h2 внутри статьи, это можно сделать с помощью следующего:
1
2
3
|
article :matches(h2, a, p) {
}
|
Это заменяет ранее гораздо более подробный синтаксис:
1
2
3
|
article a, article h2, article p {
}
|
Примечание . Начиная с этой версии черновика,: :matches()
нельзя использовать с :not
:has
или другим вложенным :matches
.
6. Явный Селектор Селектора >>
Вы, вероятно, знакомы с символом пробела, позволяющим нам писать правила-потомки, такие как все якоря внутри div:
1
2
3
|
div a {
}
|
Но до сих пор мы не видели явного селектора потомков. С селекторами уровня 4 у нас есть один: >>
.
Тем не менее, обратите внимание, что это приводит к ненужным дополнительным символам в вашем CSS, так как вы можете достичь того же эффекта с одним символьным пространством, поэтому будьте осторожны при его использовании. Предположительно, он действует как мост между непосредственным дочерним селектором >
и селектором теневого доступа >>>
.
7. Таблица в столбце выбора ||
Этот селектор является желанным дополнением для оформления таблицы. Давайте посмотрим на некоторую разметку для базовой таблицы:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<table>
<colgroup>
<col class=»id»>
<col class=»personnel-info» colspan=»2″>
</colgroup>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
</tr>
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<span class=»c»><!— etc —>
</tr>
</tbody>
</table>
|
Стилизация горизонтально сгруппированных элементов (т.е. внутри одной строки) исторически была относительно простой для выполнения. Стилизация элементов, сгруппированных по вертикали — это совсем другая игра с мячом.
Чтобы стилизовать все элементы, являющиеся частью столбца, с помощью класса personnel-info
, мы могли бы добавить больше классов к разметке и напрямую стилизовать их, или, глядя на селекторы уровня 4, мы могли бы использовать ||
селектор. ||
Селектор позволяет вам точно ориентироваться на эти элементы td
следующим образом:
1
2
3
|
.personnel-info ||
}
|
Вывод
Это завершает наш обзор некоторых новых функций, появившихся в селекторах уровня 4! Этот мощный, сохраняющий байты новый набор инструментов не полностью зафиксирован, но браузеры начинают реализовывать их в своих ранних экспериментальных формах, так что следите за обновлениями спецификации. Конечно, когда они будут оформлены, мы расскажем о них здесь, на Tuts +!
Соответствующие ссылки
Ознакомьтесь с нашим курсом «CSS будущего» , в котором, помимо прочего, Крейг Кэмпбелл рассказывает: