Small Details That Make a Big Difference: Typography & Polish
@himanshuchandola||2 min read
The difference between a good interface and a great one often comes down to tiny details that most users won't consciously notice — but they'll feel. Here are the small polish items that elevate a web experience.
Typography That Feels Right
The Ellipsis
There are three periods (...) and there's an ellipsis (…). They're different.
Loading... ❌
Loading… ✅
The ellipsis is a single character designed to look balanced. Use it for loading states, truncation, and trailing thoughts.
Curly Quotes
Straight quotes are for code. Curly quotes are for prose.
"Hello World" ❌ Straight quotes
"Hello World" ✅ Curly quotes
Most word processors auto-correct this, but in code you need to be intentional.
Non-Breaking Spaces
Some things should never be separated across lines:
10 MB → 10 MB (non-breaking space)
⌘ K → ⌘ K
Dr. Smith → Dr. Smith
In HTML, use or the actual non-breaking space character.
Transitions That Don't Jank
Never Use transition: all
/* ❌ Bad - animates everything, including layout properties */
.card {
transition: all 0.3s ease;
}
/* ✅ Good - explicit properties, only animates what matters */
.card {
transition: transform 0.3s ease,
opacity 0.3s ease,
box-shadow 0.3s ease;
}
transition: all is a performance trap. It can animate properties you didn't intend, causing layout thrashing.
Stick to transform and opacity for smooth 60fps animations — they're GPU-accelerated and don't trigger layout recalculations.
Transform Origin Matters
When scaling or rotating, the origin point changes everything:
/* Scales from center (default) */
.icon { transform-origin: center; }
/* Scales from top-left corner */
.dropdown { transform-origin: top left; }
/* Scales from bottom center */
.tooltip { transform-origin: bottom center; }
Focus States That Guide
Removing focus outlines is an accessibility sin, but the default blue ring isn't always pretty. The solution: focus-visible.
/* Only shows focus ring for keyboard navigation */
.button:focus-visible {
outline: 2px solid var(--primary);
outline-offset: 2px;
}
/* Removes ugly default ring */
.button:focus:not(:focus-visible) {
outline: none;
}
This gives keyboard users the visual feedback they need without showing rings on every mouse click.
Loading States
Loading indicators should feel alive but not distracting.
The Pulsing Cursor
For chat-style streaming text:
.cursor {
display: inline-block;
width: 2px;
height: 1em;
background: currentColor;
animation: pulse 1s infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.4; }
}
The Content Placeholder
For loading skeletons, subtle animation matters:
.skeleton {
background: linear-gradient(
90deg,
var(--muted) 25%,
var(--muted-light) 50%,
var(--muted) 75%
);
background-size: 200% 100%;
animation: shimmer 1.5s infinite;
}
@keyframes shimmer {
0% { background-position: 200% 0; }
100% { background-position: -200% 0; }
}
Spacing That Breathes
Consistent Scale
Pick a spacing scale and stick to it:
:root {
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--space-4: 16px;
--space-6: 24px;
--space-8: 32px;
}
Using a scale creates visual rhythm that feels intentional.
Vertical Rhythm
Headings and paragraphs should follow a consistent vertical pattern:
h2 { margin-top: 2em; margin-bottom: 0.5em; }
p { margin-bottom: 1em; }
Color Precision
Don't Use Pure Black
Pure black (#000) on pure white (#fff) creates harsh contrast that strains eyes. Soften it:
:root {
--foreground: oklch(0.1 0 0); /* Almost black */
--background: oklch(0.98 0 0); /* Almost white */
}
Dark Mode Scrollbars
Browsers render scrollbars based on the page's color scheme. Tell them:
<html style={{ colorScheme: "dark" }}>
Without this, you get light scrollbars in a dark interface.
The Checklist
- [ ] Use proper ellipsis (
…) not three dots - [ ] Use curly quotes for prose
- [ ] Non-breaking spaces for units and keyboard shortcuts
- [ ] Explicit transition properties, never
all - [ ] Correct transform-origin for animations
- [ ]
:focus-visiblefor keyboard-only focus rings - [ ] Consistent spacing scale
- [ ] Soften pure black/white contrast
- [ ]
color-schemefor proper scrollbar theming
These details compound. A site with all of them feels premium. A site missing them feels... off.
Polish is the difference between "it works" and "it feels right."