HTML/CSS as machine code is a horribly flawed metaphor. Machine code is at the "absolutely no abstractions" level; it's what the computer executes. HTML/CSS, on the other hand, are massively abstracted declarative languages. It describes the data you want to display, and some basic style information. Java -> HTML/CSS/JavaScript is actually compiling up in many, if not most, cases.
HTML/CSS is portable across all browsers, but you aren't guaranteed absolute control over the final rendering. This is by design, and there are a lot of good reasons for it. Most of these abstraction layers sacrifice all of that so you can get more control on the 2 or 3 supported browsers instead of the giant universe of alternate user agents.
If you use HTML 1.0 you can render something on most (but not all) browsers. EX: text only browsers will not show you imgs. And yes, these are still in use by the blind community.