- From: Jay Levitt <lists-wwwstyle@shopwatch.org>
- Date: Tue, 11 Sep 2007 09:28:20 -0400
- To: www-style@w3.org
After a 6-year hiatus from professional programming, I'm creating my first non-toy web application. Read all the CSS books, keep up on the lists and the newsgroups, found the bugs and the hacks. Tried to do a simple thing - create a form to enter a U.S. postal address - and hit a big philosophical brick wall. I'm coming at page design from a different direction - I spent 12 years at AOL working on server-side apps. Our forms layout engine had some simple primitives: everything belonged to either a horizontal or a vertical group, and every group had a vertical and horizontal alignment. Labels were special, and you told them where to sit relative to the input field. By nesting groups, you'd create the layout you want. That's actually not hard to replicate in CSS; I can create divs that go from horizontal to vertical depending on what their class is, and I can create labels that sit on top or to the left depending on their class. And they nest nicely and work in floated column layouts. But that requires that I specify the class of each div or input field in HTML. And that violates the separation of presentation and content. (At AOL, we separated presentation from content by having developers do the basic grouping of content, and hand over the forms to designers who did pixel-perfect positioning for each individual client ("browser") version, country, language, and screen size. That didn't scale so well either.) Now, each input field has an ID, as do their surrounding divs. So I could, in theory, either (a) repeat the "horizontal" or "vertical" CSS properties for each ID, or (b) find every ID on every page in my app that wants to be horizontal and put it all one in big selector. Neither one of these is attractive, DRY or scalable. And of course either one requires you to create non-semantic grouping DIVs to hang the CSS off of. To my novice eye, what I want is a layer in between HTML and CSS that says (pseudocode): #firstname #lastname {group: horizontal; id: name;} #city #state #zip #country {group: horizontal; id: region;} #name #address1 #address2 #region {group: vertical; } The HTML deals only with semantics and function, providing the ID of each field; the pseudocode above maps and composes those fields into layout groups; CSS-as-we-know-it specifies the style of each group. That can't be done today with pure HTML and CSS; JavaScript could turn "group" into a DIV and set its class and ID, but you shouldn't need JavaScript for basic form layout. I can't imagine I'm the first person to come up with this, but I have no idea what to search on... can anyone point me to someplace this has been discussed to death for CSS3 (whatever that means now)? I checked out XForms but they don't seem to accomplish this either. Jay Levitt
Received on Wednesday, 12 September 2007 15:18:55 UTC