Animasjon med css

I eksemplet under skal vi bruke tre forskjellige metoder til å animere elementer.

Vi lager en ny tom html side (nytt prosjekt i en ny mappe) som vi kaller animasjon.html
Som vanlig starter vi med ! (emmet abbreviation) som gir oss grunnlaget til en html-side.

Vi skifter title på dokumentet til animasjon, legger til en link:css (emmet) og gir css filen navnet animasjon.css.
(Denne framgangsmåten er forklart i detalj i HTML kapittelet.

I body skriver vi inn følgende html:

<div id="main">
  <div id="himmel">
    <div id="spurv"></div>
    <div id="sol"></div>
  </div>
  <div id="jord">
    <div id="person"></div>
    <div id="kaktus"></div>
  </div>
</div>

I animasjon.css skal vi skrive følgende:

  #main {
    width: 98vw;
    height: 98vh;
  }

  #himmel {  /* øverst på skjermen */
    position: relative;
    height: 60%;
    background-color:rgb(104, 104, 241);  /* lys blå */
  }

  #jord { /* nederst på skjermen */
    position: relative;
    height: 38%;
    background-color: rgb(207, 153, 90);
  }

  #sol {
      position: absolute;
      /* metoden under garanterer at solen står midt på himmelen 
        uansett hvordan bruker endrer størrelse på displayet */
      top: calc(50% - 20px);
      left: calc(50% - 20px);
      width: 40px;
      height: 40px;
      border-radius: 50%;
      background-color: yellow;
  }

Foreløpig vil du bare se en sol som står midt på himmelen over en brun ørken.

Enkel keyframe animasjon

Vi skal nå animere solen , den skal variere littegrann i størrelse:

#sol {
      animation: blink 1s alternate linear infinite;
}

@keyframes blink {
    100% { transform: scale(0.87); }
}

Navnet blink i animation: blink 1s alternate linear infinite; er valgt fritt, skal være beskrivende.
Du kan forenkle animasjonen til animation: blink 1s; , men da kjøres den bare en gang.
alternate animasjone kjøres først framover og deretter tilbake.
1s animasjonen bruker 1s på å endre størrelse fra 100% til 87%
linear endringen skal skje jevt, deault er ease-in-out.
infinite antall ganger animasjonen skal kjøres, her kan du skrive et tall, eller som her - uendelig.

@keyframes blink : her legger vi inn nøkkelbilder forVi skal nå animere solen , den skal variere littegrann i størrelse: animasjonen.
Her angir vi med % hvor langt ut i animasjonen egenskapen gjelder for.
Vi har bare angitt 100% - da vil animasjonen gå fra gjeldende verdi (vanlig scale) til en scale på 0.87 == 87%.

Sprite-sheet animasjon

Vi skal nå legge til en figur som skal vandre over ørkenen. Til dette finner vi en sprite-sheet på nett:

Jeg søkte på puppet sprite sheet walking png og fant dette bilet:

(free to use).

Vi skal bruke rad 3 til å lage en gå-animasjon - en figur som vandrer over ørkenen.
Du kan finne denne filen på nettet - eller lagre bildet over, css koden under virker dersom du lagrer bildet i prosjektmappa
med navnet puppet.png .

#person {
  position: absolute;
  left: 30px;
  top: 30px;
  width: 112px;
  height: 112px;
  background-image: url("puppet.png");
}

Dersom du åpner nettsida (animasjon.html) i en nettleser skal du se omtrent følgende:

Legg merke til at vi ser første bilde fra rad 1. Dette må vi nå endre på:
Legg til disse to linjene i css for #person (nederst før siste } )

  background-position-x: 0;
  background-position-y: calc(-112px * 2);

calc(-112px * 2) flytter bildet opp 2 rader slik at første frame fra rad 3 er inne i rammen person.

Nå lager vi animasjonen som vi kaller walk.
Skriv inn denne linja neders i #person

animation: walk 1s steps(8) infinite;

Under #person i css filen skal vi lage keyframes for walk

@keyframes walk {
   100% { background-position-x: calc( -112px * 8 ); }
}

Her endrer vi bakgrunnsposisjonen slik at vi viser alle 8 bildene - dette virker pga steps(8) trinnvis.
Uten steps(8) blir effekten en helt annen (prøv selv).

Hvert bilde i animasjonen blir vist i 1/8 s, deretter flyttes neste bilde inn i rammen, overgangen er så rask at det for vårt øye virker øyeblikkelig. Effekten er som å lage tegnefilm med en kladdebok.

Javascript og transition animasjon

Nå skal vi bruke en tredje metode til å animere en kaktus over skjermen (slik at det ser ut som om figuren går over ørkenen).

Igjen må vi finne et bilde (med fri lisens) , eller vi kan tegne selv. Jeg fant dette bildet ved å søke på

png cactus free transparent - jeg har skalert det ned til 90px i største dimensjon.

Vi skriver inn denne css-koden for #kaktus:

#kaktus {
    position: absolute;
    opacity: 0;
    top : 30px;
    left: 100%;
    width: 68px;
    height: 90px;
    background-image: url("cactus.png");
    transition: left 9s linear;
    will-change: left;   /* et hint til browseren om at left endrer seg ofte */
    /* browseren kan da optimalisere animasjonen */
}

#kaktus.ut {
    left: -100px;
    opacity: 1;
}

Nå må vi legge inn litt javascript, se Javascript for hvordan du legger denne filen inn i html.

function setup() {
    let kaktus = document.getElementById("kaktus");
    animerKaktus();

    function animerKaktus() {
        kaktus.classList.toggle("ut");
        setTimeout(animerKaktus, 9200);
    }

}

Her har vi brukt javascript til å trigge transition, men den kan også trigges av en endring i en css-regel ved å bruke css-selectors slik som :hover til å endre en egenskap (denne blir da styrt av en trasition).

Du kan se et eksempel på det i css-selectors

results matching ""

    No results matching ""