The problem with CSS is that it was designed by the sorts of people who like to design languages around vague concepts rather than design languages around getting things done. In the case of CSS, the overriding concept was semantic information. Surprise, surprise, it only turns out to be mildly useful.
The visual web was horribly crippled in order to achieve a mediocre result with a few non-visual edge cases.