What sucks most about HTML? I would argue it's all the time I waste trying to get the layout I wanted. All the time I spent learning CSS and HTML 4 was probably 6 months or more before I felt comfortable with it. I could come close to the layout I had in my mind. However, as soon as I switched browsers my beautiful layout went to crap, and I had to dig into arcane browser hacks to make it work. Who enjoys that?
How much of that is the complexity of CSS rules and HTML? Ever tried or thought about creating a browser? It's NOT easy. I find understanding the interaction between CSS and HTML arcane as a web designer. If I find it hard then it's really hard for the browser developer to get it right. And that's precisely what we've seen. Lots of inconsistency in how they interpret the meaning of things. Leading to browser inconsistencies. If it's simple to understand then it's simple to implement. If it's simple to implement it's easier for two people to come to a common expectation.
Let's get specific. Say I wanted my node to be position relative to it's parent. I want to set the top left corner of an element to be 50 pixels from the left and 50 pixels from the top. In HTML I can set the left and right of my component, but I also have to set the layout to absolute on the child, and set the parent to relative. This is a common practice in other UI toolkits, but it's complex in HTML. What if all I did was this:
<application>
<box top="50" left="50" width="200" height="200"></box>
</application>
Pretty simple right? Although this isn't that far from HTML/CSS, there are other things that aren't so easy. What if I wanted to horizontally align that box relative to the parent's center.
<application>
<box width="800" height="600" horizontalCenter="0"></box>
</application>
Simple. HTML/CSS you would use margin: auto? WTF!? Doesn't horizontalCenter make more sense? Of course it does. Try vertical centering on for size:
<application>
<box width="800" height="600" verticalCenter="0"></box>
</application>
Try that with HTML and you'll come up short or at best bizarre.
What about defining boxes that grow when the window is changed? That can easy too:
<application>
<box id="banner" left="0" right="0" top="0" height="50"></box>
<box id="leftmenubar" left="0" width="250" top="50" bottom="0"></box>
<box id="content" left="250" right="0" top="50" bottom="0"></box>
</application>
Simple. The content area sets his left and right relative to the parent's edges. When the parent grows so does the child. The banner and leftmenubar are fixed in position. However, the banner grows its width as the parent's width grows.
Even supporting legacy HTML documents could be simple.
<application>
<box width="800" height="600" horizontalCenter="0" verticalCenter="0">
<HTML width="100%" height="100%">
</HTML>
</box>
</application>
HTML just becomes another possible node within the super document. It would create yet another box that can display text documents using what you want for text documents which is page flow layout. HTML nodes could occur as many times as we need in our over all application.
Furthermore, legacy HTML documents (e.g. those starting with HTML) could be converted into our application tag just by surrounding the application tag around the legacy HTML only document. Hence making all HTML documents forward compatible with application documents.
It's a simple idea to fix the constant layout problems with the web.