В прошлом году произошел взрыв новых функций CSS, которые произвели революцию в том, как мы пишем CSS. Независимо от того, где вы находитесь в своем путешествии по веб-разработке, вам будет что узнать. Для простого языка стилей он меняется довольно быстро!
1. Селектор :has()
Новый селектор работает во всех браузерах, кроме Firefox, но он поддерживается при включенном флаге, поэтому мы знаем, что он появится.
:has()
Селекторы позволяют нам стилизовать родительские элементы на основе их дочерних элементов. Например, мы можем сделать это:
figure { background: white; } figure:has(img) { background: grey; }
Меняет фон на серый, если figure
внутри элемента . img
Конечно, этому есть и более практическое применение, например:
form:has(input:invalid) { /*there an invalid input*/ background: red; } form:not(:has(input:invalid)) { /*all inputs valid*/ background: green }
Это :not(:has(input:invalid))
круто, но немного сбивает с толку. По сути, если в форме нет недопустимых input
, она содержит только действительные inputs
, так что это действительная форма 👍.
2. Псевдокласс :focus-within
Возможно, вы уже некоторое время используете :focus
, но :focus
работает только с текущим элементом. Что, если вы хотите знать, сфокусирован ли пользователь на дочернем элементе? iframe
Это полезно, если у вас есть подссылка на странице или в меню. Вы можете использовать его следующим образом:
div:focus-within { background: red; }
Становится красным, если пользователь следит за div
что-либо в . div
Это очень удобно! Вы даже можете сделать то же самое в нашем предыдущем примере!
form:has(input:invalid):focus-within { background: red; } form:not(:has(input:invalid)):focus-within { background: green }
Таким образом, форма не станет красной или зеленой, пока пользователь не взаимодействует с ней. Пустая форма технически является недействительной формой 😱
3. Каскадный слой
Этот немного уникален, и хотя я никогда не видел, чтобы он использовался на практике, он определенно есть. Начните с этого HTML:
<div class="box"> <p>Hello, world!</p> </div>