Advanced Tailwind: Multiple hover interactions
Jul 1st, 2024
|
3 minutes mins to read
|
Share article
<div
class="bg-white has-[.blue:hover]:bg-blue-500 has-[#red:hover]:bg-red-500 has-[[data-color='green']:hover]:bg-green-500"
>
<button class="blue">Blue</button>
<button id="red">Red</button>
<button data-color="green">Green</button>
</div>
Utilizing the has
Utility in Tailwind
The has
utility in Tailwind is a powerful tool that allows you to apply styles to a parent element based on the state of its child elements.
How the has
Utility Works
The has
utility targets the parent element and changes its style when a specified condition is met in any of its child elements. This is particularly useful for creating effects where the state of a child element (like hovering focusing, or being active) influences the parent element.
Combining has
with Class and State Selectors
In our code example, we use the has
utility to change the background color of a parent div based on the hover state of specific child buttons:
In this example:
<div class="has-[.red:hover]:bg-red-500">
<button class="red">
</div>
Changes the parent div's backgrounnd based on the state of a child, selected by class. But, the selector for the child can be as specific as needed.
Example:
<div
class="has-[button[data-color='green']:hover]:bg-green-500"
>
<button data-color="green">Green</button>
</div>
In this case the background changed sames as before, but targeting the state of a button with data attribute data-color="green"
.