Skip to content
rasmusp.com

Tailwind CSS utility feature

We have all been there: the CSS Working Group releases a shiny new CSS feature, and we immediately want to use it — but Tailwind CSS does not yet provide first-class utilities for it.

In this article, we will look at how Tailwind CSS 4 makes it easier to adopt experimental or cutting-edge CSS features by adding custom utilities, using the new text-box property as a concrete example.

The Problem: adopting new CSS features early

Text-box is a good example of a modern CSS feature that solves a real design problem: removing excess vertical whitespace caused by font metrics.
You can read more about it on MDN: MDN: Text-box

However, because the property is still experimental and browser support is limited, Tailwind understandably does not ship built-in utilities for it (yet).

That does not mean we cannot use it.

Adding custom utilities in Tailwind CSS 4

Tailwind CSS 4 provides a clean, official way to add custom utilities via the @utility API.

This allows us to define utilities that behave exactly like native Tailwind classes — without hacks or large plugin abstractions.

Example: Text-box utilities

Let’s create a small set of utilities for text-box-trim and its companion property text-box-edge.

/*
utility classes for:
Text-box: https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/text-box
*/
@utility text-box-* {
--text-box-trim: --value("none", "trim-start", "trim-end", "trim-both");
}
@utility text-box-edge-start-* {
--text-box-edge-start: --value("text", "cap", "ex");
}
@utility text-box-edge-end-* {
--text-box-edge-end: --value("alphabetic", "text");
}
@utility text-box {
text-box: var(--text-box-trim, none) var(--text-box-edge-start, text) var(--text-box-edge-end, text);
}

This approach mirrors Tailwind’s compositional philosophy:

usage

<p class="text-box text-box-trim-both text-box-edge-start-cap text-box-edge-end-alphabetic">Tailwind CSS rocks!</p>

This will generate the following CSS

text-box: trim-both cap alphabetic;

Why this approach works well

This pattern might look slightly verbose at first glance, but it has some very real advantages.

Most importantly, this keeps your codebase honest.

You are not hiding experimental CSS behind magic abstractions. You are making a conscious, documented choice to use a modern feature where it provides real value.

This same technique works extremely well for other emerging CSS features, for example:

If the browser can parse it, Tailwind CSS 4 can host it.

Happy Hacking