Man soll ja <table /> vermeiden, wenn man keine echte Tabelle von Dingen anzeigen will. Schön und gut, nur gibt es ab und zu Probleme, wenn man ein tabellenartiges Layout mit <div />s nachbauen will. Genau so eins habe ich gerade.
Problem: Ein Formular. Ich will auf der linken Seite rechtsbündig die Label und rechts daneben die Felder haben. Alle Felder sollen den gleichen Abstand zum linken Rand des Elternelements haben. Knifflig: Die Felder sollen bis zum rechten Rand des Elternelements reichen, welches eine variable Breite hat.
Die Frage ist jetzt: Ist das semantisch tabellenartig genug, um als Tabelle durchzugehen (was mir die Arbeit erleichtern würde)? Wenn nicht, wie zum Teufel kriege ich das implementiert?
Ich kann natürlich die Label und Felder jeweils in ein <div /> packen und mit denen arbeiten – allerdings tausche ich damit nur ein Element mit Breitenproblemen gegen ein anderes aus.
Blockelemente füllen nur dann den ganzen verfügbaren Platz, wenn sie nicht gefloatet werden – dann kann man aber keine anderen Blockelemente neben ihnen platzieren. Was ich bräuchte, wäre ein Block- oder Inline-Blockelement, bei dem width: auto dem gesamten Platz entspricht, der nicht vom benachbarten Element genutzt wird.
Daß bei separaten <div />s die Zeilenhöhen der Label und Felder unterschiedlich sind, kommt erschwerend hinzu.
Versuche, das Ganze mit Tricksereien wie width: 100%; margin-left: 6em hinzubiegen, haben auch nicht geklappt.
CSS wäre manchmal doch deutlich einfacher, wenn sie Arithmetik eingebaut hätten. Mit width: 100% - 6em wäre die Sache in fünf Sekunden gegessen...