In navolging van het door mij gestartte topic Semantische HTML, CSS en jij, hier het eerste draadje, en wel over formulieren.
Formulieren zijn eigenlijk altijd al een gevalletje table klussen geweest. De INPUT velden zijn net wat groter dan een beschrijvende tekst en vaak lijnt het allemaal niet zo mooit uit. Een tabel bestaande uit twee kolommen met in de linker een beschrijving van het veld en in de rechter het veld zelf zal ons niet vreemd zijn. Maar hoe moet het dan wel?
Helaas is hier zoals met veel van deze problemen geen eenduidig antwoord op te geven. Sommige formulieren hebben daadwerkelijk iets weg van een tabel, bestaande uit een aantal kolommen met een aantal rijen die door de user te bewerken zijn. Ik zal uitgaan van het klassieke contactformulier om een eerste mogelijke oplossing aan te dragen.
Om maar meteen met de deur in huis te vallen:
En de CSS om het netjes neer te zetten:
En even wat toelichting: allereerst natuurlijk een FIELDSET om het netjes te groeperen en een LEGEND om het beestje een naam te geven. Maar dan waar het allemaal om draait: het netjes tegenover elkaar uitlijnen van de LABELs en INPUTs. Hiervoor heb ik constructies gezien met SPANs, DIV's en DL's. SPANs en DIV's zijn hier sowieso overbodig, maar de DL is nog een interessant discussiepunt. De DT's en DD's zijn natuurlijk prima te gebruiken om respectievelijk de label en het veld te herbergen, maar zijn in mijn ogen dubbel op. Een label is al een beschrijving van een veld, dat hoeft niet nog eens in een DT.
Maar goed, genoeg over hoe ik het niet heb gedaan.
Allereerst heb ik simpelweg alles in paren naast elkaar gezet, LABEL voor het veld en een BR voor de volgende twee. Op deze manier staat alles zonder CSS netjes geordend en is het prima bruikbaar. Maar we willen met CSS dat de INPUT velden even ver van de kant af staan, dus zonder het inspringen van de verschillende lengtes van de LABELs. Dit los ik op door de LABEL een float te geven, waardoor de margin van de INPUT zich tegen de container zal positioneren.
Maar de margin van de INPUT werkt nog niet, eerst zullen we deze een display: block moeten geven. Doordat de INPUT zich nu gedraagd als een blockelement komt alles daarna op een volgende regel te staan, maar dat deed onze BR ook al. Omdat we de BR wel nodig hebben (zodat het ook bruikbaar is zonder CSS) schakelen we deze uit met een display: none. En voila, een net opgemaakt formulier. Uiteraard valt dit alles met de nodige margin's volledig naar wens op te maken.
Uiteraard ziet niet ieder formulier er zo uit, en is deze oplossing dan ook alleen toepasbaar in deze situatie (hoewel er natuurlijk wel verder op gebouwd kan worden). Er zijn ook formulieren bestaand uit meerdere kolommen van velden, formulieren voor het bewerken van datagrids, etc.
Graag jullie mening over deze oplossing en toepassingen van CSS op andere typen formulieren.
Zie ook: Semantische HTML, CSS en jij
Formulieren zijn eigenlijk altijd al een gevalletje table klussen geweest. De INPUT velden zijn net wat groter dan een beschrijvende tekst en vaak lijnt het allemaal niet zo mooit uit. Een tabel bestaande uit twee kolommen met in de linker een beschrijving van het veld en in de rechter het veld zelf zal ons niet vreemd zijn. Maar hoe moet het dan wel?
Helaas is hier zoals met veel van deze problemen geen eenduidig antwoord op te geven. Sommige formulieren hebben daadwerkelijk iets weg van een tabel, bestaande uit een aantal kolommen met een aantal rijen die door de user te bewerken zijn. Ik zal uitgaan van het klassieke contactformulier om een eerste mogelijke oplossing aan te dragen.
Om maar meteen met de deur in huis te vallen:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
| <form action="#"> <fieldset> <legend>Semantic Form</legend> <label for="firstname">First name:</label> <input type="text" id="firstname" /><br /> <label for="lastname">Last name:</label> <input type="text" id="lastname" /><br /> <label for="email">E-mail address:</label> <input type="text" id="email" /><br /> <label for="homepage">Homepage URL:</label> <input type="text" id="homepage" /><br /> </fieldset> </form> |
En de CSS om het netjes neer te zetten:
Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| label { float: left; } input { margin-left: 120px; display: block; font: small Verdana, Tahoma, Arial, Sans-Serif; } br { display: none; } |
En even wat toelichting: allereerst natuurlijk een FIELDSET om het netjes te groeperen en een LEGEND om het beestje een naam te geven. Maar dan waar het allemaal om draait: het netjes tegenover elkaar uitlijnen van de LABELs en INPUTs. Hiervoor heb ik constructies gezien met SPANs, DIV's en DL's. SPANs en DIV's zijn hier sowieso overbodig, maar de DL is nog een interessant discussiepunt. De DT's en DD's zijn natuurlijk prima te gebruiken om respectievelijk de label en het veld te herbergen, maar zijn in mijn ogen dubbel op. Een label is al een beschrijving van een veld, dat hoeft niet nog eens in een DT.
Maar goed, genoeg over hoe ik het niet heb gedaan.
Allereerst heb ik simpelweg alles in paren naast elkaar gezet, LABEL voor het veld en een BR voor de volgende twee. Op deze manier staat alles zonder CSS netjes geordend en is het prima bruikbaar. Maar we willen met CSS dat de INPUT velden even ver van de kant af staan, dus zonder het inspringen van de verschillende lengtes van de LABELs. Dit los ik op door de LABEL een float te geven, waardoor de margin van de INPUT zich tegen de container zal positioneren.
Maar de margin van de INPUT werkt nog niet, eerst zullen we deze een display: block moeten geven. Doordat de INPUT zich nu gedraagd als een blockelement komt alles daarna op een volgende regel te staan, maar dat deed onze BR ook al. Omdat we de BR wel nodig hebben (zodat het ook bruikbaar is zonder CSS) schakelen we deze uit met een display: none. En voila, een net opgemaakt formulier. Uiteraard valt dit alles met de nodige margin's volledig naar wens op te maken.
Uiteraard ziet niet ieder formulier er zo uit, en is deze oplossing dan ook alleen toepasbaar in deze situatie (hoewel er natuurlijk wel verder op gebouwd kan worden). Er zijn ook formulieren bestaand uit meerdere kolommen van velden, formulieren voor het bewerken van datagrids, etc.
Graag jullie mening over deze oplossing en toepassingen van CSS op andere typen formulieren.
Zie ook: Semantische HTML, CSS en jij