Understanding CSS letter-spacing: is it valid to replace the default value of normal with 0?

No both aren't exactly equivalent. If you check the current specification

normal

The spacing is the normal spacing for the current font. This value allows the user agent to alter the space between characters in order to justify text.

Then

<length>

This value indicates inter-character space in addition to the default space between characters. Values may be negative, but there may be implementation-specific limits. User agents may not further increase or decrease the inter-character space in order to justify text.

In most of the cases, they will render the same but as you can read, the user agent doesn't handle both the same.


The definition in the Draft of the next level seems to have changed slightly and both are now the same.

For legacy reasons, a computed letter-spacing of zero yields a resolved value (getComputedStyle() return value) of normal..

You can also read here: https://github.com/w3c/csswg-drafts/issues/1484

CSS2 used to treat normal different than 0, so computing differently was a requirement. Now that the spec treats them the same ...


I don't know if all the browsers are already implementing this level but you can most likely consider them the same


According to the Mozzila docs: https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing#Values

The normal letter spacing for the current font. Unlike a value of 0, this keyword allows the user agent to alter the space between characters in order to justify text.

Seems like 0 is more of a hard value to set it to the default. Normal can be modified by the user agent.