Приветствую Вас, уважаемые читатели блога. Сегодня продолжим тему изучения каскадных таблиц стилей. В одной из предыдущих статей мы рассматривали , но рассмотрели только часть из них. И на очереди у нас остались селекторы псевдоклассов и псевдоэлементов.
Псевдоэлементы
Псевдоэлементы — разновидность специальных селекторов, привязывающих стиль к определенному фрагменту элемента Web-страницы, а также они могут генерировать содержимое, которого нет в исходном html коде. Таким фрагментом может быть первый символ или первая строка в абзаце.
Псевдоэлементы используются не сами по себе, а только в совокупности с основными селекторами:
<основной селектор>:<псевдоэлемент> { <стиль> }
Вначале следует имя основного селектора, затем пишется двоеточие, после которого идёт имя псевдоэлемента.
:first-letter
Привязывает стиль к первой букве текста в элементе web-страницы, если ей не предшествует встроенный элемент, не являющийся текстом, например, изображение. Это позволяет создавать в тексте буквицу (увеличенная первая буква, базовая линия которой ниже на одну или несколько строк базовой линии основного текста) и выступающий инициал (увеличенная прописная буква, базовая линия которой совпадает с базовой линией основного текста).
Рассмотрим применение first-letter на примере создание выступающего инициала:
...
И результат примера:
Как видно на скриншоте, первая буква абзаца стала в два раза больше и изменила цвет на красный.
Псевдоэлемент:first-line привязывает стиль к первой строке текста в элементе веб страницы. Посмотрим действие псевдоэлемента:first-line на абзац текста:
...
Добро пожаловать на наш автомобильный сайт. Здесь Вы найдете много интересных и полезных статей об автомобилях, об их технических характеристиках и особенностях.
Результат:
:after и:before
Псевдоэлементы after и before применяется для вставки контента после и перед содержимым элемента. Эти псевдоэлементы работают совместно со стилевым свойством content , которое определяет содержимое для вставки.
Рассмотрим пример:
...
Добро пожаловать на наш автомобильный сайт. Здесь Вы найдете много интересных и полезных статей об автомобилях, об их технических характеристиках и особенностях.
Научным языком автомобиль это: Механическое моторное безрельсовое дорожное транспортное средство минимум с 4 колёсами .
Смотрим результат:
Как видим в конце каждого абзаца вставлен текст «сайт», как и прописано в css правиле в свойстве «content». Если в место «after» поставить «before», то текст вставиться в начале абзаца.
Псевдоклассы
Псевдоклассы позволяют привязать стиль к элементам веб страницы на основе их состояния и местоположения в дереве элементов. Примером такого состояния может служить гиперссылка, которая меняет свой цвет при наведении на нее курсора мыши.
При описании css правил псевдоклассы обычно используют в совокупности с основными селекторами:
<основной селектор><псевдокласс> { <стиль> }
Если псевдокласс указывается без селектора впереди (:hover), то он применяется ко всем элементам страницы.
Псевдоклассы условно делятся на три группы:
- определяющие состояние элементов;
- имеющие отношение к дереву элементов;
- указывающие язык текста.
Псевдоклассы, определяющие состояние элементов
Псевдоклассы этой группы определяют состояние элемента html страницы и применяют стиль только для определенного состояния. Обычно псевдоклассы состояний применяются для гиперссылок, но иногда их применяют и для других элементов веб страницы.
Псевдокласс :link применяется для не посещенных ссылок, т.е. ссылкам, на которые пользователь еще не нажимал. Записи a{...} и a:link{...} в таблице стилей дают одинаковый результат, поэтому псевдокласс:link можно не указывать.
Псевдокласс :visited определяет внешний вид посещенных ссылок, т.е. ссылок по которым пользователь уже щелкнул. По умолчанию такие ссылки меняют свой цвет на фиолетовый, но с помощью данного псевдокласса цвет и другие параметры можно поменять.
Псевдокласс :active применяется к активным элементам. Например, для активации ссылки, необходимо навести на нее курсор и щелкнуть мышкой.
Псевдокласс :focus применяется к элементу при получении фокуса. Например, поле текстового ввода получает фокус, когда в него установлен курсор.
И последний псевдокласс :hover применяется к элементу, когда на него наведен курсор мыши, но щелчка не происходит.
Для примера посмотрим как будут выглядеть ссылки в разных состояниях:
И результат:
Псевдоклассы структуры документа
С помощью этой группы псевдоклассов стили привязываются к элементам в зависимости от их положения в структуре документа.
Первыми рассмотрим псевдоклассы :first-child и :last-child , которые привязывают стиль к элементам селектора, которые являются соответственно первым и последним дочерним элементом своего родителя. Чтобы стало понятней рассмотрим эти псевдоклассы на примере :
...
- Пункт 1
- Пункт 2
- Пункт 3
- Пункт 4
Результат примера:
В этом примере с помощью правила CSS «li:first-child» мы говорим браузеру, что стиль необходимо применить к элементу li , который идет первым в своем родительском элементе. А с помощью селектора «li:last-child» элемент должен быть последним. Таким образом, с помощью , мы указали, что первый элемент списка должен быть выделен жирным шрифтом, а у последнего элемента установили шрифт красного цвета.
Следующий псевдокласс :o nly-of-type , который применяется к дочернему элементу указанного типа, только если он единственный у своего родителя.
Например:
...
Результат:
В примере псевдокласс: only-of-type применяется к элементу , в правилах стиля которого размер шрифта увеличивается в два раза. Размер шрифта увеличивается только у тех гиперссылок, которые у своих родителей (в данном случае это тег
) встречаются только один раз.
Псевдокласс позволяет привязать стиль к элементам Web-страницы, на основе их нумерации в дереве элементов:
<основной селектор>:nth-child(odd | even | <число> | <выражение>) {стиль}
После имени данного псевдокласса в скобках может быть указано четыре возможных варианта:
- odd — стиль будет привязан ко всем нечетным элементам удовлетворяющих значению <основной селектор> ;
- even — означает все четные элементы;
- число — обозначает порядковый номер дочернего элемента относительно своего родителя (нумерация начинается с 1 — обозначает первый элемент);
- выражение — задается в виде формулы an+b, где a и b целые числа, а n счетчик, который принимает значения 0, 1, 2...
Например, как выделить все четные строки таблицы цветом? В этом случае идеально поможет псевдокласс:nth-child:
...
Ячейка 1 | Ячейка 2 | Ячейка 3 |
Ячейка 4 | Ячейка 5 | Ячейка 6 |
Ячейка 7 | Ячейка 8 | Ячейка 9 |
Ячейка 10 | Ячейка 11 | Ячейка 12 |
Ячейка 13 | Ячейка 14 | Ячейка 15 |
Ячейка 16 | Ячейка 17 | Ячейка 18 |
Результат:
В коде примера запись tr:nth-child (2n) означает, что стиль необходимо привязать ко всем элементам tr, с помощью которых формируются строки таблицы (об этом мы говорили в статье ). Причем порядковый номер строк относительно родительского элемента table должен удовлетворять формуле 2n, в которую браузер вместо n подставляет целые числа 0, 1, 2... В итоге получается, что стиль применяется к строкам под номерами 2, 4, 6 и т.д.
Псевдоклассы:not и *
Осталось рассмотреть еще два важных псевдокласса. Особый псевдокласс:not позволяет привязать стиль к любому элементу web страницы, не удовлетворяющему заданным условиям. Таким условием может быть любой селектор:
<основной селектор>:not(<селектор выбора>) { <стиль> }
Стиль будет привязан к элементам веб страницы, удовлетворяющим основному селектору и не удовлетворяющему селектору выбора . Например:
H1:not(#main){color:red;}
В результате этого css правила, текст всех окрасятся в красный цвет, кроме того у которого атрибут id будет равен main .
И последний на сегодня псевдокласс * («звездочка»), который обозначает любой элемент html страницы. Он может потребоваться в случае, если необходимо установить одновременно один стиль для всех элементов веб-страницы, например, задать шрифт или начертание текста. Синтаксис:
* { Описание правил стиля }
Например, чтобы установить размер текста для всех элементов документа можно использовать следующее правило css:
На этом все, до новых встреч на страницах блога!
Что такое псевдо-элементы?
Псевдо-элемент CSS используется для стиля указанных частей элемента.
Например, он может быть использован для:
- Стиль первой буквы или строки элемента
- Вставка содержимого до или после содержимого элемента
Синтаксис
Синтаксис псевдо-элементов:
selector::pseudo-element {
property:value;
}
Обратите внимание на двойную нотацию двоеточия- ::first-line Против:first-line
Двойной двоеточие заменил нотацию одиночной двоеточия для псевдо-элементов в CSS3. Это была попытка W3C различать псевдо-классы и псевдо-элементы .
Синтаксис с одним двоеточием использовался как для псевдо-классов, так и для псевдо-элементов в CSS2 и CSS1.
Для обратной совместимости синтаксис с одним двоеточием приемлем для CSS2 и CSS1 псевдо-элементов.
Псевдо-элемент:: первая строка
::first-line псевдо-элемент используется для добавления особого стиля к первой строке текста.
В следующем примере форматируется первая строка текста во всех
Элементах:
Пример
p::first-line
{
color: #ff0000;
font-variant: small-caps;
}
Примечание: Псевдо-элемент::first-line может применяться только к элементам уровня блока.
Следующие свойства применяются к::first-line псевдо-элементу:
- font properties
- color properties
- background properties
- word-spacing
- letter-spacing
- text-decoration
- vertical-align
- text-transform
- line-height
- clear
Псевдо-элемент:: первая буква
::first-letter псевдо-элемент используется для добавления специального стиля к первой букве текста.
В следующем примере форматируется первая буква текста во всех
Элементах:
Пример
p::first-letter
{
color: #ff0000;
font-size: xx-large;
}
Примечание: Псевдо-элемент::first-letter может применяться только к элементам уровня блока.
Следующие свойства применяются к:: первая буква псевдо-элемент:
- font properties
- color properties
- background properties
- margin properties
- padding properties
- border properties
- text-decoration
- vertical-align (only if "float" is "none")
- text-transform
- line-height
- float
- clear
Псевдо-элементы и классы CSS
Псевдо-элементы можно комбинировать с классами CSS:
Пример
p.intro::first-letter {
color: #ff0000;
font-size:200%;
}
В приведенном выше примере будет отображаться первая буква абзацев с классом = "Intro", в красном и в большем размере.
Множественные псевдо-элементы
Также можно комбинировать несколько псевдо-элементов.
В следующем примере первая буква абзаца будет красной, в размер шрифта XX-Large. Остальная часть первой линии будет синей, а в капители. Остальная часть абзаца будет размер шрифта по умолчанию и цвет:
Пример
p::first-letter
{
color: #ff0000;
font-size: xx-large;
}
P::first-line
{
color: #0000ff;
font-variant: small-caps;
}
CSS-:: перед псевдо-элемент
Псевдо-элемент::before может использоваться для вставки некоторого содержимого перед содержимым элемента.
В следующем примере изображение вставляется перед содержимым каждого элемента
:
Пример
h1::before
{
content: url(smiley.gif);
}
CSS-The:: после псевдо-элемент
Псевдо-элемент::after может использоваться для вставки некоторого содержимого после содержимого элемента.
В следующем примере изображение вставляется после содержимого каждого элемента
:
Пример
h1::after
{
content: url(smiley.gif);
}
CSS-элемент:: выбор псевдо-элемента
Псевдо-элемент::selection совпадает с частью элемента, выбранного пользователем.
Следующие свойства CSS могут быть применены к::selection: color , background , cursor и outline .
В следующем примере выделенный текст выделяется красным цветом на желтом фоне:
Пример
::selection {
color: red;
background: yellow;
}
Все псевдо-элементы CSS
All CSS Pseudo Classes
Selector | Example | Пример описания |
---|---|---|
:active | a:active | Выбор активной ссылки |
:checked | input:checked | Выбор каждого отмеченного элемента |
:disabled | input:disabled | Выбор всех отключенных элементов |
:empty | p:empty | Выбор каждого элемента Не имеющего дочерних элементов |
:enabled | input:enabled | Выбор всех включенных элементов |
:first-child | p:first-child | Выбирает каждый элемент Являющийся первым дочерним элементом родительского элемента |
:first-of-type | p:first-of-type | Выбор каждого элемента Являющегося первым элементом Родительского элемента |
:focus | input:focus | Выбор элемента , имеющего фокус |
:hover | a:hover | Выбор ссылок при наведении указателя мыши |
:in-range | input:in-range | Выбор элементов со значением в указанном диапазоне |
:invalid | input:invalid | Выбор всех элементов с недопустимым значением |
:lang(language ) | p:lang(it) | Выбирает каждый элемент Со значением атрибута lang, начинающимся с "IT" |
:last-child | p:last-child | Выбирает каждый элемент Являющийся последним дочерним элементом родительского элемента |
:last-of-type | p:last-of-type | Выбирает каждый элемент Являющийся последним Элементом его родительского элемента |
От автора: спецификация CSS Pseudo-elements Module Level 4 проливает свет на поведение существующих псевдоэлементов и предоставляет новые. Тем не менее, только несколько из новых псевдоэлементов имеют хоть какую-то поддержку в последних версиях браузеров.
Сегодня мы поговорим о следующих псевдоэлементах:
::before — вставляет генерируемый контент перед контентом элемента
::after — вставляет генерируемый контент после контента элемента
::first-letter — выбирает первую букву элемента
::first-line — выбирает первую строку элемента
::selection — стилизует текст, выделенный курсором
Из них элементы::first–letter, ::first–line и::selection влияют на контент, который входит в исходники. Псевдоэлементы::before и::after, наоборот, вставляют контент в документ, которого нет в исходниках. Разберем поподробнее все псевдоэлементы.
Замечание: синтаксис с одним двоеточием
Вы могли видеть версии::first–letter, ::first–line, ::before и::after с одним двоеточием в старом CSS. В CSS2 эти псевдоэлементы задавались через одноразовое двоеточие:. IE8 требует синтаксис с одинарным двоеточием, хотя большая часть других браузеров поддерживает оба варианта. Лучше использовать синтаксис с двойным двоеточием.
Псевдоэлементы::before и::after
Большая часть псевдоэлементов позволяет выбирать контент, который уже присутствует в исходниках документа, но не задан с помощью языка (другими словами, ваш HTML). Однако::before и::after работают по-другому. Эти псевдоэлементы добавляют генерируемый контент в дерево документа. Созданный контент не существует в HTML исходниках, но он отображается.
Зачем использовать генерируемый контент? Например, можно помечать обязательные поля формы, добавляя контент после лейблов:
/* Применяется к лейблу, ассоциирующемуся с требуемым полем */ .required::after { content: " (Required) "; color: #c00; font-size: .8em; }
В нужном поле формы необходимо использовать HTML свойство required. Так как данная информация уже доступна в DOM, то::before и::after выступают в роли помощников. Это не критический контент, поэтому его можно и не вносить в исходники.
Замечание: генерируемый контент и доступность
Некоторые скрин ридеры и браузеры распознают и читают генерируемый контент, однако большая часть этого не умеет. Не используйте псевдоэлементы::before и::after для предоставления генерируемого контента для пользователей с ограниченными возможностями. Более подробно этот вопрос можно изучить в статье Leonie Watson «поддержка доступности для генерируемого CSS контента ».
Другой способ применения::before и::after – добавление префикса или суффикса в контент. Вышеупомянутая форма может использовать вспомогательный текст, как показано ниже:
< form method = "post" action = "/save" > < fieldset > < legend > Change Your Password < / legend > < p > < label for = "password" > Enter a new password < / label > < input type = "password" id = "password" name = "password" > < / p > < p > < label for = "password2" > Retype your password < / label > < input type = "password" id = "password2" name = "password2" > < / p > < p class = "helptext" > Longer passwords are stronger . < / p > < p > < button type = "submit" > Save changes < / button > < / p > < / fieldset > < / form > |
Заключим наш вспомогательный текст в парные скобки с помощью::before и::after.
Helptext::before { content: "("; } .helptext::after { content: ")"; }
Helptext :: before { content : "(" ; Helptext :: after { content : ")" ; |
Результат.
Возможно, самый полезный способ применения::before и::after – очистка обтекаемых элементов. Nicolas Gallagher представил эту технику (которая основана на работе Thierry Koblentz) в своем посте «новый микро clearfix хак »:
/* Для поддержки IE <= 9 используйте:before и:after */ .clearfix::before, .clearfix::after { content: " "; /* Обратите внимание на пробел между кавычек. */ display: table; } .clearfix::after { clear: both; }
Добавьте класс clearfix к любому элементу, который необходимо очистить после обтекаемого элемента.
Псевдоклассы::before и::after ведут себя полностью, как дочерние элементы тега, за которым они закреплены. Они наследуют все возможные свойства родителя и расположены внутри блока родителя. Они также взаимодействуют с другими блоковыми элементами, как если бы они были настоящими тегами. Свойства display: block или display: table на::before и::after работают точно так же, как и на других элементах.
Предупреждение: один псевдоэлемент на селектор
На данный момент на один селектор разрешается применять только один псевдоэлемент. То есть запись типа p::first-line::before неправильная.
Создание типографических эффектов с помощью:first-letter
Псевдоэлементы::before и::after вставляют контент, а::first-letter работает с контентом, уже прописанном в исходниках. С его помощью можно создавать эффект первой буквы или буквицы, который вы могли видеть в журналах и книгах.
Замечание: первая буква и буквицы
Эффект первой буквы – это буква в верхнем регистре в начале текста, которой задан больший размер шрифта по отношению к остальному тексту. Буквица похожа на первую букву, однако буквица вставляется в первый параграф из минимум двух строк.
Стили ниже добавляют первую заглавную букву во все параграфы p в документе:
p::first-letter { font-family: serif; font-weight: bold; font-size: 3em; font-style: italic; color: #3f51b5; }
p :: first - letter { font - family : serif ; font - weight : bold ; font - size : 3em ; font - style : italic ; color : #3f51b5; |
Из скриншота можно заметить, что::first-letter изменяет line-height первой строки, если элементу было задано значение line-height без единиц измерения. В данном случае все теги p наследуют значение line-height 1.5 от тега body.
Существует три способа сгладить эту проблему:
уменьшить значение line-height для псевдоэлемента::first–letter, почти всегда подойдет значение.5;
задать line-height с единицами измерения для псевдоэлемента::first–letter;
задать line-height с единицами измерения для body или родителя::first–letter.
Первый вариант сохраняет вертикальный ритм, как в случае со значением line-height без единиц измерения. Второй вариант ограничивает сторонние эффекты фиксированного line-height до самих псевдоэлементов. Третий вариант – самый плохой, есть большая вероятность того, что вы создадите побочный эффект, который нужно будет переписывать с помощью дополнительного CSS кода.
В нашем случае давайте уменьшим значение line-height для p::first-letter до.5 (и перепишем свойства в файле, будем использовать сокращенное свойство font):
p::first-letter { font: bold italic 3em / .5 serif; color: #3f51b5; }
p :: first - letter { color : #3f51b5; |
Результат можно посмотреть ниже. Заметьте, что нам также нужно было настроить нижний margin каждого параграфа p, чтобы компенсировать уменьшенное значение line-height на p::first-letter.
Для создания буквиц понадобится чуть больше строк CSS. В отличие от первых заглавных букв, прилегающий текст к буквице обтекает ее. То есть нам нужно добавить float: left; в наши стили. Также мы добавим верхний, правый и нижний margin:
p::first-letter { font: bold italic 3em / .5 serif; font-style: italic; color: #607d8b; float: left; margin: 0.2em 0.25em .01em 0; }
p :: first - letter { font : bold italic 3em / . 5 serif ; font - style : italic ; color : #607d8b; float : left ; margin : 0.2em 0.25em . 01em 0 ; |
Плавающий элемент, или в нашем случае псевдоэлемент, заставляет остальной текст обтекать его, как показано ниже.
Если вы не используете px или rem для установки размеров, margin и line-height, будет очень сложно идеально стилизовать::first-letter во всех браузерах.
Иногда в качестве первой буквы текстового элемента выступает знак препинания. Например, новость, начинающаяся с цитаты:
“Lorem ipsum dolor sit amet, consectetur adipiscing elit.” Fusce odio leo, sollicitudin vel mattis eget, ...
< p > & #8220;Lorem ipsum dolor sit amet, consectetur adipiscing elit.” Fusce odio leo, sollicitudin vel mattis eget, ... |
В данном случае стили для::first-letter будут применены как к открывающей кавычке, так и к первой букве, как показано ниже. Стили применяются одинаково во всех браузерах.
Тем не менее, результат будет отличаться, когда знак пунктуации генерируется элементом. Рассмотрим следующую разметку:
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Fusce odio leo, sollicitudin vel mattis eget, iaculis sit ...
< p > < q > Lorem ipsum dolor sit amet , consectetur adipiscing elit . < / q > Fusce odio leo , sollicitudin vel mattis eget , iaculis sit . . . < / p > |
На данный момент браузеры отрисовывают тег q в виде кавычек, использующихся в определенном языке, которые будут открываться и закрываться. Однако не все браузеры одинаково распознают такие кавычки. В Firefox 42 (см. ниже), Safari 8 и более ранних версиях::first-letter изменяет только открывающую кавычку.
В Chrome, Opera и Yandex открывающая кавычка тега q и первая буква параграфа не стилизуются. Ниже показан скриншот в Chrome.
IE применяет стили как к открывающей кавычке, так и к первой букве параграфа. Смотрите ниже.
В спецификации CSS Pseudo-elements Module Level 4 говорится, что знак пунктуации, предшествующий или следующий сразу после первой буквы или символа должен стилизоваться. Однако в спецификации нет точного разъяснения насчет применения стилей к генерируемым знакам пунктуации.
Баги браузеров при использовании::first-letter
По большей части::first-letter работает во всех браузерах ровно так, как ожидаешь. Как и со всеми CSS свойствами, у данного псевдоэлемента есть парочка багов и случаев неправильного использования, о которых нужно знать.
В Firefox 39 и раньше некоторые символы заставляют Firefox игнорировать правило::first–letter: ‑,$,^,_,+,`,~,>,<.>
Это относится к случаям, когда первый символ задан через::before и свойство content, а также если он прописан в исходниках документа. Фикса этого бага нет. Если используете::first-letter, вам придется избегать этих символов в начале параграфа.
Замечание: баги в Blink браузерах
Некоторые версии Blink браузеров не применят правило::first–letter, если у родителя задано свойство display со значением inline или table. Баг есть в Chrome 42, Opera 29 и Yandex 15. Баг пофиксили в Chrome 44, однако релиз увидит свет не раньше, чем эта книга окажется у вас в руках. Самый простой способ обойти баг – добавить к родителю свойство display: inline-block, display: block или display: table-cell.
Создание типографических эффектов с помощью::first-line
Псевдокласс::first-line работает почти как::first-letter, только эффект распространяется на всю первую строку элемента. Можно, например, делать первую строку каждого параграфа больше и изменять цвет текста:
Можно принудительно поставить конец первой строки с помощью br или hr, как показано ниже. К сожалению, это не всегда работает. Если ваш элемент может вместить только 72 символа, то тег br после 80-го символа никак не повлияет на псевдоэлемент::first-line. Вы просто получите странный разрыв строки.
Точно так же и с неразрывным пробелом (), который вставляется, чтобы не разрывать слова между строк. Это никак не повлияет на::first-line. Слово, которое расположено перед будет принудительно перемещено на строку, где расположен текст после неразрывного пробела.
Генерируемый контент, добавленный через::before, будет отображаться на первой строке, как показано ниже.
Если генерируемый текст достаточно длинный, он полностью заполнит первую строку. Однако если добавить display: block (например, p::before {content: ‘!!!’; display: block;}), то контент займет всю первую строку целиком.
К сожалению, этот баг до сих пор есть в Firefox 40 и более ранних версиях. Firefox полностью игнорирует правило.
Забавные интерфейсы с помощью::selection
Псевдоэлемент::selection относится к так называемым «подсвечивающим» псевдоэлементам, прописанным в спецификации CSS Pseudo-Elements Module Level 4. Данный подсвечивающий псевдоэлемент ранее входил в спецификацию Selectors Level 3, единственный, поддерживающийся в браузерах.
С помощью::selection можно применять CSS стили к контенту, выделенному мышкой. По умолчанию фон и цвет текста выделенного контента задаются системой. Однако разработчики могут изменять эти настройки, как показано ниже.
С::selection можно использовать не все свойства. В спецификации прописаны только следующие свойства:
Помните о доступности при выборе цвета переднего фона и заднего фона для::selection. Некоторые комбинации цветов дают плохой контраст для слабо видящих людей. Другие комбинации могут быть неразборчивыми для дальтоников. Перед конечным выбором цветов используйте инструмент проверки контраста и симулятор дальтонизма.
В Pseudo-Elements Module также прописаны псевдоклассы::spelling-error и::grammar-error. Когда они будут реализованы, мы сможем стилизовать текст с ошибками, проверяемыми по словарю браузера.
Псевдоэлементы позволяют задать стиль элементов не определённых в дереве элементов документа, а также генерировать содержимое, которого нет в исходном коде текста. Псевдоэлементы начинаются с::, чтобы отличить их от псевдоклассов.
Псевдоэлемент::-ms-clear
Задаёт стиль кнопки для очистки текстового поля. Исходно эта кнопка не видна, она появляется в правой части поля только при вводе текста.
Псевдоэлемент::-ms-fill
Задаёт стиль индикатора прогресса в браузерах Internet Explorer и Edge. Само значение индикатора и его положение меняется динамически посредством скриптов.
Псевдоэлемент::-ms-reveal
Задаёт стиль кнопки для просмотра пароля в поле формы. Кнопка исходно не видна и появляется в правой части поля при вводе пароля.
Псевдоэлемент::-ms-tooltip
Применяет стилевые параметры к всплывающей подсказке слайдера, где отображается выбранное текущее значение, в Internet Explorer и Edge.
Псевдоэлемент::after
Псевдоэлемент, который используется для вывода желаемого контента после содержимого элемента, к которому он добавляется.
Псевдоэлемент::backdrop
Псевдоэлемент отображается ниже самого верхнего элемента в стеке по оси Z, но выше всех остальных элементов на странице, если они имеются. Обычно применяется для затемнения страницы, чтобы акцентировать внимание на фотографии или диалоговом окне, которые выводятся поверх такого затемнения.
В предыдущем разделе этой главы были рассмотрены четыре типа селекторов – селекторы тегов, классов, ID и групп. В этой части мы перейдем к селекторам потомков (которые также называются контекстными селекторами), а также познакомим вас с псевдоклассами и псевдоэлементами CSS.
Селекторы потомков
Когда необходимо придать стиль определенным тегам на всей веб-странице, используются селекторы тегов. Например, чтобы сделать все без исключения ссылки неподчеркнутыми, нужно записать простое правило:
A { text-decoration: none; }
А что делать в том случае, когда нам нужны подчеркнутые ссылки, но только тогда, когда они находятся в теге
Мы могли бы создать отдельный класс и присваивать его нужным ссылкам, но это не совсем верный способ, который требует как дополнительных затрат по времени, так и места в HTML-коде. Гораздо легче использовать селекторы потомков (контекстные селекторы) и записать:
P a { text-decoration: underline; }
Выводы
В этой главе вы узнали о таких важных и часто используемых в CSS вещах, как селекторы потомков, псевдоклассы и псевдоэлементы. В дальнейшем мы будем часто к ним возвращаться, поэтому запомните основные моменты по пройденной теме:
Благодаря селекторам потомков вам доступны гибкие и компактные настройки CSS-стилей.
Псевдоклассы позволяют создавать стиль для различных состояний элемента веб-страницы.
С помощью псевдоэлементов в CSS можно задать стиль для тех элементов страницы, которые четко не обозначены в структуре документа.