All Posts

How to control font weight in Tailwind CSS

Font weight is one of those things you probably adjust all the time without thinking much about it. Making headings bolder. Lightening up some secondary text. It's part of creating visual hierarchy and guiding your users through content.

The great thing about Tailwind CSS is how simple it makes this. You get nine ready-to-use font weight utilities that cover pretty much every weight you'll ever need, from super thin to heavy black text. No more remembering numeric values or writing custom CSS classes.

I've been working with Tailwind for years and I still appreciate how quick it is to just add font-bold or font-light to an element. Let me show you exactly how these utilities work and how you can use them to make your typography stand out.

The nine font weight utilities

Tailwind gives you nine built-in classes for controlling font weight. Each one maps to a specific numeric value, just like in regular CSS.

Here's the complete list:

Class CSS Value When to Use It
font-thin 100 Very delicate text, large headings that need subtlety
font-extralight 200 Light decorative elements, oversized display text
font-light 300 Subheadings, captions, secondary content
font-normal 400 Body text, default reading content
font-medium 500 Slight emphasis without going bold
font-semibold 600 Subheadings that need more presence
font-bold 700 Headings, call-to-action text, important info
font-extrabold 800 Hero headings, major section titles
font-black 900 Maximum impact, display typography

Let me show you how these look in action:

```html

This is font-thin (100)

This is font-extralight (200)

This is font-light (300)

This is font-normal (400)

This is font-medium (500)

This is font-semibold (600)

This is font-bold (700)

This is font-extrabold (800)

This is font-black (900)

```

You can see the progression clearly. The difference between each weight creates that visual hierarchy I mentioned earlier.

One thing to keep in mind though - not every font includes all nine weights. If you're using a custom font that only has regular and bold, classes like font-thin or font-black might not render differently. The browser will do its best to fake the weight but it won't look as good as a font that actually includes those weights.

Here's a practical example showing how you might use different weights in a real card component:

```html
Featured

Pro Membership Plan

Get access to all premium features and priority support for your team.

$49 /month
```

See how each element uses a different weight to create clear distinction? The badge is semibold, the heading is bold, body text stays normal, the price goes black for impact, and the lighter "per month" text provides balance. That's the power of having all these options at your fingertips.

Going beyond the defaults with arbitrary values

Sometimes the nine standard weights aren't enough. Maybe you're working with a variable font that supports any weight from 100 to 1000, or you need a specific weight that falls between the defaults.

That's where Tailwind's arbitrary value syntax comes in handy.

You can use font-[value] to set any weight you want. Just put the numeric value in square brackets and Tailwind will generate the CSS for you on the fly.

```html

Custom weight of 350

Custom weight of 450

Custom weight of 550

Custom weight of 750

Custom weight of 950

```

This is especially useful when you're working with variable fonts. These modern fonts can smoothly transition between any weight value, giving you way more control than traditional fonts.

You can also use CSS variables with the syntax font-(<custom-property>). Tailwind will automatically wrap it in the var() function for you:

```html

Uses CSS variable --heading-weight

Uses CSS variable --body-weight

```

This approach is perfect for design systems where you want to define weights once in CSS variables and reference them throughout your components. Change the variable value in one place and it updates everywhere.

Making weights responsive with breakpoints

One of the coolest things about Tailwind is how easy it is to adjust font weights at different screen sizes. Just add a breakpoint prefix and you're done.

The pattern is simple: {breakpoint}:font-{weight}.

This comes in handy all the time. Maybe you want bolder headings on desktop where there's more space, or lighter text on mobile to improve readability on small screens.

```html

Responsive Heading Weight

This heading is normal weight on mobile, bold on tablets, and black on desktop screens.

Feature Highlight

Notice how the heading weight increases as the viewport gets larger, creating stronger visual hierarchy on bigger screens.

```

The responsive approach works great for mobile-first design. Start with lighter weights for small screens where space is limited, then progressively add more weight as screens get bigger.

Here's a real-world example of a hero section that adapts its typography:

```html

Build Faster with Tailwind

Create beautiful, responsive interfaces without leaving your HTML. No more context switching between files.

```

See how everything scales up together? The heading gets progressively bolder, the description text gains more weight for better readability, and even the button becomes more prominent on larger screens. It all works together to create a cohesive experience across devices.

Adding interactivity with hover and focus states

Font weight isn't just for static text. You can combine it with Tailwind's state variants like hover:, focus:, and active: to create interactive typography that responds to user actions.

This technique works really well for links, buttons, navigation items, and anywhere you want to provide visual feedback when users interact with your content.

Notice how I added transition-all to smooth out the weight changes? Without it, the shift can feel jarring. The transition makes everything feel more polished and intentional.

Here's a more complex example with a card that responds to hover:

```html
Case Study

How We Increased Sales by 200%

Learn how this e-commerce company transformed their checkout experience and tripled their conversion rate in just three months.

Read more →
```

The group utility is doing the heavy lifting here. When you hover over the card, all the child elements with group-hover: modifiers respond together. The badge, heading, and call-to-action all get bolder simultaneously, creating a cohesive interactive experience.

This subtle weight change combined with the shadow increase makes the whole card feel more engaging without being over the top.


That's pretty much everything you need to know about controlling font weight in Tailwind CSS.

You've got nine solid utilities for everyday use, arbitrary values when you need something specific, responsive variants for different screen sizes, and interactive states to make your typography come alive.

The beauty of Tailwind's approach is how it keeps everything in your HTML. No jumping between files, no hunting through stylesheets to find where that font weight is defined. It's all right there where you need it.

Start with the basics - font-normal for body text, font-semibold or font-bold for headings. Then experiment with the responsive and interactive features as you get more comfortable. You'll be surprised how much visual interest you can create just by adjusting weight at the right moments.

Other posts you might like...

See more

Subscribe to our newsletter

Get notified when we add new templates, components, and more!

Thanks for subscribing!
Please check your email to confirm your subscription.

WindyBase Make development a breeze

WindyBase is a weekly curated Tailwind CSS template and tool directory built for the modern developer.

© 2025 WindyBase. All rights reserved.