Другие авторы уже объяснили, почему псевдокласс :focus
недостаточен, но, наконец, существует стандартное решение на основе CSS.
Селекторы CSS уровня 4 определяют новый псевдокласс:
От MDN :
CSS-псевдокласс :focus-within
соответствует любому элементу, который соответствует псевдоклассу :focus
, или имеет потомок, которому соответствует псевдокласс :focus
.(Это включает потомков в теневых деревьях.)
Так что теперь с псевдоклассом :focus-within
- стилизация внешнего div при нажатии на textarea
становится тривиальной.
.box:focus-within {
border: thin solid black;
}
.box {
width: 300px;
height: 300px;
border: 5px dashed red;
}
.box:focus-within {
border: 5px solid green;
}
<p>The outer box border changes when the textarea gets focus.</p>
<div class="box">
<textarea rows="10" cols="25"></textarea>
</div>
Демонстрация Codepen
Примечание: БраузерПоддержка : Chrome (60+), Firefox и Safari