The text-transform property controls how text is capitalized for display. Common values are uppercase, lowercase, capitalize, and none.
It is a presentation change only—the HTML source stays as written. Use it for headings, buttons, and labels when you want consistent casing without editing every string.
Standard-track.
Baseline widely available for the common keywords. Not deprecated as a property.
Limited support.
full-width and full-size-kana mainly work in Firefox and Safari. math-auto is for math italic (mainly MathML) and is not in Safari yet.
Accessibility casing
Some assistive tech still announces the original source casing. Prefer real sentence case in content when meaning depends on it.
Start with mixed case. Here the markup uses capitals on purpose.
Apply lowercase. Display maps letters to their lowercase forms.
Inherited tip. A parent value flows to children unless overridden.
Reset tip.none or initial restores source casing.
Edge Cases & Pitfalls
If casing looks wrong, one of these is usually why.
source
Display only—DOM stays original
Copy/paste, form values, and many screen readers still use the source string. Do not store meaning only in the transformed look.
capitalize
capitalize is not smart title case
It capitalizes the first letter of each word and does not lower the rest. Language-aware title casing still belongs in the content.
i18n
Locale casing can surprise you
Some languages have special uppercase/lowercase rules (for example Turkish dotted/dotless i). Test with real locales when it matters.
limited
full-width / full-size-kana / math-auto
These values are niche and unevenly supported. Prefer MathML for math, and treat East Asian transforms as progressive enhancement.
caps
All caps is harder to read
Long uppercase paragraphs hurt readability. Reserve uppercase for short UI text, not body copy.
Compatibility
Browser Support
text-transform is a browser CSS property for display casing. Node.js, Deno, and Bun do not apply it.
✓ Baseline · Widely available since Jul 2015
text-transform
none / capitalize / uppercase / lowercase: all modern browsers and IE. full-width & full-size-kana: Firefox and Safari. math-auto: Chrome/Edge 109+, Firefox 117+ (not Safari).
97%Common keywords support
Google Chrome1+ common
Full support
Mozilla Firefox1+ common
Full support
Apple Safari1+ common
Full support
Microsoft Edge12+ common
Full support
OperaCommon long
Full support
Samsung InternetCommon long
Full support
Internet ExplorerCommon keywords
Full support
text-transformWidely supported
Bottom line: Safe for everyday casing. Treat full-width, full-size-kana, and math-auto as optional enhancements.
Remember
Key Takeaways
Role: changes display capitalization without editing the source text.
Common values:none, uppercase, lowercase, capitalize.
Initial value:none. The property is inherited.
Pitfall:capitalize is not language-aware title case.
One line: keep natural casing in HTML; use text-transform when the design needs a consistent display style.
Frequently Asked Questions
It changes how text is capitalized for display: uppercase, lowercase, capitalize each word, or none. The source HTML text stays the same.
none. Characters keep the casing written in the markup or content.
No. capitalize uppercases only the first letter of each word. Use uppercase for all letters.
Yes. A value on a parent applies to children unless a child sets its own value.
No. It is visual only. Copying text or reading the DOM still shows the original casing.
none, capitalize, uppercase, and lowercase are universal in modern browsers. full-width and full-size-kana have limited support. math-auto is newer and mainly for MathML. It is a browser CSS property, not a Node.js feature.