Details that make interfaces feel better

Great interfaces rarely come from a single thing. It's usually a collection of small things that compound into a great experience. Below are a few small details I use to make my interfaces feel better.

Text wrapping

A quick way to improve how text behaves in your app is to use text-wrap: balance. It distributes text evenly across each line, avoiding orphaned words.

wrap

Designing interfaces that feel natural and intuitive

Great design is invisible. It guides users without them ever noticing.

balance

Designing interfaces that feel natural and intuitive

Great design is invisible. It guides users without them ever noticing.

Width220px

text-wrap: balance distributes text evenly across lines, preventing orphaned words.

Concentric border radius

When nesting rounded elements, the inner radius should equal outerRadius - padding. This keeps the curves concentric rather than parallel, which looks far more intentional.

uniform
concentric
Outer radius16px

Inner radius = outer radius − padding. This keeps curves concentric and visually consistent.

Make text crispy

On macOS, the default font smoothing uses subpixel rendering which can make light text on dark backgrounds appear heavy and blurry. Use -webkit-font-smoothing: antialiased to switch to grayscale antialiasing for thinner, sharper text.

auto

The quick brown fox jumps over the lazy dog

antialiased

The quick brown fox jumps over the lazy dog

Antialiased rendering produces thinner, crisper text on dark backgrounds by using grayscale smoothing.

Use tabular numbers

Proportional numbers look great in prose, but in tables, dashboards, or anywhere values change dynamically, use font-variant-numeric: tabular-nums. It gives every digit the same width so columns stay aligned and values don't jitter when they update.

proportional
AAPL$1,249.00
TSLA$849.50
NVDA$3,199.99
META$499.00
BRK.A$12,750.00
tabular
AAPL$1,249.00
TSLA$849.50
NVDA$3,199.99
META$499.00
BRK.A$12,750.00

Tabular numbers give each digit equal width, preventing layout shift in dynamic values.

Split and stagger entering elements

When multiple elements enter at once, animating them all simultaneously feels flat. Adding a small stagger of animation-delay per element creates a cascading reveal that feels organic and guided.

uniform
📋Copy to clipboard
✏️Edit document
📤Share with team
🗑️Move to trash
staggered
📋Copy to clipboard
✏️Edit document
📤Share with team
🗑️Move to trash

Staggering entry animations by 50ms per element creates a natural, cascading reveal.

Align optically, not geometrically

A play icon centered mathematically inside a circle will look slightly left-heavy because triangles have more visual mass on their flat edge. Nudging it 1-2px to the right makes it appear centered to the human eye.

geometric
optical

Asymmetric shapes like play icons need a small offset to appear centered to the human eye.

Use shadows instead of borders

Borders add to an element's layout size and can't be combined with depth shadows in a single property. Using box-shadow: 0 0 0 1pxinstead gives you a visual border that doesn't affect layout and layers naturally with other shadows.

border
Card with border
Adjacent card
shadow
Card with shadow
Adjacent card

Box-shadow borders don't add to layout size and can layer with depth shadows in a single property.