I denne opplæringen vil vi utforske hvordan du bygger et par forskjellige webformer ved hjelp av CSS Grid. For hvert eksempel vil vi først bruke flyter, og deretter se hvordan samme layout kunne gjøres ved hjelp av CSS Grid.
Hvis du ikke har noen tidligere kunnskaper om CSS-nett, ta en titt på vår nybegynnerserie Understanding the CSS Grid Layout Module. La oss begynne!
I dette oppsettet skal vi dele skjemaet i to kolonner, slik at vi kan vise etikettene til venstre, og inntastingsfeltene til høyre.
En tradisjonell tilnærming til dette oppsettet kan bruke flyter til å gi oss våre kolonner. Legg merke til at vi ikke har et omslag for skjemaelementet; Vi vil direkte stile etikettene og inngangene.
skjema overflow: hidden; label float: left; bredde: 200px; polstring-høyre: 24px; input float: left; bredde: calc (100% - 200px); knappen float: right; bredde: calc (100% - 200px);
Du vil legge merke til at vi bruker calc ()
her, som gjør at vi kan gjøre venstre kolonne fast til 200px bred, mens høyre kolonne forblir flytende.
Her er resultatet, med noen flere stilarter for estetikk:
Vårt mål når du bruker "Grid" er å definere to kolonner, og deretter plassere hvert element i den nødvendige kolonnen.
Det første trinnet er å definere vårt rutenett på foreldreelementet skjema
:
skjema display: grid;
Da må vi dele det rutenettet ved hjelp av gitter-mal-kolonner
:
skjema display: grid; rutenett-mal-kolonner: 200px 1fr;
Basert på ovenstående CSS, vil den første kolonnen ha en fast bredde på 200px
mens den andre vil ta 1fr
("En brøkdel") av gjenværende ledig plass.
Vi må nå definere plasseringen for våre etiketter og innganger. For å gjøre det, vil vi bruke gitter-kolonne
med spesifikke verdier for rutenettene:
For mer om hvordan gridlinjer fungerer, ta en titt på dette raske tipset:
Basert på disse rutenettlinjer, vil vi bruke følgende regler for våre etiketter, innganger og knappen:
etikett grid-column: 1/2; input, button grid-column: 2/3;
Etikettene finner seg i kolonnen som begynner på linje 1 og slutter på linje 2. Inngangene og knappen vil bli plassert i kolonnen som begynner på linje 2 og ender på linje 3.
Til slutt bruker vi gitter-gap
å legge til en rende på 16px mellom radene og kolonnene:
skjema display: grid; rutenett-mal-kolonner: 200px 1fr; grid-gap: 16px;
I dette oppsettet ønsker vi å oppnå følgende:
Det er helt mulig å bygge dette oppsettet ved hjelp av flyter. Imidlertid må vi sette en min-høyde
for den venstre kolonnen, ellers vil den ikke anta hele høyden. Det er andre "tradisjonelle" tilnærminger til dette problemet, men ingen er spesielt pen.
For å oppsummere, med flyter må vi:
min-høyde
til venstre kolonne.overløp: skjult;
for å bevare innpakningshøyden.textarea
og send-knappen, og la dem fylle hele bredden.Det er ganske mye arbeid, ikke sant?
En bedre tilnærming ville være å løse dette med enten Flexbox eller Grid. I dette tilfellet foretrekker jeg å bruke Grid siden vi ordner elementer både horisontalt og vertikalt.
La oss begynne med å erklære et rutenett på vår wrapper og dele den i to kolonner.
.wrapper display: grid; rutenett-mal-kolonner: 1fr 2fr;
Vårt formelement også må bli erklært et rutenett:
skjema display: grid; rutenettmall-kolonner: 1fr 1fr; grid-gap: 20px;
Etter at du har brukt ovennevnte regler, får vi følgende:
Vi må la de to siste elementene fylle hele bredden ved å strekke dem fra rutenett 1 til rutenett 3.
.full bredde grid-column: 1/3;
Tid for vårt siste formoppsett. I dette eksemplet har vi tatt med en inngang for brukere å laste opp profilbildet sitt. Den skal plasseres øverst til høyre.
Vi bygger dette med følgende oppmerkning:
Kortfattet dekker en tradisjonell tilnærming, vi kan oppnå vårt layout med disse trinnene:
stilling: relativ;
til skjemaelementet.La oss ikke dvele på den tradisjonelle tilnærmingen for mye. Med Grid, deler vi skjemaet i to kolonner som følger:
Den første kolonnen tar to ganger det horisontale rommet i den andre kolonnen, som vi vil oppnå ved bruk av fr
enheter:
skjema display: grid; grid-template-kolonner: 2fr 1fr; grid-gap: 20px;
Etter å ha etablert rutenett, må vi legge formelementene mellom rutenett 1 og rutenett 2:
skjema p grid-kolonne: 1/2;
Det neste trinnet er å legge inn filen i den andre kolonnen. For å gjøre det, plasserer vi det mellom rutenett 2 og rutenett 3. Når vi beveger seg vertikalt, vil vi få det til å spenne rader fra rutenett 1 til rutenett 2.
.input-file-wrapper grid-column: 2/3; rutenett: 1/2;
Bra gjort! Vi har dekket flere forskjellige eksempler for bruk av CSS-nettverket når du bygger webformer. Som du har lagt merke til, lagret vi mye tid og krefter ved å skrive noen linjer med kode, i motsetning til bruk av tradisjonelle layoutteknikker. Du kan bruke alle eksemplene ovenfor som starter i dag, takket være CSS @supports
som hjelper oss med å bruke en bestemt funksjon som en forbedring.
Har du forslag til forbedring av disse layoutene? Gi meg beskjed i kommentarene nedenfor!