What you are trying to do is a bad idea as firstly no one should be making this much effort to support IE6 in a new web application and secondly your HTML structure is not flexible and will only work in very specific scenario.
However, I was curious to see if the classic IE6 float bugs could be overcome purely with CSS and no extra HTML and surprisingly it does seem possible. The trick is to use IE's CSS expressions to inject <br> elements in to the page after the text boxes.
The following code worked for me in IETester when emulating IE6 and IE7:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <style type="text/css"> #section label input{ float: left; margin-bottom: 10px; *zoom: expression(this.runtimeStyle.zoom="1", this.parentNode.insertBefore(document.createElement("br"), this.nextSibling).style.cssText="clear:both;font:0/0 serif"); } </style> </head> <body> <div id="section"> <h2>Section Title</h2> <label for="name">Name</label> <input type="text" id="name" /> <label for="dob">Date of Birth</label> <input type="text" id="dob" /> <label for="email">Email</label> <input type="text" id="email" /> </div> </body> </html>
Based on information from this page