HTML and CSS are relatively straightforward languages. Yet there’s a certain amount of elegancy to them – I think you could even call well written markup art.
I quite enjoy writing HTML and CSS from time to time. Despite being simpler than programming languages, writing HTML still provides a challenge: How to put a design into code in the most elegant and functional way.
In programming you typically consider architectural things like classes and design patterns, how to separate concerns nicely and so on.
In HTML you don’t have these questions. Instead you face some different ones, like how do I do this part? Is using a h1 enough or do I need to wrap it into a div? What if I did it like this, could it save me some of that extraneous markup?
In programming having less code is usually good, but it also applies in markup, perhaps even more so. In programming, you can achieve benefits from abstracting, which leads to some more code but is justifiable from the benefits. In HTML, you don’t have things like this, so all extra is usually that – useless extra.
What takes away from being able to make your HTML and CSS elegant or nice is often the issue of cross-browser compatibility, particularly Internet Explorer. When things need to work in IE, you can’t take advantage of many of the CSS features which allow you to make the markup better. This also takes away the fun from it, and instead everything becomes horribly, horribly frustrating.