Ссылки
https://htmlacademy.ru/
Нелёгкая жизнь без селекторов
Селекторы позволяют очень точно указывать к каким элементам применять CSS-свойства. Селекторы — это наш снайперский прицел. Но для начала представим, что механизма селекторов не существует. Как в этом случае задавать CSS-свойства элементам? С помощью атрибута style. Например:...
- 1
- 2
- 3
- 4
- 5
Селекторы по тегам
Задавать атрибут style для каждого тега неудобно и долго. Особенно, если тот же результат можно получить с помощью единственного CSS-правила, в котором используется селектор для тега li. С помощью селекторов по именам тегов можно задать стили для всех элементов списка, изображений, абзацев и так далее. Эти селекторы содержат имя тега без символов < и >. Например: li { /* стили для элементов списка */ } Одно правило может относиться сразу к нескольким селекторам, в таком случае селекторы перечисляются через запятую: a, img { /* стили для ссылок и изображений */ } li { background-color: white; }
Селекторы по классам
Класс — это один из атрибутов тегов. Выглядит он вот так:Этот атрибут особенный, так как в CSS существует возможность выбирать элементы по классу. Делается это с помощью такого селектора: .имя_класса. Например: .first { /* стили для класса first */ } Имена классов могут состоять из латинских символов, цифр и знаков - и _. Имя класса должно начинаться с латинской буквы.
Отрабатываем селекторы по классам
Синтаксис CSS позволяет выбирать элементы не только по одному классу или тегу. Можно, например, выбрать элемент одновременно по тегу и по классу или же элемент с двумя классами сразу. Для этого селектор составляется просто одной строкой из всех желаемых «частей» без пробелов. Давайте рассмотрим примеры. В селекторе по тегу и классу первым пишется название тега, а потом идёт класс: /* выбор всех тегов ul с классом target */ ul.target {...}
Контекстные селекторы
Селектор может состоять из нескольких частей, разделённых пробелом, например: p strong { ... } ul .hit { ... } .footer .menu a { ... } Такие селекторы называют контекстными или вложенными. Их используют для того, чтобы применить стили к элементу, только если он вложен в нужный элемент. Например, селектор .menu a сработает для ссылки a только в том случае, если она расположена внутри элемента с классом .menu. Читать их проще всего справа налево: /* выбрать все теги strong внутри тегов p */ p strong { ... } /* выбрать все элементы с классом .hit внутри тегов ul */ ul .hit { ... } /* выбрать все ссылки внутри элементов с классом .menu, которые лежат внутри элементов с классом .footer */ .footer .menu a { ... } Таким образом, можно задавать элементам различные стили в зависимости от их контекста. Если ссылка расположена внутри меню, сделать её крупнее, а если внутри основного текста, то задать ей нужный цвет.
Соседние селекторы
Контекстные селекторы используются для вложенных друг в друга элементов, а соседние — для расположенных рядом. Например, теги
- .
Соседние селекторы записываются с помощью знака +, например, селектор1 + селектор2.
Стили применятся к элементу, подходящему под селектор2, только если сразу перед ним расположен элемент, подходящий под селектор1.
Пример. Есть два элемента списка:
Контекстные и соседние селекторы
Селекторы в CSS можно очень гибко комбинировать. В частности, можно комбинировать контекстные и соседние селекторы. Например, селектор .player-1 .hit + .miss сработает для тега с классом miss, если сразу перед ним расположен тег с классом hit и оба тега расположены внутри тега с классом player-1. li { background-color: white; } .third + li { background-color: red; } .first + li { background-color: red; } .shooter-2 .third + li { background-color: yellow; }
Дочерние селекторы
Потомком называются любые элементы, расположенные внутри родительского элемента. А дочерними элементами называются ближайшие потомки. Взгляните на пример:
- ...
- ...
- элементы
- являются дочерними элементами и потомками, а — потомки, но не дочерние элементы.
Контекстные селекторы влияют на всех потомков, что не всегда удобно.
Иногда необходимо задать стили только для дочерних элементов.
Особенно это полезно при работе с многоуровневыми списками.
Для этого существует дочерний селектор, в котором используется символ >.
Например: ul > li или ul > li > span.
.places li {
border-bottom: 2px solid #cccccc;
}
.places span {
font-weight: bold;
}
.places ul > li {
border-bottom: none;
}
.places ul > li > span {
border-bottom: none;
font-weight: normal;
}
Псевдоклассы
Псевдоклассы — это дополнения к обычным селекторам, которые делают их ещё точнее и мощнее. Обычный селектор — это снайперский прицел, а с псевдоклассом он становится прибором ночного видения. Псевдокласс добавляется к селектору c помощью символа : , вот так селектор:псевдокласс. Например: a:visited { ... } li:last-child { ... } .alert:hover { ... } Знакомство с псевдоклассами мы начнём с first-child и last-child. Псевдокласс first-child позволяет выбрать первый дочерний элемент родителя, а last-child — последний дочерний элемент. Например: li:last-child { ... } Этот селектор выберет последний элемент списка. li { background-color: white; } li:first-child { background-color: red; } li:last-child { background-color: yellow; }
Псевдокласс :nth-child
Псевдоклассы из предыдущего примера относятся к семейству псевдоклассов, помогающих выбирать элементы по их расположению. С помощью псевдокласса nth-child можно выбирать теги по порядковому номеру, не используя классы. Синтаксис псевдокласса: селектор:nth-child(выражение). Выражением может быть число или формула. Например: 1. li:nth-child(2) { ... } 2. li:nth-child(4) { ... } 3. li:nth-child(2n) { ... } Первый селектор выберет второй элемент списка, второй селектор — четвёртый элемент списка, третий селектор — все чётные элементы. li { background-color: white; } li:nth-child(3) { background-color: red; } li:nth-child(4) { background-color: red; }
:nth-child и контекстные селекторы
Селекторы с псевдоклассами хорошо сочетаются с контекстными селекторами. Например, следующий селектор выберет третий тег
- внутри блока с классом shooter-2. .shooter-2 li:nth-child(3) { ... } Селектор не обязательно должен заканчивается псевдоклассом. Например, следующий селектор выберет элемент с классом .text в четвёртом элементе списка
- . li:nth-child(4) .text { ... } li { background-color: white; } .shooter-1 li:nth-child(2) { background-color: red; } .shooter-1 li:nth-child(5) { background-color: red; } .shooter-2 li:nth-child(1) { background-color: red; }
Псевдокласс :hover
Некоторые псевдоклассы позволяют выбирать элементы, с которыми взаимодействует пользователь. Сначала познакомимся с псевдоклассом :hover. Этот псевдокласс позволяет выбрать элемент, когда на него наведён курсор мыши и кнопка мыши не нажата. Примеры: 1. a:hover { ... } 2. tr:hover { ... } 3 .menu-item:hover { ... } Первый селектор выбирает ссылку, второй строку таблицы, третий элемент с классом menu-item, но только в том случае, если на них наведён курсор мыши. Благодаря этому псевдоклассу можно добавлять в интерфейс динамику и интерактивность, так как элементы начинают реагировать на действия пользователя, изменяя свой внешний вид. table { background: rgba(255, 255, 255, 0.95); } tr:hover { background-color: #fcf8e3; } strong:hover { color: #0088cc; }
Динамические эффекты с помощью :hover
Интересовались ли вы, как с помощью CSS создаются выпадающие меню? Львиная доля динамических эффектов, создаваемых с помощью CSS, опираются на несколько псевдоклассов, главный из которых, конечно же, :hover. Весь секрет заключается в сочетании контекстных селекторов и псевдоклассов. Посмотрите на пример: li.top ul.submenu { display: none; } li.top:hover ul.submenu { display: block; } Первое правило прячет список-подменю. Второе правило гласит: «если на верхний пункт меню, в котором находится подменю, наведут курсор, то надо показать подменю». Вот так всё просто. Общий принцип такой: родительский элемент реагирует на наведение мыши и изменяет свойства элементов-потомков. То есть всё работает на контекстных селекторах вида селектор1:hover селектор2. em { display: none; } :hover > em { display: inline; color:red; } strong:hover { color: #0088cc; }
Псевдоклассы :link, :visited и :active
Отвлечёмся от биатлона и познакомимся с псевдоклассами для ссылок. :link выбирает ещё не посещённые ссылки. :visited выбирает посещённые ссылки. :active выбирает активные ссылки (кнопка мыши зажата на ссылке). Пример задания CSS-правил для ссылок: a:link { ... } a:visited { ... } a:hover { ... } a:active { ... } Обратите внимание на порядок правил. Если их расположить по-другому, то некоторые могут не сработать. a:link { color: black; } a:visited { color: #cccccc; } a:active { color: green; }
Псевдокласс :focus
Псевдокласс :focus позволяет выбрать элемент, который в данный момент в фокусе. Например, текстовое поле, в которое установлен курсор, находится в фокусе. В фокусе могут быть не только текстовые поля. Если вы переключаетесь между элементами веб-страницы с помощью клавиши tab, то в фокус будут попадать ссылки. Пример использования псевдокласса: input:focus { /* стили для поля в фокусе */ }
form input:focus { border-color: #0088cc; }Псевдокласс :focus Селекторы атрибутов
Существуют селекторы, которые позволяют выбирать элементы по любым атрибутам. Чаще всего такие селекторы используются при работе с формами, так как поля форм имеют атрибут type с разными значениями. Селекторы атрибутов записываются с использованием квадратных скобок: элемент[атрибут]. Примеры селекторов: 1. input[checked] { ... } 2. input[type="text"] { ... } Первый селектор выберет поля формы, у которых есть атрибут checked, второй селектор выберет поля формы, у которых атрибут type имеет значение text. input[required] { background-color: #fcf8e3; } input[name="password"] { background-color: #f2dede; } input[type="submit"] { border-color: green; }
Селектор по id
Существует ещё один HTML-атрибут, для которого существует специальный селектор. Этот атрибут id (идентификатор), а селектор записывается с помощью символа #, например, #some-id. На значение id распространяются те же ограничения, что и на имя класса. Также id должен быть уникальным на странице. Пример: HTML
Приветствие!
CSS#greeting { ... } Использование селекторов по id при оформлении считается плохой практикой. Существуют редкие исключения из этого правила, например, при оживлении слайдера на чистом CSS.итог
Испытание: интерактивное расследование Результаты соревнования
Игрок Раунд 1 Раунд 2 Раунд 3 Итог Иван Васильев 10 -20 30 20 Анна Иванова 50 10 -30 30 Василий Ольгин 50 50 50 150 Ольга Аннова -10 -20 40 10