The problem with the browser is that HTML browsers were not originally designed to act like and/or mirror desktop-style GUI's. However, that's exactly what the industry has been trying to do for the past 2 decades, and badly. Even the big vendors F up their UI's.
If a browser were designed UP FRONT to be GUI-oriented, then browsers wouldn't need to download giant GUI JS libraries to try to mirror real GUI's. It's almost like every app downloading an OS to run. Dumb! Illogical! Bad humans!
One of my common suggestions is to make the (GUI) browser be a "dumb" vector plotter: plot shapes and input boxes based on simple linear coordinates. The flow and relative placement control would be done on the server side. This would greatly simplify the client and related standards.
That way you have only ONE layout/flow engine instead of 50-ish you have to test for on the client (Mac, Windows, iPhone, Android, times each version X, version Y, etc. etc.) Fonts would be a little trickier, but I've kicked around various solutions for those that would take a while to describe here.
I'm tired of UI's breaking and overlapping wrong in different ways on different browsers/devices. I'd rather have the 90's DLL Hell back instead of this insidious Render Hell.
Lets do it logically this time. First, we have to admit we fucked up really bad and turned UI's into rocket science. Actually, rocket science is easier: it follows physics, while the HTML stack follows Chaos Theory. It's great job security until you count your grey hairs and Tums.