calc() function accepts any unit-ed value (a
DIMENSION token), and also <percentage>s. Percentages are converted into an appropriate dimension based on the context in which
calc() is used, and then combined with the other values to eventually produce a single value in an appropriate unit.
This works great when percentages and dimensions work the same way for a property - that is, when you can do a naive substitution of a percentage for an equivalent dimension and get the same result - but it's easy to accidentally break this property, which causes problems for
background-position does not have this property - if the background area is a 200px square, using
background-position: 75%; and
background-position: 150px give substantially different results. As such,
calc() needs to carve out an explicit exception for
background-position if it wants to work in the intuitive way.
Do not follow the example set by
background-position. Instead, ensure that percentages and dimensions have the same behavior, start from the same point, etc.
A working example of a property that was badly-behaved and was then fixed is
word-spacing was defined so that lengths were added to the default word-spacing, while percentages were relative to the default word-spacing. So, if the default word-spacing was 10px,
word-spacing: 50% and
word-spacing: 5px did very different things - the first bunched words together, the second spread them apart. The spec was changed to make both of them add to the default word-spacing. Now, both of the above examples spread words apart the same amount, which is friendly with