Малоизвестные псевдоклассы
В продолжение последней статьи по теме псевдоэлементов и псевдоклассов в CSS, мы рассмотрим редко используемые, но очень полезные псевдоклассы. Ты, скорее всего, слышал про них, но очень мало разработчиков добавили их в свой инструментарий. Подписывайся, чтобы не пропустить новые интересные статьи.
:required
Псевдокласс :required позволяет найти любые input на странице, которые имеют атрибут "required". Это может быть полезно, когда поле, которое перед отправкой формы должно быть заполнено, нам необходимо стилизовать. Как всегда - посмотрим на примере:
// style.css
input:required {
border-color: red;
line-height: 30px;
}// index.html <input value="text1" id="text1" /> <input value="text2" id="text2" required/> <input value="text3" id="text3" /> <input value="text4" id="text4" required/> <input value="text5" id="text5" />
:optional
Псевдокласс с обратным действием для :required - позволяет стилизовать необязательные к заполнению поля. В дополнение к предыдущему примеру в файле style.css допишем следующее:
input:optional {
border-color: blue;
border-radius: 5px;
line-height: 50px;
}Лично я за свою карьеру разработчика встречал кейсы, когда мне бы это понадобилось, от силы пару раз, но тем не менее, знать про такую возможность должен каждый хороший разработчик.
:only-of-type
Достаточно интересный псевдокласс. Сходу даже тяжело придумать реальную ситуацию, когда бы он мог пригодиться. Данный селектор позволяет выбрать все элементы которые являются единственными потомками своего родителя. В данном случае, проще показать, чем рассказать:
// index.html <div class="container"> <p>Я - текст №1</p> <p>Я - текст №2</p> <b>Я - единственный жирный текст</b> <p>Я - текст №3</p> <p>Я - текст №4</p> </div>
// style.css
p {
color: blue;
}
.container:only-of-type {
color: red;
}В данном случае, тэг <b> является единственным потомком данного типа у .container, поэтому к нему применяется правило. Стоит заметить, что если внутри контейнера мы добавим, к примеру, один единственный тэг <span> - то его к нему так же применится данное правило.
:target
Очень классная штука, лично пользовался ей много раз. Скорее всего, ты видел, как при скроллинге на якорь на странице, к блоку, на котором установлен якорь применяется анимация лёгкой подсветки. Покажу тебе такой кейс, и, конечно, оставлю код:
// style.css
.container:target {
animation: 1s ease changeColor;
}
@keyframes changeColor {
from {
background: blue;
}
to {
background: red;
}
}// index.html
<div class="container">
<a href="#targetElem">
<button> Кликни на меня </button>
</a>
</div>
<div class="container"></div>
<div class="container"></div>
<div class="container" id="targetElem">
Посмотри, как я меняю цвет, когда ты нажал на кнопку
</div>
<div class="container"></div>В данном кейсе, селектор ":target" срабатывает, когда в URL появляется хэш-якорь "#targetElem". Как только это происходит - запускается анимация смены цвета фона. Ты можешь поиграть со стилями, добавить более приятные цвета, плавный скролл и - вуаля - получается крутой визуальный эффект!
Так же, помимо визуальных эффектов, можно использовать свойство "display", для того, чтобы показывать элемент только тогда, когда пользователь явно к нему перешел, к примеру, в популярном на лендингах блоке "Вопрос-Ответ".
:is()
И последний на сегодня псевдокласс, который позволяет оптимизировать CSS-код, сделать его более читабельным и минимизированным. Данный селектор является функцией, которая принимает как аргумент список других селекторов, и применяет правило к любому из них, который можно выбрать в данный момент.
Применяется, в основном, для оптимизации.
.container0 p:hover {
color: white;
}
.container1 p:hover {
color: white;
}
.container2 p:hover {
color: white;
}:is(.container0, .container1, .container2) p:hover {
color: white;
}Псевдоклассы в этой статье - лишь малая часть от всех, которые существуют. Списки всех доступных псевдоклассов можно найти в открытой документации по CSS, которая так же досутпна на русском языке.
Надеюсь, ты возьмешь на вооружение данные возможности, подпишешься и будешь с интересом читать новые статьи от меня!