Apps verzamelen voornamelijk gegevens via formulieren. Neem bijvoorbeeld een algemeen aanmeldingsformulier: er zijn verschillende velden waar gebruikers informatie kunnen invoeren, zoals hun naam, e-mailadres, enz.
Vroeger hadden websites gewoon saaie HTML-formulieren met geen stijlen. Dat was voordat CSS alles veranderde. Nu kunnen we interessantere, levendigere formulieren maken met behulp van de nieuwste functies van CSS.
Geloof me niet zomaar. Hieronder ziet u hoe een typisch HTML-formulier eruitziet zonder CSS.
Hier is datzelfde formulier opgefrist met een beetje CSS .
In deze tutorial laten we je zien hoe je het bovenstaande formulier opnieuw kunt maken, evenals een paar andere geweldige wijzigingen die u kunt doorvoeren om visueel indrukwekkende, gebruiksvriendelijke formulieren te maken.
We laten zien hoe u formulieren met CSS opmaakt in zes stappen:
- Instelling
box-sizing
- CSS-selectors voor invoerelementen
- Basisstijlmethoden voor tekstinvoervelden
- Styling van andere invoertypen
- UI pseudo-klassen
- Niet-aanpasbare invoer
Voordat we erin duiken, is het belangrijk om te begrijpen dat er geen specifieke stijl is voor formulieren. De mogelijkheden worden alleen beperkt door uw verbeeldingskracht. Deze gids is bedoeld om u op weg te helpen op weg naar het maken van uw eigen unieke ontwerpen met CSS.
Laten we beginnen!
Box-sizing instellen
Ik stel * {box-sizing:border-box;}
meestal niet alleen in voor formulieren, maar ook voor webpaginas. Als je het instelt, zal de breedte van alle elementen de opvulling bevatten.
Stel bijvoorbeeld de breedte en opvulling als volgt in.
.some-class { width:200px; padding:20px;}
De .some-class
zonder box-sizing:border-box
zal een breedte hebben van meer dan 200px
, die kan een probleem zijn. Daarom gebruiken de meeste ontwikkelaars border-box
voor alle elementen.
Hieronder staat een betere versie van de code. Het ondersteunt ook de :before
en :after
pseudo-elementen.
*, *:before, *:after { box-sizing: border-box;}
Tip: De *
selector selecteert alle elementen in het document.
CSS selectors voor invoerelementen
De gemakkelijkste manier om te selecteren invoerelementen is om CSS-attribuutselectors te gebruiken.
Deze selectors zullen alle invoerelementen in het document selecteren. Als je selectors moet specificeren, moet je klassen aan de elementen toevoegen.
<input type="text" class="signup-text-input" />
Dan:
.signup-text-input { // styles here}
Basisstijlmethoden voor tekstinvoervelden van één regel
Velden met één regel zijn de meest voorkomende invoervelden die in formulieren worden gebruikt. Gewoonlijk is tekstinvoer van één regel een eenvoudig vak met een rand (dit hangt af van de browser).
Hier is de HTML-opmaak voor een veld van één regel met een tijdelijke aanduiding.
<input type="text" placeholder="Name" />
Het zal er als volgt uitzien:
U kunt het volgende gebruiken CSS-eigenschappen om dit invoerveld aantrekkelijker te maken.
- Padding (om binnenafstand toe te voegen)
- Marge (om een marge toe te voegen rond het invoerveld)
- Rand
- Vakschaduw
- Randstraal
- Breedte
- Lettertype
Laten we inzoomen in op elk van deze eigenschappen.
Padding
Door wat innerlijke ruimte aan het invoerveld toe te voegen, kan de duidelijkheid worden verbeterd. U kunt dit bereiken met de eigenschap padding
.
input { padding: 10px;}
Marge
Als er andere elementen in de buurt van uw invoerveld zijn, wilt u er misschien een marge omheen toevoegen om clustering te voorkomen.
input { padding:10px; margin:10px 0; // add top and bottom margin}
Rand
In de meeste browsers hebben tekstinvoervelden randen, die u kunt aanpassen.
.border-customized-input { border: 2px solid #eee;}
U kunt ook een rand helemaal verwijderen.
.border-removed-input { border: 0;}
Tip: wees er zeker van om een achtergrondkleur toe te voegen of box-shadow
wanneer de rand is verwijderd. Anders zien gebruikers de invoer niet.
Sommige webontwerpers geven er de voorkeur aan om alleen de onderrand weer te geven, omdat het een beetje lijkt op schrijven op een regel in een notitieblok.
.border-bottom-input { border:0; // remove default border border-bottom:1px solid #eee; // add only bottom border}
Box shadow
U kunt de CSS box-shadow
eigenschap gebruiken om een slagschaduw toe te voegen. U kunt een scala aan effecten bereiken door te spelen met de vijf waarden van de eigenschap.
input { padding:10px; border:0; box-shadow:0 0 15px 4px rgba(0,0,0,0.06);}
Randradius
De eigenschap border-radius
kan een enorme impact hebben op het gevoel van uw formulieren. Door de randen van de vakken te buigen, kunt u het uiterlijk van uw invoervelden aanzienlijk veranderen.
.rounded-input { padding:10px; border-radius:10px;}
U kunt een geheel andere look en feel krijgen door box-shadow
en border-radius
samen te gebruiken.
Breedte
Gebruik de width
eigenschap om stel de breedte van de invoer in.
input { width:100%;}
Lettertypen
De meeste browsers gebruiken een andere lettertypefamilie en grootte voor formulierelementen. Indien nodig kunnen we het lettertype van het document overnemen.
input, textarea { font-family:inherit; font-size: inherit;}
Styling van andere invoertypen
U kunt andere invoertypes opmaken, zoals tekstgebied, keuzerondje, selectievakje en meer. Laten we het eens nader bekijken.
Tekstgebieden
Tekstgebieden lijken op tekstinvoer, behalve dat ze invoer met meerdere regels mogelijk maken. U gebruikt deze meestal als u gegevens in een langere vorm van gebruikers wilt verzamelen, zoals opmerkingen, berichten, enz. U kunt alle standaard CSS-eigenschappen gebruiken die we eerder hebben besproken om tekstgebieden op te maken.
De resize
eigenschap is ook erg handig in tekstgebieden. In de meeste browsers kunnen tekstgebieden standaard langs zowel de x- als de y-as worden aangepast (waarde: both
). U kunt het instellen op both
, horizontal
of vertical
.
Bekijk dit tekstgedeelte dat ik heb gestileerd:
Zie de pen
dyomzez door Supun Kavinda (@SupunKavinda)
op CodePen.
In dit voorbeeld heb ik resize:vertical
gebruikt om alleen verticale formaatwijziging toe te staan. Deze praktijk wordt in de meeste vormen gebruikt, omdat het vervelende horizontale schuifbalken voorkomt.
Opmerking: als u tekstgebieden met automatische grootte moet maken, moet u een JavaScript-benadering gebruiken, die buiten het bereik van dit artikel.
Selectievakjes en keuzerondjes
Het standaard selectievakje en keuzerondjes zijn moeilijk te stylen en vereisen meer complexe CSS (en HTML).
Stijlen een selectievakje, gebruikt u de volgende HTML-code.
<label>Name <input type="checkbox" /> <span></span></label>
Een paar dingen om op te merken:
- Aangezien we
<label>
om de<input>
te verpakken, als u op een element binnen<``label``>
klikt, wordt de<input>
zal worden aangeklikt - We verbergen de
<input>
omdat browsers ons niet toestaan om het veel te wijzigen -
<span>
maakt een aangepast selectievakje aan - We gebruiken de
input:checked
pseudo-class selector om de aangevinkte status en stijl het aangepaste selectievakje
Hier is een aangepast selectievakje (zie de opmerkingen in de CSS voor meer uitleg):
Zie de pen
yLNKQBo door Supun Kavinda ( @SupunKavinda)
op CodePen.
Hier is een aangepast keuzerondje:
Bekijk de pen
eYNMQNM door Supun Kavinda (@SupunKavinda)
op CodePen.
We gebruikten hetzelfde concept (input:checked
) om in beide voorbeelden aangepaste elementen te maken.
In browsers hebben selectievakjes de vorm van een doos, terwijl keuzerondjes rond zijn. Het is het beste om deze conventie in aangepaste invoer te behouden om verwarring bij de gebruiker te voorkomen.
Selecteer menus
Selecteer menus stellen gebruikers in staat om een item uit meerdere keuzes te selecteren.
U kunt het element <select>
een stijl geven om er aantrekkelijker uit te zien.
select { width: 100%; padding:10px; border-radius:10px;}
U kunt de vervolgkeuzelijst (of <option>
-elementen) echter niet opmaken omdat ze standaard worden opgemaakt, afhankelijk van het besturingssysteem. De enige manier om deze elementen op te maken, is door aangepaste vervolgkeuzelijsten met JavaScript te gebruiken.
Knoppen
Zoals de meeste elementen hebben knoppen standaardstijlen.
<button>Click Me</button>
Laten we dit een beetje spannender maken.
UI-pseudo-klassen
Hieronder staan enkele UI-pseudo-klassen die vaak worden gebruikt met formulierelementen.
Deze kunnen worden gebruikt om mededelingen weer te geven gebaseerd op de attributen van een element:
-
:required
-
:valid
en:invalid
-
:checked
(we hebben dit al gebruikt)
Deze kunnen worden gebruikt om effecten op elke staat te creëren:
-
:hover
-
:focus
-
:active
Gegenereerde berichten met: vereist
Om een bericht te tonen dat invoer vereist is:
Als u de -attribuut met JavaScript, wordt het "Required"
-bericht automatisch verwijderd.
We kunnen hetzelfde doen met het :valid
en :invalid
pseudo-klassen.
: hover en: focus
:hover
selecteert een element wanneer de muisaanwijzer erover beweegt. :focus
selecteert een element wanneer het gefocust is.
Deze pseudo-klassen worden vaak gebruikt om overgangen en kleine visuele veranderingen te creëren. U kunt bijvoorbeeld de breedte, achtergrondkleur, randkleur, schaduwsterkte, etc. wijzigen.Door de eigenschap transition
met deze eigenschappen te gebruiken, worden die wijzigingen veel soepeler.
Hier zijn enkele hover-effecten op formulierelementen (probeer over de elementen te zweven).
Zie de pen
yLNKZqg door Supun Kavinda (@SupunKavinda)
op CodePen.
Wanneer gebruikers zien dat elementen subtiel veranderen wanneer ze zweven eroverheen, ze krijgen het gevoel dat het element bruikbaar is. Dit is een belangrijke overweging bij het ontwerpen van formulierelementen.
Is het u opgevallen dat (in sommige browsers) een blauwe omtrek verschijnt wanneer u zich concentreert op formulierelementen? Je kunt de :focus
pseudo-class gebruiken om het te verwijderen en meer effecten toe te voegen wanneer het element gefocust is.
De volgende code verwijdert de focuscontour voor alle elementen.
*:focus {outline:none !important}
Om een focusoverzicht toe te voegen:
input:focus { background-color: #ffd969; border-color: #000; // and any other style}
Heeft u zoekopdrachten gezien die schaal wanneer gefocust? Probeer deze invoer.
Bekijk de pen
KKpoJJa door Supun Kavinda (@SupunKavinda)
op CodePen.
Niet-aanpasbare invoer
Vormelementen opmaken is historisch gezien een hele opgave. Er zijn enkele formulierelementen waar we niet veel controle over hebben. Bijvoorbeeld:
-
<input type="color">
-
<input type="file">
-
<progress>
-
<option>
,<optgroup>
,<datalist>
Deze elementen worden geleverd door de browser en opgemaakt op basis van het besturingssysteem. De enige manier om deze elementen op te maken, is door aangepaste bedieningselementen te gebruiken, die zijn gemaakt met HTML-elementen die kunnen worden gestileerd, zoals div
, span
, enz.
Als we bijvoorbeeld <input type="file">
opmaken, kunnen we de standaardinvoer verbergen en een aangepaste knop gebruiken.
Aangepaste bedieningselementen voor formulierelementen zijn ontwikkeld voor de meeste grote JavaScript-bibliotheken. Je kunt ze vinden op GitHub.
Conclusie
Je zou nu moeten begrijpen hoe je eenvoudige formulierelementen moet opmaken en hoe je aangepaste besturingselementen kunt gebruiken wanneer invoervelden van de browser moeilijk te stylen zijn. Zoals ik aan het begin van dit bericht al zei, zijn dit slechts de basisbouwstenen van CSS-formulierstyling. Gebruik deze tips als basis om uw verbeelding de vrije loop te laten.
Vergeet als afsluitende tip niet om al uw formulieren responsive te maken.
Op zoek naar meer inspiratie voor het ontwerpen van formulieren? Bekijk deze CodePen-verzameling.
Belast uw frontend de CPU van uw gebruikers?
Naarmate webfrontends steeds complexer worden, hebzuchtige functies vragen steeds meer van de browser. Als u geïnteresseerd bent in het bewaken en volgen van het CPU-gebruik aan de clientzijde, het geheugengebruik en meer voor al uw gebruikers in productie, probeer dan LogRocket.
LogRocket is als een DVR voor webapps, die alles registreert wat er gebeurt in uw webapp of site. In plaats van te raden waarom er problemen optreden, kunt u aggregeren en rapporteren over de belangrijkste frontend prestatiestatistieken, speel gebruikerssessies opnieuw af samen met de applicatiestatus, log netwerkverzoeken en breng automatisch alle fouten aan het licht.
Moderniseer de manier waarop u webapps debugt – begin gratis met monitoren.