Om øvelserne

Om øvelserne

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!

Sådan laver du en øvelse

  1. Læs opgavebeskrivelsen – den forklarer, hvad du skal opnå med CSS-koden.
  2. Brug tekstfeltet til at skrive eller tilrette CSS’en for .container og de enkelte bokse.
  3. Hvis du vil starte forfra med en opgave, så tryk ESC, mens du har markøren i tekstfeltet, hvorefter du skal bekræfte. Så nulstilles opgaven.
  4. Brug hints og referencelinks under hver opgave, hvis du går i stå.
  5. Når du ser ændringen ske i preview-området, ved du, at din kode virker!
  6. Eksperimentér gerne videre og se, hvordan ændringer påvirker layoutet.

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.

Vis én øvelse ad gangen

OBS: Øvelserne virker pt. ikke optimalt i denne browser.

Følg scroll med scroll() 1 / 11

Få linjen til at vokse fra venstre mod højre, mens du scroller fra toppen til bunden af scrollporten (previewets scrollområde). Knyt animationen til scrollpositionen vha. animation-timeline og scroll().

Hints
  • animation-timeline
  • scroll()
Har du brug for hjælp? Lær mere om scroll()

Følg et element med view() 2 / 11

Få boksen til at rotere 180 grader, fra den kommer ind i scrollporten forneden, til den forlader den foroven. Brug animation-timeline med view().

Bemærk, at view() følger det enkelte elements passage gennem scrollporten, mens scroll() følger hele scrollstrækningen.

Hints
  • animation-timeline
  • view()
Har du brug for hjælp? Lær mere om view()
Rotate me

Afgræns view() med animation-range 3 / 11

Få boksen til at færdiggøre sin rotation, når den er kommet helt ind i scrollporten, vha. animation-range: entry.

Prøv derefter exit, contain og cover, og bemærk, hvornår rotationen begynder og slutter. Prøv også entry 25% entry 75% for at afgrænse rotationen til en del af indgangen.

Hints
  • animation-range
  • entry
  • exit
  • contain
  • cover
Har du brug for hjælp? Lær mere om animation-range
Rotate me

Afslør et billede med clip-path 4 / 11

Afslør billedet fra venstre mod højre, mens det toner ind i scrollporten. Udfyld @keyframes clip-reveal med clip-path og opacity, og knyt animationen til view() på img.

Lad animationen køre fra 20% til 50% af timelinen med ease-out, og behold sluttilstanden med both. Prøv derefter at ændre beskæringen, så billedet afsløres oppefra.

Hints
  • animation
  • animation-timeline
  • animation-range
  • clip-path
  • opacity
  • inset(0 100% 0 0)
  • inset(0)
  • view()
Har du brug for hjælp? Lær mere om clip-path

Lad to bokse tone ind 5 / 11

Få boksene til at tone ind fra hver sin side, når de kommer ind i scrollporten. Lad .box-1 starte 2rem mod venstre med en rotation på -5deg, og .box-2 starte 2rem mod højre med en rotation på 5deg.

Udfyld @keyframes appear-1 og appear-2, og brug dem på hver sin boks. Knyt begge animationer til view(), afgræns dem til 0% 50%, og brug ease-out og both, så boksene ender fuldt synlige uden forskydning eller rotation.

Hints
  • animation
  • animation-timeline
  • animation-range
  • opacity
  • translate
  • rotate
  • view()
  • both
Har du brug for hjælp? Lær mere om view()
I'm a box
I'm a box

Animér et sticky-element 6 / 11

Få boksen til at rotere 360 grader, mens sticky-elementet bliver holdt fast. Brug containerens navngivne timeline --container som animation-timeline på .box.

animation-range: contain er allerede angivet. Slå Debug til for at se containerens og sticky-elementets grænser.

Hints
  • animation-timeline
  • --container
Har du brug for hjælp? Lær mere om view-timeline
I'm a box

Flyt og udton et billede 7 / 11

Få billedet til at bevæge sig 75vh nedad og tone helt ud, mens du scroller de første 100vh. Udfyld @keyframes move med translate og opacity, og knyt animationen til scroll() vha. animation-timeline på img.

Lad animationen køre lineært, afgræns forløbet med animation-range, og sørg for, at billedet forbliver skjult bagefter. Prøv derefter at afslutte animationen ved 50vh, og bemærk, hvordan tempoet ændres. I previewet svarer 100vh til scrollportens højde.

Hints
  • animation
  • animation-timeline
  • animation-range
  • translate
  • opacity
  • scroll()
  • 0 100vh
  • both
Har du brug for hjælp? Lær mere om animation-range

Animér et vandret galleri 8 / 11

Få hver boks til at vokse på vej ind og krympe på vej ud, når du scroller vandret. Brug animation-timeline med view() på inline-aksen. Keyframes med entry og exit er allerede angivet.

Prøv derefter at ændre entry 50% til entry 100%, og bemærk, hvordan indgangen ændrer sig.

Hints
  • animation-timeline
  • view(inline)
Har du brug for hjælp? Lær mere om view()
I'm a box
I'm a box
I'm a box
I'm a box
I'm a box
I'm a box
I'm a box
I'm a box

Del en timeline mellem paneler 9 / 11

Få scroll i venstre panel til at rotere boksen i højre panel 180 grader. Brug timeline-scope på den fælles forælder .scrollport, så begge paneler kan bruge timelinen --scroll.

Timelinen er allerede defineret på .scroller og angivet som animation-timeline på .box, som ligger uden for .scroller.

Hints
  • timeline-scope
  • --scroll
Har du brug for hjælp? Lær mere om timeline-scope
Rotate me

Lad tre kort tone ind forskudt 10 / 11

Få de tre kort til at tone ind og bevæge sig op forskudt fra venstre mod højre, mens containeren kommer ind og bevæger sig videre gennem scrollporten. Knyt alle kortene til containerens fælles timeline --cards.

Brug forskellige animation-range på kortene: Lad det første animere fra entry 0% til entry 100%, det andet fra entry 50% til contain 25% og det tredje fra entry 100% til contain 50%. Det tredje kort begynder dermed først, når containeren er helt inde i scrollporten. Keyframes med en bevægelse på 4rem er allerede angivet.

Prøv derefter at bytte om på kortenes ranges, så det højre kort kommer ind først. Bemærk, at forskydningen følger scrollpositionen, også når du scroller tilbage.

Hints
  • animation-timeline
  • animation-range
  • --cards
  • entry 0% entry 100%
  • entry 50% contain 25%
  • entry 100% contain 50%
Har du brug for hjælp? Lær mere om animation-range
Kort 1
Kort 2
Kort 3

Animér indgang og udgang 11 / 11

Få boksen til at vokse, dreje på plads og tone ind på vej ind i scrollporten. Lad den stå stille og være fuldt synlig, mens den er helt inde. På vej ud skal den krympe, dreje videre og tone ud.

Knyt animationen til view(), og udfyld keyframes med opacity, scale og rotate. Ved entry 0% skal boksen være usynlig, skaleret til 0.6 og roteret -20deg. Ved entry 100% og exit 0% skal den være fuldt synlig med scale: 1 og rotate: 0deg. Ved exit 100% skal den være usynlig, skaleret til 0.6 og roteret 20deg.

Ranges er angivet direkte i keyframes, så du behøver ikke tilføje animation-range. Prøv derefter at ændre entry 100% til entry 50%, så boksen er færdig med sin indgang tidligere.

Hints
  • animation-timeline
  • opacity
  • scale
  • rotate
  • view()
  • entry
  • exit
Har du brug for hjælp? Lær mere om @keyframes
Ind og ud