Growing link underline, in Tailwind CSS
Katie
Posted on June 16, 2021
Today I learned that Learn 11ty From Scratch opened up for free. Searching for the news, I found Ben Myers’ article “I Finally Understand Eleventy’s Data Cascade,” which reminded me how much I like some of his styling, including links whose underlines are chunky and grow to be full backgrounds when you hover or focus on them.
I’ve been doing a lot of Tailwind lately on landing-page-type sites so I can rip off other peoples’ components, but I hadn’t found a link style I was satisfied with, so I ported Ben’s work to Tailwind. See it on Tailwind Play or keep reading to just see the source code here.
You need to use a gradient from a color to itself so that your background is a “background image,” not a “background color.”
<p>I am some text, and <a class="bg-gradient-to-r from-yellow-200 to-yellow-200 bg-growing-underline" href="https://example.com">I am a link</a>, and that's that.</p>
The rest of the party tricks, you can wrap up by making yourself a new Tailwind class in your tailwind.css
file (or whatever you call it):
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer utilities {
.bg-size-2em {
background-size: 100% 0.2em;
}
.bg-hundred {
background-size: 100% 100%;
}
.bg-near-bottom {
background-position: 0 88%;
}
.bg-growing-underline {
@apply bg-no-repeat bg-near-bottom bg-size-2em transition-all duration-200 hover:bg-hundred focus:bg-hundred;
}
}
Alternatively, if you feel cleaner not exposing intermediate concepts like bg-size-2em
, bg-hundred
, and bg-near-bottom
to yourself for reuse elsewhere in your HTML (see on Tailwind Play):
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer utilities {
.bg-growing-underline {
background-size: 100% 0.2em;
background-position: 0 88%;
@apply bg-no-repeat transition-all duration-200;
}
.bg-growing-underline:hover {
background-size: 100% 100%;
}
.bg-growing-underline:focus {
background-size: 100% 100%;
}
}
Note that you can’t use bg-cover
for the hover/focus, even though it looks the same as background-size: 100% 100%
, because the smooth background size transition only works with an explicit size.
Update: Ben says he grabbed the code from Morgan Wesemann.
Posted on June 16, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.