2023-03-19 12:40:45
#объяснение дня
Вы бы так на обычные посты реагировали, котаны и котанессы :) Более 70 реакций!
Ну что же, давайте разбираться, в чём же секрет. Каким же образом с помощью псевдокласса :has можно сымитировать обращение к предыдущему элементу.
Значащий код:
.element:has(+ .element:hover).
Давайте по пунктам. Плюс — "+" — это селектор соседнего элемента, вниз по DOM на одном уровне. Важно понимать, что только одного, следующего.
Псевдокласс :has же в свою очередь выделит элемент, в котором присутствуют элементы, подпадающие под селектор в скобках. То есть, если есть структура:
link
link
...то селектор .element:has(a:hover) выделит тот параграф, в котором ты навёл мышкой на ссылку. Или, например, можно подсветить форму, в которой есть обязательный, но не выделенный чекбокс: https://codepen.io/alinaki/pen/bGxjOgm
В общем, здесь всё просто и понятно, но что случится, если объединить две эти сущности?
Вернёмся к значащему коду:
.element:has(+ .element:hover).
Выглядит как бред, ведь оба элемента на одном уровне, ну, по условию плюса. И никакой :has там не применим, одно в другое не входит!
Не-не, не торопись. :has не имеет отношения к DOM, он не значит "содержит в себе".
Псевдокласс :has это часть CSSOM, объектной модели CSS и означает "имеется ли нужный селектор в пространстве тех, которые вообще можно вокруг этого элемента написать".
В данном случае это значит, будет ли иметь хоть какое-то воздействие и смысл селектор + a.hover, или нет.
Грубо говоря, у каждого элемента есть своё "облако" удовлетворяющих условий, браузер ими и оперирует.
Вот и получается следующая картина: https://codepen.io/alinaki/pen/mdGjaLL?editors=1100
Ну и вариант повеселее: https://codepen.io/jh3y/pen/abGPKGO
Мыслите шире, котаны и котанессы :)
Ну и статья в помощь: https://webkit.org/blog/13096/css-has-pseudo-class/
#css #has
851 viewsedited 09:40