Once I heard someone half-jokingly say that he finds CSS harder than Haskell. At the time I just laughed at the joke, but after working with CSS for some time I now understand what he meant. CSS is complex. While it has simple syntax and structure, its output depends so much on the runtime context that it’s hard to reliably predict the result.
For me, three issues stood out:
- Difficult to determine which CSS rule is finally applied
- Difficult to know how CSS rules interact
- Difficult to guess the runtime environment