Which character CSS accepts
CSS accepts U+200B. Screen readers still announce text hidden with color: transparent, which is often the desired behaviour. visibility: hidden removes it from the accessibility tree entirely.
The fallback is U+00A0, which clears validators the first character does not. Both survive trim(), which is the operation that destroys an ordinary space.
How to set it on CSS
To set blank text on CSS, copy the character above and paste it into a cleared field. The whole method is one paste — the cost is free.
- Use color: transparent to hide text while keeping its space.
- Use visibility: hidden to hide it and keep the layout box.
- Use the content property with an escaped codepoint to insert an invisible character.
Why an invisible character works where a space does not
One Unicode property decides it, and it is not the one most guides name. Every character carries a White_Space value of Yes or No, and that value determines whether trim() removes it.
The spacebar produces U+0020, whose White_Space value is Yes. CSStrims the field before saving, the trimmed value is empty, and the field falls back to its previous contents. That is why a name built from spaces looks correct in the editor and reverts the moment you save.
U+200B has White_Space=No. No trimming function removes it and the regex class \s does not match it, so the value that reaches the server is the value you pasted.
One caveat applies to U+3164 specifically. Normalization Form NFKC folds it to U+1160 Hangul Jungseong Filler, so a platform that normalizes before storing keeps a different codepoint than the one you pasted. The name still displays blank. Use U+1160 directly if you want the stored value to match exactly.
What it costs on CSS
Free. Nothing is consumed by a failed attempt, so trying a second character costs only the time.
If it does not work on CSS
Text hidden with color: transparent is still selectable and still appears in a copy. Use it for visual effect, never for secrecy.
The field clears itself after saving
CSS trimmed the value and found an empty string, so it restored the previous one. The character you used has White_Space=Yes. Switch to U+200B or U+00A0, which do not, and the value survives the trim.
A box or question mark appears
The rendering font has no glyph at that codepoint, so the renderer draws.notdef — an empty rectangle in most fonts. The stored value is correct and only the display is wrong. U+00A0 carries wider font coverage than most alternatives.
The paste produces nothing on mobile
The keyboard or clipboard manager sanitised the content in transit. Paste into a plain-text notes app first, copy from there, then paste into CSS. This is the single most common practical failure and it has nothing to do with the character itself.
It works on desktop and fails in the app
The two clients validate separately. A value the desktop site accepts can still be rejected by the mobile client's own check, and the reverse also happens. Set it on whichever client accepts it — the stored value is shared.
Full property data for both characters is on the Unicode invisible characters table.
Is a blank name allowed on CSS?
Yes. A blank name breaks no CSS rule. Platform policies restrict impersonation, harassment and filter evasion, not which codepoints a name contains.
Two uses do violate policy on CSS and on every comparable platform, and neither depends on the name being blank. Copying another user's name to pass as them is impersonation. Splitting a blocked word with a zero-width character to defeat moderation is evasion.
One consideration applies regardless of the rules. Screen readers announce nothing for an invisible character, so NVDA, JAWS and VoiceOver read a fully blank name as unnamed. Keeping one visible character alongside the invisible ones preserves the announcement and still looks almost blank.