CSS :focus-within
Publikováno: 25.6.2019
Using :hover to display additional information or elements is a very useful technique but a big drawback to using the hover pseudo-class is that they are usually not accessibility-friendly. Not everyone uses a mouse and some users have visual impairments, so they rely on screen readers or the keyboard — two functionality that don’t technically […]
The post CSS :focus-within appeared first on David Walsh Blog.
Using :hover to display additional information or elements is a very useful technique but a big drawback to using the hover pseudo-class is that they are usually not accessibility-friendly. Not everyone uses a mouse and some users have visual impairments, so they rely on screen readers or the keyboard — two functionality that don’t technically hover.
Luckily the CSS spec gives us a gift to pair with :hover: :focus-within. With :focus-within developers can modify styles of elements when an element or its parent has keyboard focus!
Consider the following HTML template with default CSS styling:
<ul id="sports">
<li>
<label>
<input type="checkbox" name="sports[]">
Soccer
<button class="remove">Remove</button>
</label>
<!-- ... -->
</li>
</ul>
#sports .remove {
display: none;
}
With the code above, hovering over a list item would show the “remove” button. That’s great for mouse users but totally useless for keyboard users. Let’s fix that using :focus-within:
#sports .remove {
display: none;
}
#sports li:focus-within .remove {
display: inline-block;
}
Once focus hits the checkbox, the focus is technically within the list item and thus we can employ :focus-within to show the “remove” button.
Accessibility is something that gets considered last but shouldn’t be an afterthought; in a way, :focus-within is a useful ally even when accessibility was an afterthought. Even when considering accessibility up front, :focus-within should be in every developer’s toolbox!
The post CSS :focus-within appeared first on David Walsh Blog.