labels even breed
Een vraagje...
Hoe zorgen jullie ervoor dat in een formulier de labels even breed zijn zodat de invoervelden recht onder elkaar staan?
Het lijkt me niet de bedoeling om hier een tabel voor te gebruiken, dus wat dan overblijft is de labels via css een vaste breedte (width) geven. Echter, omdat de (lengte van de) namen van de labels per formulier verschillen, zou je dan bij ieder formulier telkens weer moeten bepalen hoe breed de labels moeten zijn. Niet echt handig. Weet iemand een handigere oplossing?
Edit: Denk je te snappen. Ja gewoon de labels een vaste width geven middels css? Of de labels boven de inputs (display: block), dan heb je er helemaal geen last van.
Gewijzigd op 02/10/2012 16:40:13 door Roy -
[label 1] [invoerveld]
[label 2] [invoerveld]
[label 3] [invoerveld]
[label 4] [invoerveld]
Label 1 kan bijvoorbeeld zijn "Voornaam", label 2 zou kunnen zijn "Achternaam", label 3 "Leeftijd" en label 4 "Woonplaats". Op het scherm zou dit er dan zo uitzien:
Voornaam [invoerveld]
Achternaam [invoerveld]
Leeftijd [invoerveld]
Woonplaats [invoerveld]
Zoals je ziet staan de invoervelden nu scheef onder elkaar. Om ervoor te zorgen dat ze recht onder elkaar staan, moeten de labels even breed zijn. Wat is de beste manier om dat te doen?
Toevoeging op 02/10/2012 16:46:08:
Een vaste breedte zou kunnen, maar als je bijvoorbeeld een formulier hebt met een (of meerdere) hele lange label-namen, en een formulier met hele korte label-namen, dan moet je voor ieder formulier apart de breedte instellen. Stel dat je een tabel zou gebruiken hoef je niks in te stellen, maar dat lijkt me niet de bedoeling. Vandaar dat ik me afvraag hoe anderen dat dan doen.
label en input field samen in een div .
label text-align: right en float: left
input: float:right
etc..
Kun je een voorbeeldje geven misschien?
Oplossing: zowel label als input een gegeven breedte opgeven. Alles display:blocken en 't zou moeten werken.
Zie http://jsfiddle.net/9tXxx/1/
Trucje: box-sizing: border-box;
Toevoeging op 02/10/2012 20:18:45:
NK: jij wilt dus weer een extra element toevoegen...
Oplossing: zowel label als input een gegeven breedte opgeven. Alles display:blocken en 't zou moeten werken.
Zie http://jsfiddle.net/9tXxx/1/
Trucje: box-sizing: border-box;
http://jsfiddle.net/h3Nde/5/
@Eddy, in jouw voorbeeld zijn de input velden weer erg lang...
Iemand anders nog een idee?
Offtopic:
Waar is die box-sizing goed voor?
@N K: Dat is het niet helemaal. Kijk maar wat er gebeurt als beide labels klein zijn. Ze beginnen niet links en zijn ook niet links uitgelijnd. @Eddy, in jouw voorbeeld zijn de input velden weer erg lang...
Iemand anders nog een idee?
Offtopic:
Waar is die box-sizing goed voor?
http://jsfiddle.net/h3Nde/11/
Nu heb je 2 kleine labels... en de input velden staan nu veel te ver van de labels vandaan. Ik zoek dus eigenijk een manier waarop het werkt zoals een tabel, zodat je niet telkens per formulier de breedte van die labels hoeft aan te passen. Wel grappig overigens, ik dacht dat hier misschien een standaard oplossing voor zou zijn, maar blijkbaar niet :-)
Haha, ja maar dat is dus het probleem. Check: Nu heb je 2 kleine labels... en de input velden staan nu veel te ver van de labels vandaan. Ik zoek dus eigenijk een manier waarop het werkt zoals een tabel, zodat je niet telkens per formulier de breedte van die labels hoeft aan te passen. Wel grappig overigens, ik dacht dat hier misschien een standaard oplossing voor zou zijn, maar blijkbaar niet :-)
Hmmm, da's niet eens zo'n heel gek idee. Twee container div's en dan de labels en inputs onder elkaar zetten... eigenlijk helemaal zo slecht nog niet!! Miscchien ga ik het voortaan wel op die manier doen. Enige vreemde is dat in je code dan de inputs en labels niet bij elkaar staan, maar je hoeft in ieder geval niet meer voor ieder formulier alles apart in te stellen. Niet slecht :)
Op zich netjes, maar de labels beginnen nu weer niet aan de linkerkant.
http://jsfiddle.net/ALbU5/4/
Volgens mij is de enige oplossing waarbij het altijd goed gaat de oplossing van N K: http://jsfiddle.net/h3Nde/17/
Ja, inderdaad... maar hier is weer het probleem dat als je labels klein zijn er een "gat" tussen je labels en de inputvelden zit. Zie hier: Volgens mij is de enige oplossing waarbij het altijd goed gaat de oplossing van N K: http://jsfiddle.net/h3Nde/17/
hmm ozzie ik denk dat mijn oplossing toch de beste is. waarom? omdat je naar mijn inziens niet semantisch bezig bent zoals bedoelt is. maar misschien heb ik het fout dat kan ook :)
De inputs en labels kun je aan elkaar koppelen door id's en "for" te gebruiken.
Wellicht kan Wouter J zijn licht hierover laten schijnen?