In deze zelfstudie leren we hoe we kunnen profiteren van flexbox om een responsieve vorm te maken. Wat interessant is (en tegelijkertijd opwindend) is dat we dankzij flexbox onze vorm kunnen opbouwen zonder mediaquery's te gebruiken.
Laten we, voordat we beginnen, kijken naar waar we naartoe zullen werken (bekijk de grotere versie om te zien hoe de indeling van het formulier verandert):
Op dat moment, laten we eerst eens kijken naar de structuur van het formulier. We zullen het als volgt markeren:
.flex-outer
ongeordende lijst om de verschillende formulierelementen te groeperen.flex-binnen
ongeordende lijst om de selectievakjes te groeperen. Dat is het! Door slechts twee ongeordende lijsten te definiëren (we hadden ook bestelde lijsten kunnen gebruiken), hebben we een zeer schone vorm opgebouwd. Hier is hoe het eruit ziet:
Notitie: wij gebruiken de p
element in plaats van de label
element vóór de .flex-binnen
lijst. Dit komt omdat het in dit specifieke geval geen zin heeft om de label
label. Deze tag moet alleen worden gebruikt om een tekstlabel te koppelen aan een formulierbesturingselement.
Dit is de markering voor de selectievakjes:
Met de markup klaar, ziet de onstylige vorm er als volgt uit:
Dit zal niet de meest fantastische vorm zijn die je ooit hebt gezien, maar het werkt! Het is semantisch, toegankelijk en vloeiend; aspecten die aantoonbaar belangrijker zijn dan wat dan ook.
Op dit moment zijn we klaar om enkele stijlen toe te passen.
Laten we beginnen met toevoegen normaliseren en autoprefixer naar onze peninstellingen:
Vervolgens identificeren we de flexcontainers. In ons geval de volgende elementen:
.flex-outer
lijst. .flex-binnen
lijst die alle selectievakjes bevat.Daarnaast willen we de flexitems verticaal centreren over de dwarsas.
Om dit gedrag te bereiken, hebben we een aantal initiële CSS-regels opgesteld:
.flex-outer li, .flex-inner display: flex; flex-wrap: wrap; align-items: center;
De volgende stap is het specificeren van de breedtes voor de flexitems. We beginnen met de flexitems van de .flex-outer
lijst.
De belangrijkste vereisten:
Wat geeft dit ons? Elk label en het bijbehorende formulierelement worden weergegeven op een enkele horizontale rij als de breedte van het formulier ten minste 340 px is. In alle andere gevallen worden alle formulierelementen (behalve de selectievakjes zoals we zo dadelijk zullen zien) verticaal gestapeld.
Notitie: de bovengenoemde waarden zijn willekeurig - u kunt ze aanpassen aan uw behoeften.
.flex-outer> li> label, .flex-outer li p flex: 1 0 120px; maximale breedte: 220 px; .flex-outer> li> label + *, .flex-inner flex: 1 0 220px;
Ten slotte definiëren we voor de submit-knop, die ook een flex-item is, een paar basisstijlen:
.flex-outer li-knop margin-left: auto; opvulling: 8px 16px; rand: geen; achtergrond: # 333; kleur: # f2f2f2; text-transform: hoofdletters; letter-spacing: .09em; grensradius: 2px;
Laten we nu de selectievakjes opmaken. Vergeet niet dat hun flexwikkelaar een minimumbreedte van 220 px heeft.
Eerst stellen we de breedte in van de flexitems die de directe ouders van de selectievakjes zijn tot 100px:
.flex-inner li width: 100px;
Dan profiteren we van de rechtvaardigen-inhoud
eigenschap om ze over de hoofdas uit te lijnen. Let op: deze eigenschap heeft verschillende waarden, maar voor dit voorbeeld zijn we alleen geïnteresseerd in de ruimte tussen
waarde:
.flex-inner rechtvaardigen-inhoud: ruimte-tussen;
Deze waarde werkt goed en stelt ons in staat om een consistente uitlijning voor de selectievakjes en hun respectieve labels te bereiken. Een ding dat we moeten noemen, is dat deze eigenschapswaarde onhandig de elementen van de laatste rij kan verdelen. Bij bepaalde breedte van de viewport zie je zoiets als dit:
Let op de uitlijning van de laatste twee flexitems. Als je om wat voor reden dan ook niet van die lay-out houdt en je wilt dat ze naast elkaar verschijnen, kun je iets als dit proberen:
rechtvaardigen-inhoud
eigendom van de flexwikkelaar.breedte: 50%
).breedte: 25%
in plaats van breedte: 50%
.Bovenal is het belangrijk om twee dingen te begrijpen:
flex: 1 100px
. Voordat we vertrekken, voegen we wat meer esthetiek toe om de dingen representatiever te maken. Selecteer het tabblad CSS in de onderstaande demo om te zien waar kleuren en spatiëring zijn toegevoegd:
Zoals je ziet, hebben we met een minimale opmaak en de kracht van flexbox een responsieve vorm kunnen opbouwen. Hopelijk heb je nu wat nuttige kennis opgedaan die je kan helpen bij het bouwen van je eigen flexbox-formulieren.
Als je dit formulier een stap verder wilt nemen, heb ik twee uitdagingen voor je: