Hoe gemeenschappelijke formulierelementen te stylen met CSS

De auteur heeft het Diversity in Tech Fund geselecteerd om een donatie te ontvangen als onderdeel van het Write for DOnations-programma.

Inleiding

Webformulieren zijn een veelvoorkomend element in websiteontwerp, variërend in complexiteit van een zoekformulier tot contactformulieren en complexe gegevensfiltering. Weten hoe CSS te gebruiken om deze elementen te stylen en ermee te werken helpt bij het bieden van betere oplossingen voor deze alledaagse problemen en kan de gebruikerservaring van uw website verbeteren.

Deze tutorial behandelt de creatie en styling van een webformulier dat verschillende gegevens van de gebruiker aanvraagt. Het formulier zal tekstvelden, radioknoppen, selectievakjes, vervolgkeuzelijsten, een tekstgebied en knoppen voor verzenden en opnieuw instellen gebruiken. U zult dit formulier en de elementen ervan maken en stylen door de stijlen te resetten met de appearance-eigenschap, uw eigen consistente stijl voor het formulier in te stellen, placeholder-antwoorden toe te voegen voor de tekstvelden en de radioknoppen en selectievakjes aan te passen met verschillende pseudo-klassen en pseudo-elementen.

Vereisten

Het instellen van de basis HTML en CSS

In deze eerste sectie zul je de HTML en initiële stijlen instellen waarmee je gedurende de rest van de tutorial zult werken. Deze HTML zal het skelet van de pagina opzetten en de formulier velden creëren die je later zult stylen.

Begin door het index.html bestand te openen in je editor. Voeg vervolgens de volgende HTML toe om een basisstructuur voor het bestand te bieden:

index.html
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>CSS Form</title>
    <link rel="stylesheet" href="styles.css" />
  </head>
  <body>
    <main>
    </main>
  </body>
</html>

De elementen die zijn opgenomen in het <head> element definiëren de naam van de pagina met het <title> element en waar de stylesheet geladen moet worden via het <link> element. De <meta> tags definiëren de karaktercodering en instrueren de browser over hoe de site op een klein scherm moet worden weergegeven. De belangrijkste formulierinhoud zal zich bevinden binnen de <body> en <main> tags.

Vervolgens, binnen het <main> element, maak een <form> element aan. Binnen <form> zul je verschillende formulierelementen en <div> elementen toevoegen om te helpen bij de lay-out. In deze tutorial worden toevoegingen aan de code van eerdere stappen gemarkeerd. Voeg de gemarkeerde HTML uit het volgende codeblok toe aan je index.html bestand:

index.html
...
<main>
  <form>
    <div>
      <label for="name">Name</label>
      <input id="name" type="text" />
    </div>
    <div>
      <label for="email">Email</label>
      <input id="email" type="email" />
    </div>
    <div>
      <label for="comp">Favorite CSS Compiler</label>
      <select id="comp">
        <option value="sass">Sass</option>
        <option value="less">Less</option>
        <option value="stylus">Stylus</option>
        <option value="postcss">PostCSS</option>
        <option value="other">Other</option>
      </select>
    </div>
    <div>
      <fieldset>
        <legend>Are you familiar with CSS Grid?</legend>
        <input type="radio" name="grid" id="yes" value="yes" />
        <label for="yes">Yes</label>
        <input type="radio" name="grid" id="no" value="no" />
        <label for="no">No</label>
      </fieldset>
    </div>
    <div class="full-width">
      <label for="message">Message</label>
      <textarea id="message"></textarea>
    </div>
    <div class="full-width">
      <input type="checkbox" id="newsletter" />
      <label for="newsletter">Receive our newsletter?</label>
    </div>
    <div class="full-width">
      <button type="submit">Send Response</button>
      <button type="reset">Clear Form</button>
    </div>
  </form>
</main>
...

De HTML-formulierstructuur bestaat uit onderling verbonden attribuutwaarden om correct te functioneren. Deze code maakt een formulier dat een gebruiker vraagt om hun naam en e-mail, vraagt naar hun favoriete CSS-compiler en of ze CSS-grid kennen, voorziet in een veld voor een door de gebruiker gegenereerd bericht, en heeft een selectievakje om de gebruiker zich aan te melden voor een nieuwsbrief. Om meer te weten te komen over hoe formulieren in HTML te structureren, zie de Mozilla Web Docs-pagina over webformulierstructuur.

Zorg ervoor dat u uw wijzigingen opslaat in index.html, maak vervolgens een nieuw bestand in dezelfde map genaamd styles.css.

Open styles.css in uw teksteditor. Dit bestand bevat de stijlen die de browser zal toepassen op de inhoud van index.html. Voeg de volgende CSS-code toe aan uw styles.css-bestand:

styles.css
body {
  margin: 0;
  background-color: hsl(0, 0%, 98%);
  color: #333;
  font: 100% / normal sans-serif;
}

main {
  margin: 0 auto;
  padding: 4rem 0;
  width: 90%;
  max-width: 60rem;
}

form {
  box-sizing: border-box;
  padding: 2rem;
  border-radius: 1rem;
  background-color: hsl(0, 0%, 100%);
  border: 4px solid hsl(0, 0%, 90%);
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2rem;
}

.full-width {
  grid-column: span 2;
}

De selectoren body en main creëren enkele initiële tekststijlen en lay-out voor de algehele pagina. De selecteur voor het form-element creëert de stijlen voor de algehele formuliercontainer en definieert vervolgens een CSS-grid bestaande uit twee kolommen van gelijke grootte met grid-template-columns: 1fr 1fr;. Vervolgens zorgt gap: 2rem voor een 2rem tussenruimte tussen elke rij en kolom in het grid. Ten slotte maakt de selecteur .full-width containers met deze klasse mogelijk om zich uit te strekken over de twee kolommen in plaats van in één kolom te blijven.

Sla je wijzigingen op in styles.css. Open vervolgens een webbrowser naar keuze. Selecteer het menu-item Bestand in de browser en selecteer vervolgens de optie Openen. Navigeer vervolgens naar je projectmap en laad je index.html-bestand in de browser. De volgende afbeelding toont hoe de pagina wordt weergegeven in de browser:

Het formulier wordt weergegeven in een witte doos op een lichtgrijze achtergrond. Elk formulierelement is verdeeld over het raster met de bovenste vier items die afwisselend tussen de twee kolommen staan en de laatste drie gestapeld, waarbij ze de twee kolommen overspannen. De standaardstijl van de formulierelementen is zoals ze verschijnen in Firefox; elke browser heeft een andere standaard voor het stylen van formulierelementen.

In dit gedeelte stel je de initiële HTML en CSS in die nodig zijn om met formulierelementen te werken. Je hebt ook geleerd dat elke browser de styling van deze elementen op een andere manier afhandelt. In het volgende gedeelte ga je de appearance-eigenschap gebruiken om de styling van formulierelementen gelijk te maken in alle browsers.

Resetten van Formulierstijlen met de appearance-Eigenschap

Elke browser behandelt de visuele vormgeving van formulierelementen op een andere manier. Vaak gaat de vormgeving van deze elementen verder dan de initiële mogelijkheden van CSS en volgt het de esthetiek van het besturingssysteem of de eigen ontwerptaal van de browser. Om consistente vormgeving voor alle browsers te creëren, zult u in deze sectie de eigenschap appearance en andere eigenschappen gebruiken om de standaard browserstijlen te verwijderen.

Om te beginnen opent u styles.css in uw teksteditor. Maak een nieuwe groepselecteur bestaande uit button, fieldset, input, legend, select en textarea. Voeg vervolgens binnen de selectorblok de eigenschap appearance toe en stel deze in op none, zoals aangegeven in onderstaande codeblok:

styles.css
...
button,
fieldset,
input,
legend,
select,
textarea {
  appearance: none;
}

De appearance-eigenschap is de bedoelde manier om de speciale vormgeving van formulierelementen te verwijderen. Vanwege de ouderdom en implementatie van deze eigenschap vereisen de meeste browsers nog steeds een vendor-prefix die aan de eigenschapsnaam wordt toegevoegd. Een vendor-prefix is een speciale gecodeerde toevoeging die aan de eigenschapsnaam wordt toegevoegd als identificatie voor een specifieke browser. Voor Chrome, Safari en recente versies van Edge en Opera is dat prefix -webkit-. Firefox gebruikt het prefix -moz-.

Wanneer u werkt met leveranciersvoorvoegsels, is het belangrijk om de versies van het voorvoegsel van een eigenschap eerst te plaatsen en te eindigen met de niet-geprefixte versie. Op deze manier zullen oudere browsers die alleen de geprefixte eigenschap ondersteunen het voorvoegsel gebruiken, maar nieuwe browsers die zowel het voorvoegsel als de niet-geprefixte versies ondersteunen, zullen de niet-geprefixte standaardversie gebruiken. Voeg de gemarkeerde voorvoegsel appearance eigenschappen toe zoals geformatteerd in de volgende codeblok:

styles.css
legend,
fieldset,
select,
textarea,
input,
button {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}

Sla uw wijzigingen op in styles.css en open vervolgens index.html in uw browser. De appearance eigenschappen hebben de versierde opmaak verwijderd en zijn overgegaan naar een eenvoudigere stijl, zoals weergegeven in de volgende afbeelding:

De appearance eigenschap staat alleen toe om de browser-specifieke opmaak te wijzigen. De grootste verandering die de waarde van de appearance: none eigenschap heeft gemaakt, was het volledig verwijderen van de selectievakjes en selectierondjes. Voor de rest van de formulierelementen zijn nog enkele eigenschappen nodig om de standaardstijlen volledig te verwijderen. De gemarkeerde CSS-eigenschappen in het volgende codeblok voegen de benodigde stijlen toe om de standaardstijlen te verwijderen:

styles.css
...
button,
fieldset,
input,
legend,
select,
textarea {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background-color: transparent;
  border: none;
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

Deze CSS verwijdert de achtergrondkleur en herstelt de parameters van het boxmodel. Niet al deze stijlen zijn nodig voor alle elementen, maar het is acceptabel om deze resetstijlen over alle elementen te groeperen.

Sla uw wijzigingen op in styles.css, vernieuw vervolgens index.html in de browser. De formulierelementen zijn visueel verdwenen van de pagina, zoals te zien is in de volgende afbeelding:

In deze sectie hebt u appearance en aanvullende eigenschappen gebruikt om de standaardstijlen volledig te verwijderen van de formulierelementen. U hebt ook leveranciersvoorvoegsels gebruikt om de eigenschap op de juiste manier toe te passen voor toekomstige browserversies. In de volgende sectie zult u beginnen met het aanpassen van de visuele vormgeving van de formulierelementen.

Het instellen van consistente stijlen over formulierelementen

Nu de standaardbrowserstijlen volledig zijn verwijderd, zult u een consistente aangepaste esthetiek toepassen op alle formulierelementen. Dit zal het maken van verschillende groepselectoren inhouden die specifieke formulierkenmerken targeten om de juiste stijlen te ontvangen.

Om te beginnen opent u styles.css in uw teksteditor. Maak vervolgens een groepselector bestaande uit input, select, en textarea. Voeg de gemarkeerde stijlen toe vanuit de volgende codeblok:

styles.css
...
legend,
fieldset,
select,
textarea,
input,
button {
  ...
}

input,
select,
textarea {
  border: 2px solid #333;
  background-color: white;
  border-radius: 0.25rem;
}

Deze stijlen voegen een 2px donkergrijze rand toe rond elk van de invoerelementen, samen met een witte achtergrond en afgeronde hoeken.

Vervolgens zult u stijlen toepassen voor de invoerelementen die tekst bevatten. U zult een attribuutselector gebruiken om aan te geven welke input-elementen moeten worden getarget op basis van hun type-attribuutwaarde. De gemarkeerde CSS in het volgende codeblok biedt de stijlen voor de benodigde elementen:

styles.css
...
input,
textarea,
select {
  ...
}

input[type="text"],
input[type="email"],
select,
textarea {
  font: 1.25rem / 1.5 sans-serif;
  display: block;
  box-sizing: border-box;
  width: 100%;
  padding: 0.5rem 0.75rem;
}

Deze stijlen passen een consistente lettergrootte en -familie toe op alle elementen. Het element <textarea> erft bijvoorbeeld niet de letterinstellingen van het body-element. De eigenschappen display, box-sizing, width en padding zorgen voor een consistente lay-out en structuur voor elk van deze gegevenselementen.

Sla uw wijzigingen op in styles.css en open vervolgens index.html in uw webbrowser. Zoals weergegeven in de volgende afbeelding, hebben de velden nu een dikkere donkergrijze rand eromheen en de tekst van het <select>-element is nu veel groter:

Vervolgens zijn er twee elementen die wat speciale opmaak nodig hebben naast de brede opmaak die u al hebt geschreven. De eerste is om meer hoogte te geven aan de textarea, en de tweede is om een aangepaste vervolgkeuzepijl toe te passen op het <select>-element.

Keer terug naar styles.css en voeg een selector voor het textarea-element toe. Binnen het selectorblok, maak een min-height-eigenschap ingesteld op een waarde van 10rem. Hierdoor wordt een groter initiële gebied gecreëerd voor de formuliergebruiker om tekst in te vullen. De gemarkeerde CSS in het volgende codeblok illustreert hoe dit is geschreven:

styles.css
...
input[type="text"],
input[type="email"],
select,
textarea {
  ...
}

textarea {
  min-height: 10rem;
}

Na het toevoegen van de stijlen voor de textarea, is het volgende om een image-directory te maken. Dat kan worden gedaan door het volgende uit te voeren in uw opdrachtprompt vanuit dezelfde directory als uw index.html– en styles.css-bestanden:

  1. mkdir images

Voer vervolgens de volgende curl-opdracht uit om de eerste afbeelding te downloaden waarmee je gaat werken naar de nieuwe images-map:

  1. curl -sL https://assets.digitalocean.com/articles/68129/down-arrow.svg -o images/down-arrow.svg

De afbeelding die je hebt gedownload is een SVG, wat een opmaaktaal is die vergelijkbaar is met HTML met als doel vormen te tekenen.

Om deze nieuwe afbeelding aan het <select>-element toe te voegen, ga terug naar styles.css. Maak vervolgens een select-element-selector aan en voeg een background-eigenschap toe met de gemarkeerde waarde uit het volgende codeblok:

styles.css
...
textarea {
  min-height: 10rem;
}

select {
  background: url("images/down-arrow.svg") no-repeat center right 0.75rem;
}

Deze background-eigenschap laadt de afbeelding in de achtergrond van het <select>-element en herhaalt de afbeelding niet. Vervolgens wordt de afbeelding verticaal gecentreerd met center en wordt deze vanaf de rechterkant verschoven met right 0.75rem.

Sla je wijzigingen op in styles.css, keer dan terug naar je browser om de pagina te vernieuwen. De <textarea> is nu ongeveer twee keer zo hoog als zijn oorspronkelijke hoogte en het <select>-element heeft een blauwe naar beneden wijzende pijl aan de rechterkant. De volgende afbeelding illustreert hoe dit in de browser wordt weergegeven:

Gedurende deze sectie heb je een aangepaste esthetiek gecreëerd voor de invoerelementen van het formulier. Je hebt ook een achtergrond gemaakt voor het <select>-element om de standaardpijl te vervangen. In de volgende sectie zul je aangepaste keuzerondjes en selectievakjes maken en de geselecteerde status toepassen wanneer ze zijn aangevinkt.

Aanpassen van keuzerondjes en selectievakjes met de :checked Pseudoklasse

Nu je het basisuiterlijk van het formulier hebt gemaakt, is het tijd om die visuele stijl toe te passen op de interactieve input-elementen van een keuzerondje en selectievakje.

Begin met het openen van styles.css in je teksteditor. Je zult de input-elementen met een type-attribuut van radio of checkbox aanpassen om een gelijke hoogte- en breedtewaarde te hebben. Vervolgens zul je de keuzerondjes omzetten in cirkels. De gemarkeerde delen van de volgende codeblok laten zien hoe dit is opgemaakt:

styles.css
...
select {
  ...
}

input[type="radio"],
input[type="checkbox"] {
  height: 1.5em;
  width: 1.5em;
  vertical-align: middle;
}

input[type="radio"] {
  border-radius: 50%;
}

De vertical-align-eigenschap is bedoeld voor het uitlijnen van inline tekstitems. Door dit in te stellen op middle, zullen de invoervelden in het midden van de tekst uitlijnen. Vervolgens zal de radio-input met een border-radius-eigenschap van 50% een cirkel creëren omdat de height en width gelijk zijn.

Sla je wijzigingen op in styles.css en open vervolgens index.html in je browser. De twee keuzerondjes en het selectievakje zijn nu groter en meer opvallend zoals weergegeven in de volgende afbeelding:

Als je zou interageren met de radioknoppen of het selectievakje, zou er niets zichtbaars gebeuren. De eigenschap appearance verwijdert ook de geselecteerde indicatoren voor deze typen invoer. Vervolgens zul je de :checked pseudo-klasse-selector gebruiken om stijlen toe te passen op het geselecteerde invoeritem.

Ga terug naar styles.css en maak een nieuwe selector voor de radioknopinvoer met een :checked pseudo-klasse. Voeg vervolgens binnen het selectieblok een background-image toe met een radial-gradient zodat een ingevulde stijl kan worden toegepast op geselecteerde radioknoppen. De gemarkeerde CSS uit de volgende codeblok laat zien hoe dit is opgemaakt:

styles.css
...
input[type="radio"] {
  border-radius: 50%;
}

input[type="radio"]:checked {
  background-image: radial-gradient(
    hsl(213, 73%, 50%) 40%,
    transparent calc(40% + 1px)
  );
}

De calc()-functie maakt het mogelijk om de eigenschap transparent in te stellen 1px na de kleurwaarde, waardoor er een solide blauwe cirkel binnen het invoerveld ontstaat.

Sla je wijzigingen op in styles.css en keer terug naar index.html in je browser. De radioknoppen hebben nu een solide blauwe cirkel omgeven door wit binnen het invoerveld. De volgende afbeelding laat de geselecteerde radioknop Ja zien:

Vervolgens zal het selectievakje een achtergrondafbeelding gebruiken om de :checked staat aan te geven, vergelijkbaar met de pijl van de <select>-dropdown.

Voer de volgende curl-opdracht uit om de afbeelding van het vinkje naar je images-directory te downloaden:

  1. curl -sL https://assets.digitalocean.com/articles/68129/check.svg -o images/check.svg

Nu je de afbeelding hebt gedownload en klaar voor gebruik, keer terug naar styles.css in je teksteditor.

Voeg vervolgens een input[type="checkbox"] selector toe met een :checked pseudo-klasse eraan gekoppeld. In het selectorblok voeg je een background eigenschap toe die het check.svg afbeelding laadt en schaalt zodat het in het vak past. De gemarkeerde CSS in het volgende codeblok geeft aan hoe dit is geschreven:

stlyes.css
...
input[type="radio"]:checked {
  ...
}

input[type="checkbox"]:checked {
  background: url('images/check.svg') no-repeat center / 75% auto;
}

De waarden van de background eigenschap zorgen ervoor dat de controleafbeelding wordt gecentreerd in de container, niet wordt herhaald en proportioneel wordt verkleind met 75%.

Sla je wijzigingen op in styles.css en vernieuw de pagina in de browser. Wanneer je het selectievakje Ontvang onze nieuwsbrief selecteert, verschijnt er nu een vinkje binnenin, zoals geïllustreerd in de volgende afbeelding:

In deze sectie heb je aangepaste selectievakjes en invoervelden gemaakt en ervoor gezorgd dat ze hun geselecteerde status aanpassen door het gebruik van de :checked pseudo-klasse. In de volgende sectie ga je de <label> en <legend> elementen op de pagina vormgeven.

Speciale stijlen toevoegen aan labels en legendes

De volgende elementen die vorm moeten worden gegeven zijn de <label> en <legend> elementen in het formulier. Er worden twee verschillende stijlen gebruikt: een kleine labelstijl voor de selectievakjes en een grote labelstijl voor de overige elementen.

Open index.html in uw teksteditor. U zult een class-attribuut toevoegen aan elk <label> en <legend> met een waarde van large-label of small-label, zoals aangegeven in het volgende codeblok:

index.html
...
<form>
  <div>
    <label for="name" class="large-label">Name</label>
    <input id="name" type="text" />
  </div>
  <div>
    <label for="email" class="large-label">Email</label>
    <input id="email" type="email" />
  </div>
  <div>
    <label for="comp" class="large-label">Favorite CSS Compiler</label>
    ...
  </div>
  <div>
    <fieldset>
      <legend class="large-label">Are you familiar with CSS Grid?</legend>
      <input type="radio" name="grid" id="yes" value="yes" />
      <label for="yes" class="small-label">Yes</label>
      <input type="radio" name="grid" id="no" value="no" />
      <label for="no" class="small-label">No</label>
    </fieldset>
  </div>
  <div class="full-width">
    <label for="message" class="large-label">Message</label>
    <textarea id="message"></textarea>
  </div>
  <div class="full-width">
    <input type="checkbox" id="newsletter" />
    <label for="newsletter" class="small-label">Receive our newsletter?</label>
  </div>
  ...
</form>
...

Sla deze toevoegingen op naar index.html, open vervolgens styles.css in uw teksteditor.

In styles.css, voeg een .large-label klassenselector toe en voeg de volgende eigenschappen toe zoals aangegeven in het volgende codeblok:

styles.css
...
.full-width {
  grid-column: span 2;
}

.large-label {
  display: inline-block;
  font: bold 1.5rem sans-serif;
  margin-bottom: 0.5rem;
}
...

Deze stijlen stellen de large-label-elementen in om groot en vetgedrukt te zijn met een lettergrootte van 1.5rem, wat gelijk is aan 24px. Dan zorgt de margin-bottom-eigenschap voor wat ruimte tussen het label en de bijbehorende elementen.

Sla deze wijziging op naar styles.css en open index.html in uw webbrowser. De labeltekst boven het gegevensinvoerveld zal groot en vetgedrukt zijn, zoals weergegeven in de volgende afbeelding:

Keer terug naar styles.css en maak een andere klassenselector voor .small-label. Aangezien dit de labels zijn die rechts van een selectievakje of een keuzerondje staan, zullen ze wat andere opmaak- en grootte-instellingen nodig hebben vergeleken met de .large-label. Voeg de gemarkeerde CSS toe aan uw styles.css vanuit het volgende codeblok:

styles.css
...
.large-label {
  display: inline-block;
  font: bold 1.5rem sans-serif;
  margin-bottom: 0.5rem;
}

.small-label {
  vertical-align: middle;
  display: inline-block;
  margin-left: 0.25rem;
  margin-right: 1.5rem;
  font: 1.25rem sans-serif;
}
...

De vertical-align: middle zal de tekst iets verplaatsen. Het lettertype is ingesteld op 1.25rem, wat gelijk is aan 20px, met een sans-serif lettertype. De margin-eigenschappen aan de linkerkant en rechterkant zorgen voor ruimte tussen de invoervelden en het label.

Sla je updates op in styles.css en vernieuw index.html in de browser. De labels naast de keuzerondjes en het selectievakje zijn nu groter en bieden meer ruimte, zoals weergegeven in de volgende afbeelding:

In deze sectie heb je stijlen gemaakt voor twee verschillende soorten labels, afhankelijk van hun relatie tot de bijbehorende invoerwaarde. De labels vallen nu meer op, waardoor ze gemakkelijker leesbaar zijn en de navigatie door het formulier verbeterd wordt. In de volgende sectie zal je voorbeeldgegevens opmaken door gebruik te maken van het placeholder-attribuut.

Placeholder-inhoud verstrekken met het ::placeholder-pseudo-element

Placeholder-inhoud op een input– of textarea-element geeft formuliergebruikers een visuele demonstratie van het soort informatie dat wordt gevraagd en hoe deze moet worden opgemaakt. Het placeholder-attribuut wordt toegevoegd aan de HTML met een beschrijvende waarde. Vervolgens maakt het ::placeholder-pseudo-element aanpassing van de weergave van de tekst mogelijk.

Om te beginnen met het maken van tijdelijke inhoud, opent u index.html in uw teksteditor. Voeg een placeholder-attribuut toe aan de naamtekst <input />, het e-mail <input /> en de <textarea>-elementen. De gemarkeerde HTML in de volgende codeblok geeft aan waar de placeholder moet worden toegevoegd en de waarde die moet worden gebruikt:

index.html
...
<form>
  <div>
    <label for="name" class="large-label">Name</label>
    <input id="name" type="text" placeholder="First or Full Name" />
  </div>
  <div>
    <label for="email" class="large-label">Email</label>
    <input id="email" type="email" placeholder="[email protected]" />
  </div>
  ...
  <div class="full-width">
    <label for="message" class="large-label">Message</label>
    <textarea id="message" placeholder="Leave a message…"></textarea>
  </div>
  ...
</form>
...

Sla uw wijzigingen op in index.html, open vervolgens de pagina in een webbrowser. Deze drie tekstinvoervelden hebben nu inhoud erin. Zodra deze tekstvelden zijn geselecteerd en inhoud is toegevoegd, wordt de placeholder-tekst door de browser verwijderd. De volgende afbeelding illustreert hoe de standaard placeholder-stijlen eruitzien in de browser:

Om de placeholder te stylen, opent u styles.css in uw teksteditor. Voeg een groepselector toe voor input::placeholder en textarea::placeholder. Zorg ervoor dat u dubbele dubbele punten tussen de selector en het pseudo-element gebruikt, omdat dit is hoe de browser het onderscheid maakt tussen een pseudo-klasse en een pseudo-element. De gemarkeerde CSS in het volgende codeblok laat zien hoe dit is geschreven:

styles.css
...
textarea {
  min-height: 10rem;
}

input::placeholder,
textarea::placeholder {
  opacity: 1; /* Firefox */
  color: hsl(213, 73%, 50%);
}

select {
  background: url("images/down-arrow.svg") no-repeat center right 0.75rem;
}
...

Het enige wat opgemerkt moet worden, is dat Firefox een opacity-waarde van 1 vereist om de volledige kleurwaarde te hebben. Anders verlaagt Firefox de opacity, waardoor de tekstkleur wordt gedimd en afhankelijk van de kleurwaarde toegankelijke kleurcontrastproblemen ontstaan. Omdat dit een situatie is die alleen bij Firefox voorkomt, staat er een opmerking om het doel van de aanwezigheid van de opacity-eigenschap uit te leggen.

Sla uw wijzigingen op in styles.css en keer terug naar de browser om index.html te vernieuwen. De tijdelijke tekst heeft nu dezelfde blauwe kleur als die wordt gebruikt voor de vervolgkeuzepijl en geselecteerde toestanden voor de keuzerondje- en selectievakje. De volgende afbeelding illustreert hoe de browser de placeholder inhoud weergeeft:

Met dit gedeelte heeft u placeholder inhoud gemaakt voor tekstinvoervelden en deze gestileerd met behulp van het ::placeholder pseudo-element. In het volgende gedeelte zult u aangepaste stijlen maken voor formulier <button> elementen.

Interactieve knopstijlen maken

In webformulieren worden <button> elementen vaak gebruikt om een formulier te verzenden of opnieuw in te stellen. In index.html zijn er twee knoppen, één met een type van submit en de andere van reset. Beide zijn functioneel nuttig, maar voeren tegenovergestelde acties uit. De submit knop zal het formulier doorsturen naar een processor, terwijl de reset knop alle ingevoerde gegevens uit het formulier wist. Vanwege deze verschillende acties moeten de <button> elementen er ook visueel anders uitzien.

Om te beginnen, open styles.css in je teksteditor en maak een button elementselector aan. In deze selectorblok voeg je de stijlen toe die gedeeld worden tussen de submit en reset <button> elementen, zoals aangegeven in onderstaande codeblok:

styles.css
...
input[type="checkbox"]:checked {
  background: url("images/check.svg") no-repeat center / 75% auto;
}

button {
  font: 1.25rem sans-serif;
  border-radius: 0.25rem;
  cursor: pointer;
  padding: 0.75rem 1.25rem;
}

De font zet beide knoppen op dezelfde lettertype en grootte. Vervolgens voegt de border-radius een afgeronde hoek toe aan beide knoppen. De cursor eigenschap verandert de stijl van de cursor naar een handstijl aanwijzer. Als laatste definieert de padding eigenschap de ruimte rondom de binnenkant van de knop.

Sla je wijzigingen op in styles.css en open dan index.html in je webbrowser. De tekst in de knop zal groter worden en de ruimte tussen de tekst zal visueel toenemen door de padding. De volgende afbeelding toont hoe de knoppen worden weergegeven in de browser:

Keer vervolgens terug naar styles.css om stijlen toe te voegen voor elk knop type door gebruik te maken van een attribuutselector die elk target. Voor de submit knop, voeg een blauwe background-color en wit tekstkleur toe. De reset knop krijgt een link-achtige onderstreping en een margin om meer ruimte tussen de knoppen toe te voegen. Voeg de aangegeven CSS toe vanuit onderstaand codeblok aan je styles.css bestand:

styles.css
...
button {
  ...
}

button[type="submit"] {
  background-color: hsl(213, 73%, 50%);
  color: white;
}

button[type="reset"] {
  text-decoration: underline;
  margin-left: 1rem;
}

Sla deze toevoegingen op in styles.css en vernieuw vervolgens index.html in je teksteditor. De submit knop is nu opvallend blauw en wit, terwijl de reset knop gedempt onderstreepte tekst is, zoals weergegeven in de volgende afbeelding:

Het <button>-element heeft standaard geen :hover-status, dus voeg je deze nu toe aan je stijl. Een :hover-status is handig om cursorgebruikers visuele feedback te geven dat de cursor zich op de knoppen bevindt.

Om :hover-statussen te maken voor deze <button>-elementen, keer terug naar styles.css in je teksteditor. Stel de submit-knop’s achtergrondkleur in om te verdonkeren bij hover. Maak vervolgens de reset-knop de onderstreping te laten verdwijnen bij hover. De gemarkeerde HTML in de volgende codeblok geeft aan hoe je deze stijlen moet schrijven:

styles.css
...
button[type="submit"] {
  background-color: hsl(213, 73%, 50%);
  color: white;
}

button[type="submit"]:hover {
  background-color: hsl(213, 73%, 40%);
}

button[type="reset"] {
  text-decoration: underline;
  margin-left: 1rem;
}

button[type="reset"]:hover {
  text-decoration: none;
}

Sla je wijzigingen op in styles.css en keer dan terug naar de browser om index.html te vernieuwen. Zoals de volgende animatie laat zien, veranderen de <button>-elementen van stijl wanneer de muisaanwijzer erover zweeft:

In dit gedeelte heb je stijlen gemaakt voor de <button>-elementen om hun verschillen visueel opvallend te maken. Je hebt aangepast hoe de cursor eruitziet bij hover door de cursor-eigenschap aan te passen. Je hebt ook aangepaste stijlen gemaakt om toe te passen op elke knop om verdere visuele feedback te geven. In het laatste gedeelte zul je verdere visuele activiteitsfeedback geven door stijlen te maken wanneer een formulierelement momenteel in gebruik is met de :focus-pseudo-klasse.

Verduidelijking van de actieve formulievelden met :focus

Bij het invullen van een formulier is het belangrijk dat de gebruiker weet op welk veld ze momenteel werken. Dit kunt u bereiken met behulp van de pseudo-klasse :focus. Standaard gebruiken browsers een outline-eigenschap om aan te geven wanneer een element :focus heeft, maar soms kan dit geen opvallende indicator zijn, of het kan botsen met andere visuele aspecten van het ontwerp. In dit gedeelte gaat u een aangepaste :focus-status maken die overeenkomt met het esthetische van uw formulier.

Om te beginnen met werken met formulier veld :focus-staten, opent u styles.css in uw teksteditor. Maak een groepsselector voor input, select en textarea, allemaal met een :focus-pseudo-klasse, zoals aangegeven in de volgende codeblok:

styles.css
...
input,
select,
textarea {
  ...
}

input:focus,
select:focus,
textarea:focus {
  outline: none;
  box-shadow: 0 0 0 4px hsl(213, 90%, 70%);
}

input[type="text"],
input[type="email"],
select,
textarea {
  ...
}
...

Deze stijlen verwijderen de standaard outline-waarde van de browser en vervangen de stijl door een dikke blauwe lijn gemaakt met de box-shadow-eigenschap. De eerste drie waarden van de box-shadow zijn voor de plaatsing van de schaduw en de hoeveelheid vervaging. De vierde wordt de spreiding genoemd, die in dit geval een 4px lijn rond het gefocuste element creëert.

Vervolgens zullen de knoppen een iets andere focusstatus krijgen, aangezien de submit-knop dezelfde blauwe kleur heeft. Het doel en de bedoeling van een focusstatus is om opvallende aandacht te vestigen op het gefocuste element, dus u zult deze contouren op verschillende manieren onderscheiden.

Voeg een button:focus selector toe aan styles.css. In het selectorblok, schakel de standaard outline uit en voeg een box-shadow eigenschap toe. De plaatsing, vervaging en verspreidingswaarden blijven hetzelfde als de invoervelden, maar de kleur wordt zwart in plaats van blauw, zoals aangegeven in het volgende codeblok:

styles.css
...
button {
  ...
}

button:focus {
  outline: none;
  box-shadow: 0 0 0 4px black;
}

button[type="submit"] {
  ...
}
...

Sla uw wijzigingen op in styles.css en keer terug naar uw browser. Ververs index.html en begin op de Tab-toets te drukken om de focus tussen elk element in het formulier te verschuiven. De volgende animatie toont hoe de focusstijl wordt toegepast wanneer de focus verandert met de Tab-toets:

In dit gedeelte heeft u focusstatusstijlen gemaakt die duidelijke visuele feedback bieden wanneer een formulierelement de focus heeft. Deze visuele opmaak is nuttig voor gebruikers van muis-, aanraak- en toetsenbordinvoer.

Conclusie

Formulieren zijn een veelvoorkomend element in webdesign. Ze stellen gebruikers in staat om te interageren met apps, inhoud te doorzoeken en feedback te geven. In deze tutorial heb je een volledig uitgerust formulier gemaakt en gestileerd. Je hebt de standaardstijlen van de browser verwijderd met de appearance-eigenschap en een nieuwe aangepaste esthetiek gecreëerd voor verschillende elementen. Je hebt de :checked pseudo-klasse gebruikt om geselecteerde staten te maken voor keuzerondjes en selectievakjes. Vervolgens heb je placeholder-inhoud toegevoegd en de opmaak aangepast met het ::placeholder-pseudo-element. Nadat je aangepaste knopstijlen hebt gemaakt, heb je :focus-stijlen toegepast om waardevolle visuele interactie terug te geven aan de formuliergebruikers.

Als je meer CSS-tutorials wilt lezen, probeer dan de andere tutorials in de How To Style HTML with CSS-serie.

Source:
https://www.digitalocean.com/community/tutorials/how-to-style-common-form-elements-with-css