Lav et grid med tre kolonner, som er lige brede vha. grid-template-columns og fr-enheder. Tilføj lidt mellemrum vha. gap: 10px.
Hints
-
display -
grid-template-columns -
gap
-
grid -
1fr
Bliv fortrolig med CSS Grid, Flexbox og Subgrid gennem praktiske, interaktive opgaver.
Her kan du øve dine færdigheder i CSS Grid, Flexbox og Subgrid gennem praktiske, interaktive opgaver. Øvelserne dækker både de grundlæggende og de mere avancerede teknikker inden for moderne layout-metoder.
Du får mulighed for at arbejde med alt fra simple grid- og flex-strukturer til mere komplekse features som placering, auto-fit, navngivning af grid-linjer og Subgrid-nedarvning. Undervejs får du også indblik i, hvornår de forskellige teknikker er bedst at bruge, og hvordan de kan kombineres for at skabe fleksible, responsive layouts på tværs af flere niveauer.
Formålet er, at du gennem hands-on erfaring opnår en intuitiv forståelse af, hvordan man bygger moderne CSS-layouts. Du vælger selv, om du vil dykke ned i Grid, Flexbox, Subgrid – eller dem alle!
.container og de enkelte bokse.
Tip: Du kan bruge genveje som df eller dg, hvis
du hurtigt vil skrive hhv. display: flex; og display: grid;. Du kan også klikke direkte på kode-eksemplerne i hints og i
opgavebeskrivelserne, for at indsætte dem i tekstfeltet.
Lav et grid med tre kolonner, som er lige brede vha. grid-template-columns og fr-enheder. Tilføj lidt mellemrum vha. gap: 10px.
display grid-template-columns gap grid 1fr
Lav tre kolonner, hvor den midterste ikke må fylde mere end dens tekstindhold vha. auto (se reference). De to øvrige kolonner skal dele resten af den overskydende plads.
grid-template-columns 1fr auto
Lav tre lige brede kolonner, samt fire rækker, som hver er 50px (brug grid-auto-rows). .box-2 skal spænde over to rækker og to kolonner og begynde på række 2 i kolonne 2.
grid-auto-rows grid-column grid-row span <n>
Giv .container en højde på 250px vha. height. Definér derefter to kolonner af 1fr 1.5fr og brug gap til at indstille mellemrum mellem boksene. Tilføj derefter tre bokse, og se hvordan boksene former et flag.
height gap
Lav fire lige brede kolonner som hver fylder lige meget (1fr) vha. repeat()-funktionen. Lad .box-1 spænde over 2 rækker og 2 kolonner, og lad .box-4 spænde over 2 rækker. Du kan evt. tilføje gap, for at lave mellemrum mellem boksene.
Tilføj derefter et par bokse for at se, hvordan disse lægger sig i grid’et. Træk i vinduet med dine bokse (nederst i højre hjørne ) for at se, hvordan boksene opfører sig i forskellige størrelser.
grid-column grid-row gap repeat(<n>, <x>)
Lav fire lige brede kolonner samt fire rækker af 50px (brug grid-auto-rows). Hver boks skal spænde over to rækker og to kolonner og skal overlappe hinanden (se reference). Placér boksene vha. linjenumrene i dit grid; fx 1 / 3.
Tilføj derefter seks bokse for at se, hvordan disse lægger sig i grid’et. Du kan evt. indstille gap til 10px, for at lave mellemrum mellem boksene.
grid-column grid-row gap
Lav tre kolonner, hvor den første og sidste kolonne optager lige meget plads vha. 1fr. Angiv en rækkevidde mellem 0 (min) og 300px (max) via funktionen minmax() til den midterste kolonne. .box-1 skal begynde på kolonne-linje 1 og slutte på kolonne-linje 4, og .box-2 skal begynde på kolonne-linje 2 og slutte på kolonne-linje 3.
Træk i vinduet med dine bokse (nederst i højre hjørne ) for at se, hvordan grid’et opfører sig i forskellige størrelser. .box-2 skal forblive 300px i bredden, indtil der ikke er mere plads, hvorefter den skal følge forælder-containerens bredde (se reference).
grid-template-columns minmax(<min>, <max>) Gør .container til en grid-container, og brug derefter place-content til at placere .box-1 i midten containeren.
Placér derefter .box-1 forskellige steder i containeren vha. start, end og stretch.
place-content kan håndtere to værdier.
place-content center
Gør .container til en grid-container og lav to kolonner, der er lige brede. Brug derefter place-self til at placere .box-2 hhv. i midten på den vertikale akse og i starten af den horisontale akse.
place-self kan håndtere to værdier (den vertikale akse og den horisontale akse).
place-self center start
Gør .container til en grid-container, og lad alle bokse dække samme grid-celle ved at sætte grid-column og grid-row til 1 på .box. Brug derefter place-self til at placere boksene i hvert hjørne af containeren. Begynd med .box-5.
place-self kan håndtere to værdier.
place-self center start end
Definér et grid med tre kolonner og tre rækker (grid-template-rows). Den midterste kolonne-celle skal være tre gange så stor som de to øvrige vha. 3fr. Første og sidste række skal optage lige meget plads vha. 1fr, hvorimod den midterste række skal være auto. Tilføj derefter gap: 10px.
Lad img spænde over alle rækker og kolonner, og placér efterfølgende .box-1, så den ligger i midsterste grid-celle. De to øvrige bokse skal ligge i hhv. første og sidste række og være placeret, så de ligger sig tæt op af .box-1 (se reference).
grid-template-rows place-self
Definér et grid med tre rækker, der repræsenterer hhv. en <header>, <main> og <footer>.
main skal have en fleksibel højde, så den kan vokse med indholdet, og højden på header og footer skal defineres af indholdet vha. min-content.
Træk derefter i vinduet med dine bokse (nederst i højre hjørne ) for at se, hvordan header og footer altid er placeret hhv. øverst og nederst i grid’et.
(NB! I et rigtigt projekt, kræver effekten at body-elementet har en minimumshøjde på 100% af viewporten, fx min-height: 100svh).
grid-template-rows min-content
Definér et grid med tre rækker og lad .box-1 spænde over alle tre. Brug derefter grid-auto-flow til at generere yderligere to kolonner med de resterende bokse.
grid-auto-flow
Definér et grid med to kolonner, og sørg for, at alle bokse (.box) strækker sig over to rækker. .box-1 skal starte på række-linje 2 i grid’et.
Fordi vi ønsker at lade .box-1 starte på en bestemt position uden at ændre de andre bokses startpunkter, bruger vi grid-row-end: span 2. Dette sikrer, at hver boks strækker sig over to rækker fra sin naturlige startposition, mens .box-1 specifikt placeres i anden række ved hjælp af grid-row-start.
Husk også at sætte aspect-ratio til 3/2.
Når vinduet justeres i højden, skal indholdet altid være centreret i containeren ved hjælp af align-content.
grid-row-start grid-row-end align-content span 2
Få boksene til at definere, hvor mange kolonner der skal være i containeren, ved at bruge repeat() og auto-fit eller auto-fill. Brug minmax() til at definere en minimums- og maksimumsbredde på boksene, hhv. 80px og 1fr, hvilket vil resultere i lige så mange “tracks” som der kan være i containeren med en minimumsstørrelse på 80px.
Med auto-fit og auto-fill kan man styre, hvordan den overskydende plads skal allokeres i en grid-container. Hvis man bruger auto-fit vil boksene udvides, så de fylder hele containeren. Hvis man bruger auto-fill vil containeren allokere det overskydende rum i form af tomme “tracks”, som ikke indeholder bokse.
repeat() minmax() auto-fit auto-fill Tilføj linjenavne til grid-kolonnerne, så elementerne placeres korrekt.
Brug linjenavnene [a-start] og [a-end], [b-start] og [b-end] samt [c-start] og [c-end] til at angive, hvor hver kolonne begynder og slutter ved at placere dem før og efter de relevante kolonner. Bemærk, at når du tilføjer -start og -end til linjenavne, bliver der automatisk oprettet et navngivet område baseret på det navn, du har valgt.
Se referencen ift., hvordan linjenavnene skal placeres for at opnå den ønskede placering af boksene i grid’et.
[a-start] 2fr 2fr [a-end]
Tilføj grid-template-areas til grid’et, så elementerne placeres korrekt.
Brug navnene a, b, c, d og e til at angive, hvor hvert område skal være i grid’et. Nogle af områderne skal strække sig over flere kolonner, så husk at gentage det samme områdenavn, hvor det er nødvendigt.
Se referencen ift., hvordan områderne skal placeres for at opnå det ønskede layout af boksene i grid’et.
grid-template-areas "a a b b" "c d d d"