Селектор
Сделайте селектор, который выберет все абзацы
идущие после из элемента с > 0
Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Не работает селектор
Здравствуйте, учить HTML и CSS начал недавно, поэтому извиняюсь за возможно глупые ошибки. Проблема.
Универсальный селектор
Скажите пожалуйста как добавить универсальный селектор для font-famaly в css чтоб сохранилось.
Дочерний селектор
Никак не могу разобраться по какой причине элемент li второго уровня(подэлемент1|2|3) меняет свой.
Дочерний селектор
Вопрос касается вложенности элементов. Мне нужно чтобы дочерний элемент приобрел красный цвет.
2572 / 1664 / 728
Регистрация: 13.03.2010
Сообщений: 5,566
Сообщение было отмечено gogolik как решение
Решение
#test h2 ~ p
Селекторы. Часть 1.
Ближайшие статьи этого учебника будут посвящены глубокому изучению селекторов, благодаря которым вы научитесь выбирать совершенно любой элемент, размещенный в HTML документе.
Основная функция селекторов заключается в том, чтобы контролировать дизайн веб страниц, выбирая элемент, или элементы по определенным критериям и стилизуя их с помощью CSS свойств, которые вы указываете в блоке объявлений (описаний).
Селектор типа
Рис. 3а Селектор типа в CSS.
- p — сообщает браузеру, что необходимо отформатировать все HTML теги (параграф).
- table — сообщает браузеру, что необходимо отформатировать все HTML теги (таблица).
- li — сообщает браузеру, что необходимо отформатировать все HTML теги (элемент списка).
Давайте рассмотрим пример, в котором с использованием селектора типа мы стилизуем все заголовки второго уровня ( ):
charset = "UTF-8"> Селектор типа h2 font-family: Arial; /* задаем тип шрифта Arial */ color: green; /* задаем цвет текста*/ margin-top: 50px; /* добавляем отступ от верхнего края элемента */ > Обычный заголовок второго уровня Обычный заголовок второго уровня Обычный заголовок второго уровня
Результат нашего примера:
Как вы могли заметить, селектор типа позволяет стилизовать сразу все элементы подобного типа, но что делать если нам необходимо стилизовать какой-то однотипный элемет отлично от других? В этом случае селектор типа нам уже не подойдет и нам придется использовать селектор класса.
Селектор класса
Рис. 4 Селектор класса в CSS.
Прошу от Вас максимального внимания, так как селектор класса является одним из самых распространенных и востребованных селекторов CSS, который мы будем постоянно использовать в дальнейшем изучении CSS.
И так, мы хотим, чтобы один из элементов выглядел не так, как другие. Для этого нам необходимо создать селектор, назначив ему имя, которое нам необходимо придумать самостоятельно:
.test /* имя класса в таблице стилей задается через точку */ text-align: center; /* горизонтальное выравнивание текста по центру */ font-family: Courier; /* задаем тип шрифта Courier */ color: green; /* задаем цвет текста*/ margin-top: 50px; /* добавляем отступ от верхнего края элемента */ >
После того как мы создали наш класс в таблице стилей, нам необходимо применить его к интересующему нас элементу, или элементам, которые мы хотим стилизовать. Чтобы указать класс для определенного элемента, необходимо добавить к этому элементу глобальный HTML атрибут class со значением нашего класса, но без точки:
class = "test">Заголовок второго уровня /* задаем класс для элемента*/
Обратите внимание на следующие правила, которые необходимо соблюдать при работе с селекторами класса:
- в отличии от селекторов типа все названия селекторов класса должны начинаться с точки (благодаря ей браузеры находят эти селекторы в таблице стилей). Точка требуется только в названии селектора таблицы стилей (в значении глобального HTML атрибута class она не ставится, будьте внимательны из-за этого возникает много ошибок).
- используйте только буквы алфавита (A-Z, a-z), числа, дефисы, знаки подчеркивания.
- название после точки всегда должно начинаться с символа (неправильно: .50cent, .-vottakvot).
- Учитывайте регистр при наименовании стилевых классов, т.к. они к этому чувствительны и очень ранимы (.vottakvot и .VotTakVot разные классы).
Теперь соберем это в одном примере и посмотрим результат:
charset = "UTF-8"> Селекторы класса .test text-align: center; /* горизонтальное выравнивание текста по центру */ font-family: Courier; /* задаем тип шрифта Courier */ color: green; /* задаем цвет текста*/ margin-top: 50px; /* добавляем отступ от верхнего края элемента */ > Обычный заголовок второго уровня class = "test">Заголовок с заданным классом
Результат нашего примера:
Селекторы класса очень гибкий инструмент, который позволяет указать конкретный стиль даже к одному слову предложения. Для этого мы поместим это слово внутри элемента и назначим этому элементу определённый класс, который опишем во внутренней таблице стилей:
charset = "UTF-8"> Пример выделения одного слова .test color: #0F0; /* задаём цвет текста в hex формате */ font-size: 30px; /* задаем размер шрифта*/ > Обычный заголовок class = "test">второго уровня
Результат нашего примера:
Обращаю Ваше внимание, что вы можете использовать селекторы класса напрямую к HTML элементам, используя следующий синтаксис:
a.test /* выбирает все элементы с классом test */ блок объявлений; > p.intro /* выбирает все элементы с классом intro */
блок объявлений; >
ID селекторы
Рис. 7 Селектор id в CSS.
Основная задача селектора id заключается в том, чтобы выбрать элемент с определённым идентификатором. Для начала необходимо создать идентификатор, назначив ему имя, которое нам необходимо придумать самостоятельно:
#test /* имя идентификатора в таблице стилей задается через решетку */ background-color: #00FF00; /*Задаём цвет заднего фона*/ color: white; /*Задаём цвет шрифта белый*/ font-size: 30px; /*Указываем размер шрифта*/ width: 600px; /*Указываем ширину элемента*/ height: 40px; /*Указываем высоту элемента*/ text-align: center; /*Выравниваем текст по центру внутри элемента*/ >
После того как мы создали наш идентификатор в таблице стилей, нам необходимо применить его к интересующему нас элементу, который мы хотим стилизовать. Чтобы указать идентификатор для элемента, необходимо добавить к этому элементу глобальный HTML атрибут id со значением нашего идентификатора, но уже без решетки:
id = «test»>Обычный заголовок второго уровня
Обратите внимание на следующие правила, которые необходимо соблюдать при работе с id селекторами:
- значение идентификатора должно быть уникально на странице, размещение нескольких одноименных идентификаторов на странице считается ошибкой (выборка остановится на первом идентифакторе).
- все названия id селекторов должны начинаться с решётки (благодаря ей браузеры находят эти селекторы в таблице стилей). Решетка требуется только в названии селектора таблицы стилей (в значении глобального HTML атрибута id она не ставится, будьте внимательны из-за этого возникает много ошибок).
- используйте только буквы алфавита (A-Z, a-z), числа, дефисы, знаки подчеркивания.
- название после решётки всегда должно начинаться с символа (неправильно: #50cent, #-vottakvot).
- Учитывайте регистр при наименовании id селекторов, т.к. они к этому чувствительны (#vottakvot и #VotTakVot разные идентификаторы).
Теперь соберем это в одном примере и посмотрим результат:
charset = "UTF-8"> ID селекторы #test background-color: #0F0; /* задаём цвет заднего фона */ color: white; /* задаём цвет текста */ font-size: 30px; /* указываем размер шрифта */ height: 100px; /* указываем высоту элемента */ text-align: center; /* горизонтальное выравнивание текста по центру */ > id = "test">Обычный заголовок второго уровня
Результат нашего примера:
В настоящее время id селекторы в основном применяются на веб страницах с целью динамического управления элементами с использованием языка программирования JavaScript.
Групповые селекторы
В CSS допускается задать единый стиль не только одному селектору, но и группе селекторов. В группу могут входить как селекторы типа, селекторы класса, так и рассмотренные нами id селекторы. При перечислении любых селекторов (даже, которые мы будем рассматривать далее в учебнике) необходимо обязательно разделять их запятой, позднее вы поймете почему.
h1, h2,.test,#test /* выбираем заголовки первого и второго уровня, элементы с классом test и элемент с идентификатором test */ background-color: green; /* задаем цвет заднего фона */ > .test, #test /* выбираем элементы с классом test и элемент с идентификатором test */ color: blue; /* задаем цвет текста */ >
Вторым групповым селектором мы указываем, что кроме заднего фона элементы с классами test и элемент с идентификатором test получат синий цвет текста.
Рассмотрим следующий пример:
charset = "UTF-8"> Групповые селекторы h1, h2,.test,#test /* выбираем заголовки первого и второго уровня, элементы с классом test и элемент с идентификатором test */ color: red; /* задаем цвет текста */ > h3,h4 /* выбираем заголовки третьего и четвертого уровня */ color: blue; /* задаем цвет текста */ > h1,h2,h3,h4 /* выбираем заголовки от первого до четвертого уровня */ font-style: italic; /* задаем стиль шрифта - курсивное начертание */ > Заголовок первого уровня Заголовок второго уровня class = "test">Абзац с классом test Заголовок третьего уровня id = "test">Абзац с идентификатором test Заголовок четвертого уровня
В этом примере мы использовали три групповых селектора:
- Первым групповым селектором мы указываем, что заголовки и , элементы с классом test и элемент с идентификатором test получат цвет текста красный.
- Вторым групповым селектором мы указываем, что заголовки и получат цвет текста синий.
- Третьим групповым селектором мы указываем, что все заголовки (от до ) будут иметь курсивное начертание шрифта.
Результат нашего примера:
Универсальный селектор
Селектор * позволяет выбрать все элементы внутри документа (универсальный селектор).
Давайте рассмотрим пример использования:
charset = "UTF-8"> Универсальный селектор * /* выбираем все элементы внутри документа */ color: rgb(50,100,150); /* задаем цвет текста в формате rgb */ font-style: italic; /* задаем стиль шрифта - курсивное начертание */ > Заголовок первого уровня Заголовок второго уровня Абзац, который не несет никакой смысловой нагрузки
В этом примере с использованием универсального селектора мы указали, что все элементы на странице получат определенный цвет текста и будут иметь курсивное начертание шрифта.
Результат нашего примера:
Кроме того универсальный селектор может использоваться в качестве селектора потомков и выбирать все элементы, которые находятся внутри другого элемента.
.test * /* выбирает все элементы внутри элемента c назначенным классом test */ объявление; > #test * /* выбирает все элементы внутри элемента c назначенным идентификатором test */ объявление; > div * /* выбирает все элементы внутри элемента */ объявление; >
Селекторы потомков будут подробно рассмотрены в следующей статье «Селекторы. Часть 2.».
Вопросы и задачи по теме
Перед тем как перейти к изучению следующей темы пройдите практическое задание:
- Для выполнения задания вам понадобится скачать архив и скопировать содержимое архива (HTML файл) в любую папку на вашем жестком диске:
- Составьте следующую HTML страницу, в которой заголовки имеют шрифт Arial, а абзацы, которые относятся к статье Verdana:
Практическое задание № 2.
Подсказка: при выполнении практических заданий вы можете располагать стилевую информацию как внутри самой веб страницы, так и в отдельном файле. В практических заданиях для определения цвета элементов вы можете использовать графические редакторы — инструмент палитра (пипетка), либо установите плагин для вашего браузера (например, CollorZilla), либо использовать свои цвета, так как копирование цветов не является целью практического занятия.
После того как вы выполните упражнение проинспектируйте код страницы, открыв пример в отдельном окне, чтобы убедиться, что вы все выполнили правильно.
Создание первой таблицы стилей
Селекторы. Часть 2.
© 2016-2023 Денис Большаков, замечания и предложения по работе сайта Вы можете направить по адресу basicweb.ru@gmail.com
Кажется, вы используете блокировщик рекламы 🙁
Этот ресурс не является коммерческим проектом и развивается на энтузиазме автора сайта, который посвящает все свое свободное время этому проекту.
Добавьте, пожалуйста, basicweb.ru в исключения блокировщика рекламы, этим вы поможете развитию проекта.
CSS-селекторы. Шпаргалка для новичков
Селекторы — это шаблоны, которые используются для привязки стилевых свойств к элементам в документе. Вы можете задать стиль для всех элементов или сократить выбор с помощью определённого селектора.
Основные селекторы
Селекторы типа выбирают элементы HTML-документа по их тегу. Например, селектор p выберет все
на странице:
Текст
Другой текст
Селекторы класса определяют стиль элементов с определённым классом. Например, этот селектор выберет абзац с классом .highlight .
Текст
Другой текст
.highlight
Селекторы идентификатора выбирают элемент по его уникальному идентификатору. Например, #welcome соответствует элементу с id=»welcome» :
Добро пожаловать!
#welcome
Селекторы наличия и значения атрибута находят все элементы, которые имеют определённый атрибут или значение атрибута. Например, здесь мы выбираем все ссылки, которые начинаются на http:// , но не имеют example.com .
a[href^="http://"]:not([href*="[example.com](http://example.com/)"])
Универсальный селектор позволяет прописать стили для всех элементов HTML без исключения. Он указывается в виде звёздочки * . В примере ниже мы используем универсальный селектор с псевдоэлементами, чтобы изменить расчёт общего размера элемента.
*, *::before, *::after
Селекторы-комбинаторы
Комбинаторы выбирают элементы, основываясь на их взаимосвязи в дереве DOM. Можно выбрать элементы, которые являются потомками, соседями или родителями других элементов.
Соседний родственный комбинатор
Записывается как селектор1 + селектор2 . Выбирает элемент, подходящий под селектор2 , перед которым расположен элемент, подходящий под селектор1 .
Сегодня я стал великим фронтендером.
Я написал стили для текста.
.first + .second
Селектор .first + .second применит стили к абзацу с классом .second , потому что перед ним есть элемент с классом .first . Предложение «Я написал стили для текста.» станет белым.
Дочерний комбинатор
Записывается как селектор1 > селектор2 . Выбирает элементы, которые являются прямыми потомками элемента, подходящего под селектор1 .
Я выучил CSS
Ну селекторы точно знаю.
.decoration > p
Стили применятся только к «Я выучил CSS», этот текст станет красным.
Общий родственный комбинатор
Записывается как селектор1 ~ селектор2 . Добавляет стили для элемента, который соответствует селектор2 , если перед ним стоит элемент, подходящий под селектор1. Оба элемента должны принадлежать одному родителю.
Это было прекрасное раннее утро. Идеальное время, чтобы приготовить чашку кофе или чая, открыть ноутбук и выучить CSS.
Так Вовка и поступил. Погладил кота, набрался решимости и открыл для себя новый мир вёрстки.
p ~ p
Стили применятся ко второму параграфу, появится внешний отступ сверху.
Этот селектор отличается от соседнего селектора тем, что между элементами селектор1 и селектор2 могут находиться другие элементы.
Комбинатор потомка
Записывается как селектор1 селектор2 . Находит все потомки элемента, который подходит под селектор1 , и применяет к ним стили.
Оказалось, что селекторы — это не так страшно, как я думал. Нужно только немного попрактиковаться, и всё сразу станет ясно.
p span
Здесь в синий цвет окрасятся «не так страшно» и «всё сразу станет ясно.».
Селекторы псевдоклассов
Псевдоклассы — это простые селекторы, позволяющие выбирать элементы на основе информации, которая находится за пределами DOM-дерева или которую невозможно выразить с помощью простого селектора.
Простой селектор — это селектор по одному условию, односоставной.
Они также могут быть динамическими, то есть элемент может терять и приобретать псевдокласс, пока пользователь взаимодействует с этим элементом, например наводит на кнопку.
Чтобы использовать псевдокласс, нужно добавить его в селектор, например:
a:active
В этом примере мы меняем цвет ссылки на красный, когда пользователь кликает по ней.
:hover
Псевдокласс :hover соответствует элементу, когда пользователь наводит на него курсор мыши. Например, здесь псевдокласс используется, чтобы убрать подчёркивание ссылки:
a:hover
:active
Псевдокласс :active соответствует элементу, на который активно нажимают. Здесь псевдокласс используется для скругления рамок кнопки, когда на неё кликают:
button:active
:visited
Псевдокласс :visited соответствует посещённой ссылке. Например, с его помощью мы можем поменять цвет ссылки, по которой перешёл пользователь:
a:visited
:focus
Псевдокласс :focus соответствует элементу, находящемуся в фокусе — то есть когда элемент выбран для ввода или навигации с помощью клавиатуры. Например, здесь :focus используется для добавления зелёной рамки вокруг поля ввода:
input:focus
:first-child , :last-child и :nth-child(n)
Эти псевдоклассы выбирают элемент по его порядковому номеру. :first-child соответствует первому дочернему элементу родителя, :last-child — последнему. А псевдокласс :nth-child(n) указывает на n -й дочерний элемент. Например, с его помощью можно выбрать второй, пятый или предпоследний элемент. Вместо n в скобках указывается целое число или математическое выражение.
/* выберет первый элемент — HTML*/ li:first-child < font-weight: 700; >/* выберет последний элемент — JavaScript*/ li:last-child < text-decoration: underline; >/* выберет второй элемент — CSS*/ li:nth-child(2)
:first-of-type , :last-of-type и :nth-of-type(n)
Эти псевдоклассы похожи на предыдущие. Они тоже выбирают элемент по его порядковому номеру, но только с учётом типа — тега.
Первый параграф
Второй параграф
Выделенный текст Третий параграф
Четвёртый параграф
Пятый параграф
Выделенный текст
/*Текст в первом тегебудет жирным*/ p:first-of-type < font-weight: 700; >/*Текст во втором теге
будет подчёркнут*/ p:nth-of-type(2) < color: green; >/*Текст в последнем теге
будет подчёркнут*/ p:last-of-type
«Первый параграф» и «Третий параграф» станут жирными. «Второй параграф и «Четвёртый параграф» окрасятся в зелёный. «Четвёртый параграф» и «Пятый параграф» будут подчёркнутыми.
Если мы используем здесь first-child , nth-child(2) и last-child , то получим другую картину. Жирным станет только «Первый параграф». В зелёный окрасятся «Второй параграф» и «Третий параграф». Подчёркнутым будет «Четвёртый параграф». И всё это из-за того, что между
есть другие элементы — .
:empty
Псевдокласс :empty — это селектор CSS, который соответствует элементам, не имеющим дочерних элементов, включая текстовые узлы и другие элементы. Его можно использовать для стилизации элементов, которые пусты или не имеют содержимого:
input:empty < border: 1px solid red; >>
В этом примере мы с помощью :empty добавляем красную рамку пустому инпуту.
Заключение
Мы разобрали самые популярные селекторы, но на самом деле их больше. Полный перечень вы найдёте в спецификации W3C. А чтобы научиться использовать селекторы на практике, пройдите эти тренажёры из курса «Старт в программирование».
Ещё статьи про CSS
- Как посчитать специфичность селекторов
- Как работает каскад в CSS
- Флексы для начинающих
- Как создавать адаптивные сетки
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.
Читать дальше
Увеличение ссылки при наведении
Задача: плавно увеличить ссылку при наведении.
Решение:
a < display: inline-block; transition: transform 0.3s ease; >a:hover
Вот как это работает:
Что всё это значит
Первые два свойства просто немного меняют вид ссылки.
Свойство color: maroon; меняет цвет текста в тегах на темно-красный.
Свойство text-decoration: none; убирает подчеркивание. Есть и другие варианты text-decoration — мы писали о них отдельно.
Но наша задача — плавно увеличить размер ссылки, а не просто её перекрасить. Поэтому работаем с CSS-анимацией. Так, свойство transform: scale(1.2); срабатывает при наведении курсора и увеличивает размер ссылки в 1.2 раза по сравнению с её начальным размером.
Свойство transition: transform 0.3s ease; используется для создания плавного перехода между состояниями элемента. В нашем случае увеличение будет происходить в течение 0.3 секунд с использованием функции времени ease для более плавного начала и конца анимации.
- 13 октября 2023
WOFF больше не нужен
Я купил и скачал шрифты для недавнего проекта, распаковал папку, где были только WOFF2-файлы, и сначала не поверил, что такое бывает.
Потом мне стало интересно: они что, забыли WOFF? А он вообще ещё нужен? Ну, всё-таки, веб — это место, где постоянно всё меняется и улучшается, поэтому я пошёл и спросил людей в Mastodon. Ответ был единодушным: нужен только WOFF2!
Я хорошо помню пост от Зака в конце 2016, после которого я отказался от исчерпывающего синтаксиса @font-face , включавшего, вдобавок, TTF, EOT и SVG-шрифты, и перешёл только на WOFF2 и WOFF.
Похоже, с тех пор мир веб-шрифтов изменился ещё разок, и вот актуальная версия @font-face :
@font-face
Остался всего один формат. Просто, скажите?
Как писал Зак, «так как в вебе, когда шрифт не найден, всё равно подгружаются системные шрифты, мы можем идти в ногу со временем». Итак, какие браузеры отправятся в тёмные века системных шрифтов с этим синтаксисом?
- IE 11, 10, 9, 8, 7, …
- Chrome 4–35
- Edge 12 и 13
- Safari 3–9.1
- Firefox 2–38
- Opera 22 и ниже
- Android 4.4.4 KitKat и ниже (а это
- Safari на iOS 3.2–9.3
Caniuse.com показывает, что почти у 95% пользователей есть браузер с поддержкой WOFF2. А в относительной статистике (Date Relative — прим. перев.) заметно, что массовый переход на WOFF2 случился в 2015 и 2016. К концу 2016 во всех последних версиях больших браузеров появилась поддержка WOFF2.3
А спустя 7 лет поддержка расширилась настолько, что можно уже не добавлять в проект WOFF-файлы — ну, кроме случая, когда вы точно знаете, что много ваших пользователей используют старые устройства и браузеры.
С другой стороны, нет смысла и удалять WOFF из старых проектов. Если вы подключали WOFF2 раньше WOFF внутри @font-face — и порядок здесь важен — то браузер просто скачает и подключит WOFF2-версию.
И если однажды вы, как и я, обнаружите себя перед папкой, полной файлов WOFF2, знайте, что WOFF — уже всё.
- 23 сентября 2023
Трясём пароль с помощью CSS
Знаете момент, когда всё на сайте уже сделано, и хочется добавить какую-нибудь маленькую незаметную фишку? Мы тоже знаем, поэтому давайте просто потрясём поле пароля, когда пользователь ввёл неверный пароль. Как на Маке.
Вот что получится в итоге:
- 7 сентября 2023
Как сделать тёмную тему на сайте
Без лишних слов создадим простой переключатель для светлой и темной темы с использованием HTML, CSS и JavaScript. Нам понадобятся три файла — index.html , styles.css и script.js .
HTML
Основная разметка страницы — заголовок, абзац текста, список и текст в рамке.
CSS (styles.css):
Здесь задаём цвета для светлой и тёмной темы, а ещё минимальную стилизацию текста и блока с рамкой.
body < font-family: Arial, sans-serif; transition: background-color 0.3s ease; >body.light-theme < background-color: #ffffff; color: #000000; >body.dark-theme < background-color: #121212; color: #ffffff; >.boxed-text
JavaScript (script.js)
Этот код нужен, чтобы переключать тему при нажатии на кнопку:
document.getElementById('themeToggle').addEventListener('click', function() < const currentTheme = document.body.className; if (currentTheme === 'light-theme') < document.body.className = 'dark-theme'; >else < document.body.className = 'light-theme'; >>);
При загрузке страницы по умолчанию будет установлена светлая тема. При нажатии на кнопку «Переключить тему» будет происходить переключение между светлой и темной темой.
- 29 августа 2023
4 способа центрировать текст в CSS
Центрирование элементов на веб-странице — это одна из наиболее распространенных задач, с которой мы сталкиваемся при работе с макетами. И хотя центрирование текста по горизонтали довольно простое ( text-align: center; и делов-то), вертикальное центрирование может быть немного сложнее. Давайте рассмотрим несколько методов.
Метод 1: Flexbox
Flexbox — это один из самых простых и эффективных способов центрирования.
Заворачиваем текст в с классом center-both :
Центрированный текст
.center-both
Метод 2: CSS Grid
HTML такой же, как в предыдущем примере. В CSS включаем гриды и используем свойство place-items со значением center :
.center-both
Метод 3: позиционирование и Transform
Этот метод немного старомодный и работает не идеально. Здесь у div устанавливается relative позиция. А
внутри дива мы сдвигаем с помощью абсолютного позиционирования. Не слишком элегантно:
.center-both < position: relative; >.center-both p
HTML остается таким же. Вот что получается:
Плохой метод: использование line-height
Если у вас однострочный текст, вы можете установить line-height , равный высоте родительского элемента.
.center-both < line-height: 200px; /* Пример высоты */ text-align: center; >
Этот метод не подойдет для многострочного текста. Да и вообще мы очень не рекомендуем так делать, это прям совсем для любителей острых ощущений. Потому что вот:
Если вам интересно узнать больше о каждом из этих методов, рекомендуем посмотреть документацию по Flexbox на MDN или документацию по CSS Grid на MDN, а ещё пройти курсы в HTML Academy.
- 28 августа 2023
Как скруглить рамку. CSS-свойство border-radius
CSS-свойство border-radius помогает скруглить углы элемента. Оно особенно полезно для стилизации кнопок, форм, карточек товаров и других элементов сайта.
- 28 июля 2023
CSS-свойство contain
Представьте, что у вас есть контейнер. Внутри него находятся разные элементы: текст, изображения или что-то другое. Свойство contain говорит браузеру, как именно элементы должны взаимодействовать. Например, они могут быть ограничены, влиять на расположение друг друга или менять свои размеры.
Также свойство помогает повысить производительность страницы. Например, браузер понимает, когда при изменении свойств элемента нужно перерисовать страницу, а когда нет.
⭐ CSS-свойство contain определяет, как элемент должен взаимодействовать с другими элементами внутри контейнера.
Синтаксис
.container
- 14 июля 2023
Как задать позицию и размер элемента. CSS-свойство inset
CSS-свойство inset задаёт позицию и размер элемента на странице. Это комбинация четырёх отдельных свойств: top , right , bottom и left , которые определяют отступы от верхнего, правого, нижнего и левого края элемента.
Синтаксис
.element
- 13 июля 2023
Как перекрыть один элемент другим. CSS-свойство z-index
z-index определяет порядок наложения элементов в трёхмерном пространстве на веб-странице. Свойство управляет тем, как элементы перекрывают друг друга, если они имеют позиционирование, отличное от значения static .
Синтаксис
.my-element
- 10 июля 2023
Как верстать и оформлять цитаты
Не используйте тег для других видов текста — перевода или шутки, так как это не семантично.
- 22 июня 2023
Комплексные селекторы
Селекторы являются одной, если не самой важной частью CSS. Они формируют каскад и определяют, как стили должны применяться к элементам страницы.
До недавнего времени внимание CSS никогда действительно не обращалось на селекторы. Время от времени появлялись небольшие обновления в пределах спецификации селекторов, но никогда не было никаких реальных новаторских улучшений. К счастью, в последнее время всё больше внимания уделяется селекторам, так что взглянем на то, как выбирать разные типы элементов и элементы в разных состояниях.
CSS3 принёс новые селекторы, открывая целый новый мир возможностей и улучшений существующей практики. Здесь мы обсудим селекторы, как старые так и новые, а также как наилучшим образом их использовать.
Типовые селекторы
Перед глубоким погружением в некоторые более сложные селекторы и те, которые предлагаются в CSS3, давайте взглянем на некоторые наиболее типовые селекторы на сегодня. Эти селекторы включают в себя селекторы типа, классы и идентификаторы.
Селектор типа идентифицирует элемент, основанный на его типе, в частности, как этот элемент объявлен в HTML. Селектор класса идентифицирует элемент, основанный на значении атрибута class , который может повторно применяться к нескольким элементам по мере необходимости и помогает делиться популярными стилями. И, наконец, идентификатор определяет элемент, основанный на значении атрибута id , который является уникальным и должен быть использован на странице только один раз.
h1 .tagline #intro
. Обзор типовых селекторовПример Название Описание h1 Селектор типа Выбирает элемент по его типу. .tagline Класс Выбирает элемент по значению атрибута class , который может быть использован повторно несколько раз на одной странице. #intro Идентификатор Выбирает элемент по значению атрибута id , который является уникальным и должен использоваться только один раз на странице.
Дочерние селекторы
Дочерние селекторы обеспечивают способ выбора элементов, которые находятся один в другом, что делает их детьми своего родительского элемента. Такой выбор может быть сделан двумя разными способами, с помощью селектора потомка либо прямого дочернего селектора.
Селектор потомка
Наиболее распространённым дочерним селектором является селектор потомка, который соответствует каждому элементу, который следует за определённым предком. Потомок не обязательно должен идти сразу после предка в дереве документа, вроде отношения родитель-ребёнок, но может находиться в любом месте внутри предка. Селекторы потомка создаются пробелом между отдельными элементами в селекторе, создавая новый уровень иерархии для каждого элемента списка.
Селектор article h2 является селектором потомка и выбирает только элементы , которые находятся внутри элемента . Обратите внимание, независимо от того, где живёт элемент , пока он находится внутри элемента , он всегда будет выбран. Кроме того, любой элемент за пределами элемента не будет выбран.
Ниже приведены заголовки, из которых выбраны строки 3 и 5.
article h2
.
Этот заголовок будет выбран
Этот заголовок будет выбран
Прямой дочерний селектор
Порой селекторы потомка заходят слишком далеко, выбирая больше, чем хотелось бы. Иногда должны быть выбраны только прямые дети родительского элемента, а не каждый экземпляр элемента вложенный глубоко внутри предка. В этом случае может быть использован прямой дочерний селектор путём размещения знака больше (>) между родительским и дочерним элементом в селекторе.
Например, article > p является прямым дочерним селектором только когда элементы
находятся непосредственно внутри элемента . Любой элемент размещённый вне элемента или вложенный внутри другого элемента, кроме , не будет выбран.
Ниже, абзац на строке 3, является единственным прямым потомком его родителя , поэтому и выбран.
article > p
.
Этот абзац будет выбран
.
Пример | Название | Описание |
---|---|---|
article h2 | Селектор потомка | Выбирает элемент, который находится в любом месте внутри определённого предка. |
article > p | Прямой дочерний селектор | Выбирает элемент, который находится непосредственно внутри определённого родителя. |
Родственные селекторы
Знать, как выбрать дочерние элементы, в значительной степени полезно и встречается довольно часто. Однако родственные элементы, т. е. элементы, у которых общий предок, также может потребоваться выбрать. Такая выборка может быть сделана с помощью общего родственного селектора и соседних селекторов.
Общий родственный селектор
Общий родственный селектор позволяет выбрать элементы, которые будут отобраны на основе их родственных элементов, т. е. те, у которых один и тот же общий родитель. Они создаются с помощью символа тильды (~) между двумя элементами внутри селектора. Первый элемент определяет, что второй элемент должен быть родственным с ним, и у обоих должен быть один и тот же родитель.
Селектор h2 ~ p — это общий родственный селектор, он ищет элементы
, которые следуют после любых элементов в том же родителе. Чтобы элемент
был выбран, он должен идти после любого элемента .
Абзацы в строках 5 и 9 выбраны, поскольку они идут после заголовка в дереве документа и у них тот же родитель, что и у родственного заголовка.
h2 ~ p
.
.
.
Этот абзац будет выбран
.
Этот абзац будет выбран
Соседние селекторы
Иногда может быть желательно иметь немного больше контроля, в том числе возможность выбрать родственный элемент, который следует непосредственно за другим родственным элементом. Соседний селектор будет выбирать только родственные элементы, непосредственно следующие за другим родственным элементом. Вместо символа тильды, как в случае с общим родственным селектором, соседний селектор использует символ плюс (+) между двумя элементами в селекторе. Опять же, первый элемент определяет, что второй элемент должен непосредственно следовать после него и быть ему родственным и у обоих элементов должен быть один и тот же родитель.
Взглянем на соседний селектор h2 + p . Будут выбраны только элементы
идущие непосредственно после элементов . У обоих также должен быть один и тот же родительский элемент.
Абзац на строке 5 выбирается, так как непосредственно следует после его родственного заголовка и у них один общий родительский элемент.
h2 + p
.
.
.
Этот абзац будет выбран
.
.
Пример соседних селекторов
input < display: none; >label, ul < border: 1px solid #cecfd5; border-radius: 6px; >label < color: #0087cc; cursor: pointer; display: inline-block; font-size: 18px; padding: 5px 9px; transition: all .15s ease; >label:hover < color: #ff7b29; >input:checked + label < box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); color: #9799a7; >nav < max-height: 0; overflow: hidden; transition: all .15s ease; >input:checked ~ nav < max-height: 500px; >ul < list-style: none; margin: 8px 0 0 0; padding: 0; width: 100px; >li < border-bottom: 1px solid #cecfd5; >li:last-child < border-bottom: 0; >a < color: #0087cc; display: block; padding: 6px 12px; text-decoration: none; >a:hover
Пример | Название | Описание |
---|---|---|
h2 ~ p | Общий родственный селектор | Выбирает элемент, который следует в любом месте после предыдущего элемента, и оба элемента имеют одного общего предка. |
h2 + p | Соседний селектор | Выбирает элемент, который следует непосредственно после предыдущего элемента, и оба элемента имеют одного общего предка. |
Селекторы атрибутов
Некоторые рассмотренные ранее типовые селекторы также могут быть определены как селекторы атрибутов, в котором элемент выбирается на основе значения class или id . Эти селекторы атрибутов class и id широко используются и довольно мощные, но это лишь начало. Другие селекторы атрибутов появились в последние годы, в частности, сделали большой скачок вперед вместе с CSS3. Теперь элементы могут быть выбраны на основе того, присутствует ли атрибут и какое значение он содержит.
Селектор наличия атрибута
Первый селектор атрибута определяет элемент на основе того, включен ли этот атрибут или нет, независимо от его фактического значения. Чтобы выбрать элемент основываясь на том, присутствует атрибут или нет, просто включите имя атрибута в квадратных скобках ([]) в селекторе. Квадратные скобки могут идти после любого селектора типа или класса, в зависимости от желаемого уровня специфичности.
a[target]
Селектор атрибута =
Для идентификации элемента с определённым и точно заданным значением может быть использован тот же селектор что и раньше, однако на этот раз внутри квадратных скобок после имени атрибута включают желаемое значение. Внутри квадратных скобок должно быть имя атрибута идущее после знака равно (=), где внутри кавычек и пишется желаемое значение атрибута.
a[href="http://google.com/"]
Селектор атрибута *=
Когда мы пытаемся найти элемент на основе части значения атрибута, но не точного совпадения, может быть использован символ звёздочки (*) в квадратных скобках селектора. Звёздочка должна идти сразу после имени атрибута, непосредственно перед знаком равенства. Это означает, что следующее за ним значение только должно появиться или содержаться в значении атрибута.
a[href*="login"]
Селектор атрибута ^=
В дополнение к выбору элемента на основе того, что значение атрибута содержит указанный текст, можно также выбрать элемент, основанный на том, с чего начинается значение атрибута. Использование символа циркумфлекса (^) в квадратных скобках селектора между именем атрибута и знаком равенства означает, что значение атрибута должно начинаться с указанного текста.
a[href^="https://"]
Селектор атрибута $=
Противоположностью предыдущего селектора является селектор атрибутов, где значение оканчивается определённым текстом. Вместо использования символа ^ применяется знак доллара ($) в квадратных скобках селектора между именем атрибута и знаком равенства. Использование знака доллара означает, что значение атрибута должно заканчиваться указанным текстом.
a[href$=".pdf"]
Селектор атрибута ~=
Иногда значения атрибутов могут быть расположены через пробел друг от друга, в которых только одно из слов должно подходить для создания выборки. В этом случае использование символа тильды (~) в квадратных скобках селектора между именем атрибута и знаком равенства означает значение атрибута разделённое пробелами, из которых одно слово точно соответствует указанному значению.
a[rel~="tag"]
Селектор атрибута |=
Когда значение атрибута разделено дефисом, а не пробелами, может быть использован символ вертикальной линии (|) в квадратных скобках селектора между именем атрибута и знаком равенства. Вертикальная линия означает, что значение атрибута может быть разделено дефисом, однако слова должны начинаться с указанного значения.
a[lang|="en"]
Пример селекторов атрибутов
ul < list-style: none; margin: 0; padding: 0; >a < background-position: 0 50%; background-repeat: no-repeat; color: #0087cc; padding-left: 22px; text-decoration: none; >a:hover < color: #ff7b29; >a[href$=".pdf"] < background-image: url("images/pdf.png"); >a[href$=".doc"] < background-image: url("images/doc.png"); >a[href$=".jpg"] < background-image: url("images/image.png"); >a[href$=".mp3"] < background-image: url("images/audio.png"); >a[href$=".mp4"] < background-image: url("images/video.png"); >
Пример | Название | Описание |
---|---|---|
a[target] | Селектор наличия атрибута | Выбирает элемент если данный атрибут присутствует. |
a[href=»http://google.com/»] | Селектор атрибута = | Выбирает элемент, если значение данного атрибута в точности соответствует указанному. |
a[href*=»login»] | Селектор атрибута *= | Выбирает элемент, если значение данного атрибута содержит по крайней мере один экземпляр указанного текста. |
a[href^=»https://»] | Селектор атрибута ^= | Выбирает элемент, если значение данного атрибута начинается с указанного текста. |
a[href$=».pdf»] | Селектор атрибута $= | Выбирает элемент, если значение данного атрибута заканчивается указанным текстом. |
a[rel~=»tag»] | Селектор атрибута ~= | Выбирает элемент, если значение данного атрибута разделено пробелами и точно совпадает с одним указанным словом. |
a[lang|=»en»] | Селектор атрибута |= | Выбирает элемент, если значение данного атрибута разделено дефисом и начинается с указанного слова. |
Псевдоклассы
Псевдоклассы похожи на обычные классы в HTML, однако они непосредственно не указаны в разметке, вместо этого они поселяются динамически как результат действий пользователя или структуры документа. Наиболее распространённый псевдокласс, и его вы, вероятно, видели раньше, это :hover. Обратите внимание, что этот псевдокласс начинается с двоеточия (:), как и все остальные псевдоклассы.
Псевдоклассы ссылок
Некоторые основные псевдоклассы включают в себя два псевдокласса, вращающихся вокруг ссылок. Это псевдоклассы :link и :visited и они определяют, что ссылка была или не была посещена. Чтобы задать стиль ссылки, которая ещё не была посещена, в игру вступает псевдокласс :link , а псевдокласс :visited задаёт стиль ссылок, которые пользователь уже посетил на основе их истории просмотра.
a:link a:visited
Псевдоклассы действия пользователя
К элементу могут динамически применяться основанные на действиях пользователей разные псевдоклассы, которые включают в себя :hover , :active и :focus . Псевдокласс :hover применяется к элементу, когда пользователь двигает курсор над элементом, наиболее часто это используется со ссылками. Псевдокласс :active применяется к элементу, когда пользователь приводит в действие элемент, например, при щелчке по нему. И, наконец, псевдокласс :focus применяется к элементу, когда пользователь сделал элемент точкой внимания страницы, часто с помощью клавишы Tab , переходя от одного элемента к другому.
a:hover a:active a:focus
Псевдоклассы состояния интерфейса
Подобно ссылкам существуют также некоторые псевдоклассы, связанные с состоянием элементов пользовательского интерфейса, в частности, внутри форм. Эти псевдоклассы включают в себя :enabled , :disabled , :checked и :indeterminate .
Псевдокласс :enabled выбирает поля, которые включены и доступны для использования, а псевдокласс :disabled выбирает поля, которые содержат привязанный к ним атрибут disabled . Многие браузеры по умолчанию затемняют такие заблокированные поля для информирования пользователей о том, что поле не доступно для взаимодействия, однако их стиль может быть настроен по желанию через псевдокласс :disabled .
input:enabled input:disabled
Последние два элемента состояния интерфейса, псевдоклассы :checked и :indeterminate вращаются вокруг флажков и переключателей. Псевдокласс :checked выбирает флажки или переключатели, которые, как вы можете ожидать, помечены. Когда ни один флажок или переключатель не помечен и не выбран, то он живёт в неопределённом состоянии, для которого может быть использован псевдокласс :indeterminate для нацеливания на подобные элементы.
input:checked input:indeterminate
Псевдоклассы структуры и положения
Несколько псевдоклассов относятся к структуре и положению на основе того, где элементы находятся в дереве документа. Эти псевдоклассы приходят в разных формах и размерах, каждый из которых обеспечивает свою собственную уникальную функцию. Некоторые псевдоклассы существуют уже дольше других, однако CSS3 принёс целый новый набор псевдоклассов в дополнение к существующим.
:first-child, :last-child и :only-child
Первые структурные псевдоклассы, которые вам скорее всего попадутся, это :first-child , :last-child и :only-child . Псевдокласс :first-child выберет элемент, если это первый ребёнок в родителе, в то время как псевдокласс :last-child выберет элемент, если он последний в родителе. Эти псевдоклассы идеально подходят для выбора первого или последнего элемента в списке и др. Кроме того, :only-child выберет элемент, если он является единственным элементом в родителе. В качестве альтернативы, псевдокласс :only-child может быть записан как :first-child:last-child , однако у :only-child ниже специфичность.
Здесь селектор li:first-child определяет первый пункт списка, в то время как li:last-child определяет последний пункт списка, таким образом, выбираются строки 2 и 10. Селектор div:only-child ищет , который является единственным ребёнком в родительском элементе, без каких-либо других родственных элементов. В этом случае выбирается строка 4, т. к. это единственный в данном пункте списка.
li:first-child li:last-child div:only-child
:first-of-type, :last-of-type и :only-of-type
Нахождение первого, последнего и единственного ребёнка у родителя очень полезно и часто только это и требуется. Однако иногда вы хотите выбрать только первого, последнего или единственного ребёнка определённого типа элемента. К примеру, вы желаете выбрать только первый или последний абзац внутри статьи или, возможно, только изображение в статье. К счастью, в этом помогают псевдоклассы :first-of-type , :last-of-type и :only-of-type .
Псевдокласс :first-of-type выберет первый элемент своего типа внутри родителя, в то время как псевдокласс :last-of-type выберет последний элемент этого типа внутри родителя. Псевдокласс :only-of-type выберет элемент, если он является единственным такого типа в родителе.
В приведённом ниже примере псевдоклассы p:first-of-type и p:last-of-type выберут, соответственно, первый и последний абзацы в статье, независимо от того, являются ли они на самом деле первыми или последними детьми в статье. Строки 3 и 6 выбраны этими селекторами. Селектор img:only-of-type определяет изображение в строке 5, как единственное изображение появляющееся в статье.
p:first-of-type p:last-of-type img:only-of-type
.
Этот абзац будет выбран
.
Этот абзац будет выбран
.
Наконец, есть несколько псевдоклассов структуры и положения, которые выбирают элементы, основанные на номере или алгебраическом выражении. Эти псевдоклассы включают в себя :nth-child(n) , :nth-last-child(n) , :nth-of-type(n) и :nth-last-of-type(n) . Все эти уникальные псевдоклассы начинаются с nth и принимают число или выражение внутри круглых скобок, которое обозначается символом n.
Число или выражение, которое находится в круглых скобках точно определяет, какой элемент или элементы, должны быть выбраны. Использование конкретного числа вычислит отдельный элемент с начала или с конца дерева документа, а затем выберет его. Использование выражения вычислит множество элементов с начала или с конца дерева документа и выберет их группу или повторения.
Использование чисел и выражений в псевдоклассах
Как уже упоминалось, использование конкретного числа в псевдоклассе вычисляет с начала или с конца дерева документа и выбирает один соответствующий элемент. Например, селектор li:nth-child(4) выберет четвёртый пункт в списке. Подсчёт начинается с первого пункта списка и увеличивается на единицу для каждого пункта списка, пока, наконец, не обнаружит четвёртый пункт и выберет его. При указании конкретного числа оно должно быть положительным.
Выражения для псевдоклассов бывают в формате an, an+b, an-b, n+b, -n+b и -an+b. То же самое выражение может быть переведено и читаться как (a×n)±b. Переменная a обозначает множитель, с учётом которого будут вычисляться элементы, в то время как переменная b обозначает, откуда будет начинаться или происходить отсчёт.
Например, селектор li:nth-child(3n) будет определять каждый третий элемент пункта списка. Использование этого выражения соответствует 3×0, 3×1, 3×2 и так далее. Как вы можете видеть, результаты этого выражения выбирают третий, шестой и каждый элемент кратный трём.
Кроме того, в качестве значений могут быть использованы ключевые слова odd и even . Как и следовало ожидать, они будут выбирать, соответственно, нечётные или чётные элементы. Если ключевые слова не привлекают, то выражение 2n+1 выберет все нечётные элементы, а выражение 2n выберет все чётные элементы.
Селектор li:nth-child(4n+7) определит каждый четвёртый пункт списка, начиная с седьмого пункта. Опять же, использование этого выражения эквивалентно (4×0)+7, (4×1)+7, (4×2)+7 и так далее. Результаты этого выражения приведут к выбору седьмого, одиннадцатого, пятнадцатого и каждого четвёртого элемента.
При использовании аргумента n без числа впереди, переменная a расценивается как равная 1. Селектор li:nth-child(n+5) выберет каждый пункт списка, начиная с пятого, оставив первые четыре пункта списка не выбранными. В выражении это разбирается как (1×0)+5, (1×1)+5, (1×2)+5 и так далее.
Для создания более сложных вещей могут быть задействованы отрицательные числа. Например, селектор li:nth-child(6n-4) будет отсчитывать каждый шестой пункт списка, начиная с -4, выбрав второй, восьмой, четырнадцатый пункты списка и так далее. Тот же селектор li:nth-child(6n-4) также может быть записан как li:nth-child(6n+2) , без использования отрицательной переменной b.
Отрицательная переменная или отрицательный аргумент n должен сопровождаться положительной переменной b. Когда аргументу n предшествует отрицательная переменная a, то переменная b определяет, насколько высоко будет достигнут отсчёт. Например, селектор li:nth-child(-3n+12) выберет каждый третий пункт списка в первых двенадцати пунктах. Селектор li:nth-child(-n+9) выберет первые девять пунктов списка, так как переменная a без заявленного числа по умолчанию равна -1.
:nth-child(n) и :nth-last-child(n)
При общем понимании того, как работают числа и выражения в псевдоклассах, давайте взглянем на полезные псевдоклассы, где эти числа и выражения могут использоваться, первыми из которых являются :nth-child(n) и :nth-last-child(n) . Эти псевдоклассы работают похоже на :first-child и :last-child , в том смысле что они рассматривают и считают все элементы в родителе и выбирают только определённый элемент. :nth-child(n) работает с начала дерева документа, а :nth-last-child(n) работает с конца дерева документа.
Используя псевдокласс :nth-child(n) давайте взглянем на селектор li:nth-child(3n) . Он определяет каждый третий пункт списка, таким образом, будут выбраны строки 4 и 7.
li:nth-child(3n)
Использование другого выражения в псевдоклассе :nth-child(n) даст другую выборку. Селектор li:nth-child(2n+3) , к примеру, определит каждый второй пункт списка, начиная с третьего. В результате будут выбраны пункты в строках 4 и 6.
li:nth-child(2n+3)
Очередное изменение выражения, на этот раз с отрицательным значением, даст новый выбор. Здесь селектор li:nth-child(-n+4) определяет четыре верхних пункта списка, оставляя остальные пункты не выделенными, таким образом будут выбраны строки со 1 по 4.
li:nth-child(-n+4)
- Этот пункт будет выбран
- Этот пункт будет выбран
- Этот пункт будет выбран
- Этот пункт будет выбран
- .
- .
Добавление отрицательного числа перед аргументом n снова изменяет выбор. Здесь селектор li:nth-child(-2n+5) определяет каждый второй пункт списка из первых пяти пунктов, таким образом, будут выбраны пункты в строках 2, 4 и 6.
li:nth-child(-2n+5)
Изменение псевдокласса :nth-child(n) на :nth-last-child(n) переключает направление счёта, теперь подсчёт начинается с конца дерева документа. Селектор li:nth-last-child(3n+2) , к примеру, определяет каждый третий пункт списка, начиная со второго по последний, двигаясь по направлению к началу списка. Здесь выбраны пункты списка в строках 3 и 6.
li:nth-last-child(3n+2)
:nth-of-type(n) и :nth-last-of-type(n)
Псевдоклассы :nth-of-type(n) и :nth-last-of-type(n) очень похожи на :nth-child(n) и :nth-last-child(n) , однако вместо того чтобы считать каждый элемент внутри родителя псевдоклассы :nth-of-type(n) и :nth-last-of-type(n) учитывают только элементы своего собственного типа. Например, при подсчете абзацев в статье, псевдоклассы :nth-of-type(n) и :nth-last-of-type(n) пропустят любые заголовки, или разные элементы, которые не являются абзацами, в то время как :nth-child(n) и :nth-last-child(n) будут считать каждый элемент, независимо от его типа, выбирая только те из них, которые соответствуют элементу в указанном селекторе. Кроме того, все те же возможные выражения, применяемые в :nth-child(n) и :nth-last-child(n) также доступны в псевдоклассах :nth-of-type(n) и :nth-last-of-type(n) .
Используя псевдокласс :nth-of-type(n) в селекторе p:nth-of-type(3n) мы можем определить каждый третий абзац в родителе, независимо от других родственных элементов внутри родителя. Здесь выбираются абзацы в строках 5 и 9.
p:nth-of-type(3n)
.
.
.
Этот абзац будет выбран
.
.
.
Этот абзац будет выбран
Как и с псевдоклассами :nth-child(n) и :nth-last-child(n) , основное различие между :nth-of-type(n) и :nth-last-of-type(n) состоит в том, что :nth-of-type(n) считает элементы с начала дерева документа, а :nth-last-of-type(n) считает элементы с конца дерева документа.
Используя псевдокласс :nth-last-of-type(n) мы можем записать селектор p:nth-last-of-type(2n+1) , который определяет каждый второй абзац с конца родительского элемента, начиная с последнего абзаца. Здесь выбираются абзацы в строках 4, 7 и 9.
p:nth-last-of-type(2n+1)
.
.
Этот абзац будет выбран
.
.
Этот абзац будет выбран
.
Этот абзац будет выбран
Псевдокласс :target
Псевдокласс :target используется для стилизации элементов, когда значение атрибута id совпадает с указателем фрагмента URI. Такой фрагмент в URI распознаётся с помощью символа решётки (#) и того, что непосредственно следует за ним. Адрес http://example.com/index.html#hello включает в себя указатель hello. Когда он совпадает со значением атрибута id у элемента на странице, к примеру, , то этот элемент может быть идентифицирован и стилизован с помощью псевдокласса :target . Указатель фрагмента наиболее часто встречаются при использовании на странице ссылки или ссылки на другую часть той же страницы.
Взгляните на приведённый ниже код. Если пользователь хотел бы посетить страницу с указателем фрагмента #hello, то раздел с тем же значением атрибута id будет стилизован соответствующим образом с помощью псевдокласса :target . Если указатель фрагмента URI изменился и совпадает со значением атрибута id другого раздела, то новый раздел может быть стилизован с помощью того же селектора и псевдокласса, что и ранее.
section:target
Псевдокласс :empty позволяет выбрать элементы, которые не содержат детей или текст. Комментарии, инструкции по обработке и пустой текст не считаются детьми и не рассматриваются как таковые.
Использование псевдокласса div:empty определит без детей или текста. Ниже выбраны в строках 2 и 3, поскольку они совершенно пустые. Даже несмотря на то, что второй содержит комментарий, он не считается ребёнком, таким образом оставляя пустым. Первый содержит текст, третий содержит один пробел, а последний содержит дочерний элемент , таким образом, они все исключены и не выбраны.
div:empty
Псевдокласс :not
Псевдокласс :not(x) принимает аргумент и отфильтровывает выборку, которая будет сделана. Селектор p:not(.intro) использует псевдокласс :not для определения каждого абзаца без класса intro . Элемент абзаца определяется в начале селектора, затем следует псевдокласс :not(x) . Внутри скобок идёт селектор отрицания, в данном случае класс intro .
Ниже оба селектора div:not(.awesome) и :not(div) используют псевдокласс :not(x) . Селектор div:not(.awesome) определяет любой без класса awesome , в то время как селектор :not(div) определяет элемент, который не является . В результате выбирается в строке 1, а также два раздела в строках 3 и 4. Единственный не выбранный элемент это с классом awesome , так как он выходит за пределы двух псевдоклассов.
div:not(.awesome) :not(div)
Этот div будет выбран
Пример с псевдоклассами
Номер Игрок Позиция Рост Вес 8 Марко Белинелли G 6-5 195 5 Карлос Бузер F 6-9 266 .
table < border-collapse: separate; border-spacing: 0; width: 100%; >th, td < padding: 6px 15px; >th < background: #42444e; color: #fff; text-align: left; >tr:first-child th:first-child < border-top-left-radius: 6px; >tr:first-child th:last-child < border-top-right-radius: 6px; >td < border-right: 1px solid #c6c9cc; border-bottom: 1px solid #c6c9cc; >td:first-child < border-left: 1px solid #c6c9cc; >tr:nth-child(even) td < background: #eaeaed; >tr:last-child td:first-child < border-bottom-left-radius: 6px; >tr:last-child td:last-child
Обзор псевдоклассов
Пример
Название
Описание
a:link
Псевдокласс ссылок
Выбирает ссылки, которые не были просмотрены пользователем.
a:visited
Псевдокласс ссылок
Выбирает ссылки, которые были посещены пользователем.
a:hover
Псевдокласс действия
Выбирает элемент, когда пользователь наводит на него курсор.
a:active
Псевдокласс действия
Выбирает элемент, когда пользователь активирует его.
a:focus
Псевдокласс действия
Выбирает элемент, когда пользователь сделал его точкой внимания.
input:enabled
Псевдокласс состояния
Выбирает элемент в доступном состоянии.
input:disabled
Псевдокласс состояния
Выбирает элемент в отключенном состоянии, посредством атрибута disabled .
input:checked
Псевдокласс состояния
Выбирает флажок или переключатель, который был помечен.
input:indeterminate
Псевдокласс состояния
Выбирает флажок или переключатель, который не был помечен или не помечен, оставляя его в неопределённом состоянии.
li:first-child
Структурный псевдокласс
Выбирает первый элемент в родителе.
li:last-child
Структурный псевдокласс
Выбирает последний элемент в родителе.
div:only-child
Структурный псевдокласс
Выбирает единственный элемент в родителе.
p:first-of-type
Структурный псевдокласс
Выбирает первый элемент своего типа в родителе.
p:last-of-type
Структурный псевдокласс
Выбирает последний элемент своего типа в родителе.
img:only-of-type
Структурный псевдокласс
Выбирает единственный элемент своего типа в родителе.
li:nth-child(2n+3)
Структурный псевдокласс
Выбирает элемент, который соответствует заданному числу или выражению, считая все элементы с начала дерева документа.
li:nth-last-child(3n+2)
Структурный псевдокласс
Выбирает элемент, который соответствует заданному числу или выражению, считая все элементы с конца дерева документа.
p:nth-of-type(3n)
Структурный псевдокласс
Выбирает элемент, который соответствует заданному числу или выражению, считая только элементы этого типа с начала дерева документа.
p:nth-last-of-type(2n+1)
Структурный псевдокласс
Выбирает элемент, который соответствует заданному числу или выражению, считая только элементы этого типа с конца дерева документа.
section:target
Псевдокласс :target
Выбирает элемент, у которого значение атрибута id совпадает с указателем фрагмента URI.
div:empty
Псевдокласс :empty
Выбирает элемент, который не содержит каких-либо детей или текста.
div:not(.awesome)
Псевдокласс :not
Выбирает элемент не представленный заявленным аргументом.
Псевдоэлементы
Псевдоэлементы — это динамические элементы, которые не существуют в дереве документа и при использовании с селекторами эти псевдоэлементы дают уникальные части страницы, которые можно стилизовать. Один важный момент следует отметить — только один псевдоэлемент может быть использован в селекторе в определённое время.
Текстовые псевдоэлементы
Первыми реализованными псевдоэлементами были текстовые псевдоэлементы :first-letter и :first-line . Псевдоэлемент :first-letter определяет первую букву текста внутри элемента, в то время как :first-line определяет первую строку текста внутри элемента.
В демонстрации ниже первая буква абзаца с классом alpha задана большим размером шрифта и оранжевым цветом, так же как и первая строка абзаца с классом bravo . Эта выборка сделана с помощью текстовых псевдоклассов :first-letter и :first-line , соответственно.
.alpha:first-letter, .bravo:first-line
Демонстрация текстовых псевдоэлементов
Псевдоэлементы, генерируемые содержимое
Псевдоэлементы :before и :after создают новые строчные псевдоэлементы только внутри выбранного элемента. Чаще всего эти псевдоэлементы используются в сочетании со свойством content , чтобы добавить незначительную информацию на страницу, однако, это не всегда так. Дополнительное применение этих псевдоэлементов может добавить компоненты пользовательского интерфейса на страницу без необходимости загромождать документ несемантическими элементами.
Псевдоэлемент :before создаёт псевдоэлемент до или впереди выбранного элемента, в то время как :after создаёт псевдоэлемент после или позади выбранного элемента. Эти псевдоэлементы выводятся вложенными внутри выбранного элемента, а не за его пределами. Ниже псевдоэлемент :after используется для отображения значения атрибута href у ссылок в круглых скобках после самой ссылки. Такая информация полезна, но, в конечном итоге, не всякий браузер поддерживает эти псевдоэлементы.
a:after
Искать в Интернете Изучите, как создать сайт
Демонстрация псевдоэлементов, генерируемых содержимое
Псевдоэлемент ::selection
Псевдоэлемент ::selection определяет выделенную пользователем часть документа. Выделение затем может быть стилизовано, но только с помощью свойств color , background , background-color и text-shadow . Стоит отметить, что свойство background-image игнорируется. В то же время сокращённое свойство background может быть использовано для добавления цвета, но любые изображения будут игнорироваться.
Двоеточие (:) и двойное двоеточие (::)
Псевдоэлемент ::selection был добавлен в CSS3 в попытке отделить псевдоклассы от псевдоэлементов с помощью двойного двоеточия, которое было добавлено к псевдоэлементам. К счастью, большинство браузеров будут поддерживать оба значения, одиночные или двойные двоеточия у псевдоэлементов, однако псевдоэлемент ::selection всегда должен начинаться с двойного двоеточия.
При выделении любого текста в демонстрации ниже фон становится оранжевым благодаря псевдоэлементу ::selection . Также обратите внимание на ::-moz-selection . Префикс от Mozilla был добавлен, чтобы обеспечить лучшую поддержку для всех браузеров.
::-moz-selection < background: #ff7b29; >::selection
Демонстрация псевдоэлементов
.arrow < background: #2db34a; color: #fff; display: inline-block; height: 30px; line-height: 30px; padding: 0 12px; position: relative; text-decoration: none; >.arrow:before, .arrow:after < content: ""; height: 0; position: absolute; width: 0; >.arrow:before < border-bottom: 15px solid #2db34a; border-left: 15px solid transparent; border-top: 15px solid #2db34a; left: -15px; >.arrow:after < border-bottom: 15px solid transparent; border-left: 15px solid #2db34a; border-top: 15px solid transparent; right: -15px; >.arrow:hover < background: #ff7b29; >.arrow:hover:before < border-bottom: 15px solid #ff7b29; border-top: 15px solid #ff7b29; >.arrow:hover:after
Обзор псевдоэлементов
Пример
Название
Описание
.alpha:first-letter
Текстовый псевдоэлемент
Выбирает первую букву текста внутри элемента.
.bravo:first-line
Текстовый псевдоэлемент
Выбирает первую строку текста внутри элемента.
div:before
Генерируемое содержимое
Создаёт псевдоэлемент внутри выбранного элемента в его начале.
a:after
Генерируемое содержимое
Создаёт псевдоэлемент внутри выбранного элемента в его конце.
::selection
Псевдоэлемент ::selection
Выбирает часть документа, который был выделен с помощью действий пользователя.
Поддержка селекторов в браузерах
В то время как эти селекторы предлагают разные возможности и способности делать некоторые действительно удивительные вещи с помощью CSS, они иногда страдают от плохой поддержки браузеров. Перед тем, как делать что-либо слишком критичное, проверьте селекторы которые вы желаете использовать в наиболее популярных браузерах, а затем сделайте вывод о том, подходят они вам или нет.
CSS3.info предлагает инструмент CSS3 Selectors Test, который будет информировать вас о том, какие селекторы поддерживаются браузером. Также неплохой идеей будет проверить поддержку браузера непосредственно в нём.
Кроме того, Selectivizr, утилита JavaScript, обеспечивает великолепную поддержку этих селекторов в Internet Explorer 6-8. Больше поддержки при необходимости может также предложить jQuery selectors.
Скорость и производительность селекторов
Важно обратить внимание на скорость и производительность селекторов, так как использование слишком большого количества сложных селекторов может замедлить отображение страницы. Будьте внимательны и когда селектор начинает выглядеть немного странно, подумайте о том чтобы пересмотреть его и найти лучшее решение.
Ресурсы и ссылки
- The 30 CSS Selectors you Must Memorize на Nettuts+
- Child and Sibling Selectors на CSS-Tricks
- CSS3 Substring Matching Attribute Selectors на CSS3.info
- How To Use CSS3 Pseudo-Classes на Smashing Magazine
- Understanding :nth-child Pseudo-class Expressions на SitePoint
- Taming Advanced CSS Selectors на Smashing Magazine
См. также
- content
- Псевдоэлемент ::after
- Псевдоэлемент ::before