Deel 6: The power of design

Transities en animaties

Transitions

Transitions

Met CSS transition kan je een vloeiende overgang verkrijgen tussen twee states

Transitions

.box {
  background-color: mint;
  border-radus: 2rem;
}

.box:hover {
  background-color: blue;
  border-radius: 0;
}

Een veel voorkomende state is de hover-state. Daarbij kan je instellen dat bepaalde properties een andere waarde krijgen wanneer een gebruiker met de muis hierover beweegt.

 

Visueel gebeurt deze overgang abrupt.

Transitions

.box {
  background-color: mint;
  border-radus: 2rem;
  transition: all 0.2s ease;
}

.box:hover {
  background-color: blue;
  border-radius: 0;
}

Door een transitie toe te voegen krijgen we een animatie als overgang tussen de twee states.

Transitions

Met transities kan je overgangen toevoegen op de meeste CSS-properties, al zijn er enkele uitzonderingen:

  • Wel: width, height, color, font-size, background-color...

  • Niet: display, flex, font-family, background-image...

Transitions

We kunnen heel wat instellen rond de transitie. Er zijn vier properties die bepalen hoe je transitie verloopt:

  • transition-property
  • transition-duration
  • transition-timing-function
  • transition-delay

Transition-property

Wat wil je laten animeren van het geselecteerde element?
bijv: color, background-color, width, height...

.box {
  background-color: mint;
  border-radus: 2rem;
  transition-property: background-color;
}

.box:hover {
  background-color: blue;
  border-radius: 0;
}

Transition-property

Je kan meerdere properties tegelijk animeren door ze te onderscheiden met een komma.

.box {
  background-color: mint;
  border-radus: 2rem;
  transition-property: background-color, border-radius;
}

.box:hover {
  background-color: blue;
  border-radius: 0;
}

Transition-property

Wil je alle properties van een element animeren? Dan kan je ook de aanspreking all gebruiken.

.box {
  background-color: mint;
  border-radus: 2rem;
  transition-property: all;
}

.box:hover {
  background-color: blue;
  border-radius: 0;
}

Transition-property

Transition-duration

Hoe lang moet de overgang duren tussen de twee states?

.box {
  background-color: mint;
  border-radus: 2rem;

  transition-property: background-color, border-radius;
  transition-duration: 0.2s;
}

.box:hover {
  background-color: blue;
  border-radius: 0;
}

Een duration boven de 0.5s à 1s voelt meestal al te traag aan

🤓 Tip

Transition-duration

Transition-timing-function

Hoe bouwt de animatie zich op?

.box {
  background-color: mint;
  border-radus: 2rem;

  transition-property: background-color, border-radius;
  transition-duration: 0.2s;
  transition-timing-function: ease;
}

.box:hover {
  background-color: blue;
  border-radius: 0;
}

Transition-timing-function

Easing bepaalt of de animatie lineair verloopt of niet

Bekijk voorbeelden van easing op easing.net

🤓 Tip

Transition-timing-function

Als je meer kennis hebt van easing en bézier curves, kan je ook je eigen verloop aanmaken

.box {
  transition-timing-function: cubic-bezier(0.65, 0, 0.35, 1);
}

Transition-timing-function

Transition-delay

In sommige gevallen kan het zijn dat je de animatie iets later wil laten starten.

.box {
  background-color: mint;
  border-radus: 2rem;

  transition-property: background-color, border-radius;
  transition-duration: 0.2s;
  transition-timing-function: ease;
  transiton-delay: 0.5s;
}

.box:hover {
  background-color: blue;
  border-radius: 0;
}

Transition

Al de transition-properties kan je combineren in één property

.box {
  transition-property: background-color;
  transition-duration: 0.2s;
  transition-timing-function: ease;
  transiton-delay: 0.5s;
}

.box {
  transition: background-color 0.2s ease 0.5s;
}

Transition

Meerdere animaties kan je scheiden door een komma

.box {
  transition:
    opacity 0.3s ease 0.2s,
    background-color 0.4s linear 0s,
    transform 0.6s ease-in-out 0.1s;
}

Transforms

Transforms

CSS Transforms maken het mogelijk om elementen te verplaatsen, roteren, schalen en vervormen zonder de layout te beïnvloeden.

Transforms

Één van de grootste voordelen van transform is dat de transform geen invloed heeft op de ruimte die door het element opgeëist wordt. Daarom zijn ze perfect voor animaties

Transforms

De transform-property kan je de volgende zaken meegeven:

  • Translate
  • Rotate
  • Scale
  • Skew

transform: translate

.my-element:hover {
  transform: translateY(2rem);
}

Met translate verplaats je een element

  • translate(x-value, y-value);
  • translateX(value);
  • translateY(value);
  • translateZ(value);

transform: translate

transform: rotate

.element {
    transform: rotate(45deg);    /* 45 graden rechtsom */
    transform: rotate(-90deg);   /* 90 graden linksom */
}

Met rotate laat je een element draaien

  • rotate(value);
  • rotateX(value);
  • rotateY(value);
  • rotateZ(value);

transform: rotate

transform: scale

.element {
    transform: scale(1.5);      /* 150% groter */
    transform: scale(0.8);      /* 80% kleiner */
    transform: scaleX(2);       /* Dubbel zo breed */
    transform: scaleY(0.5);     /* Half zo hoog */
}

Met scale pas je de verhoudingen aan

  • scale(value);
  • scaleX(value);
  • scaleY(value);
  • scaleZ(value);

transform: scale

transform: skew

.element {
    transform: skew(15deg, 5deg);/* Horizontaal en verticaal scheef */
    transform: skewX(20deg);     /* Alleen horizontaal scheef */
}

Met skew kan je een element "scheeftrekken"

  • skew(x-value, y-value);
  • skewX(value);
  • skewY(value);

transform: skew

Transform

Je kan meerdere transform instellingen ook combineren met de transform-property. Let daarbij op de volgorde:

[translate] [rotate] [scale] [skew]
 

.combined {
    transform: translate(50px, 100px) rotate(45deg) scale(1.2);
}

Transform

transform-origin

Met transform-origin kan je aan de browser laten weten vanuit welk punt je het element wilt laten transformeren 

.element {
    transform-origin: center;       /* Standaard */
    transform-origin: top left;     /* Draai vanaf hoek */
    transform-origin: bottom;       /* Draai vanaf onderkant */
}

transform-origin

transform-origin

Animations

Animations

CSS Animations maken het mogelijk om complexe, meerlagige animaties te creëren.

In tegenstelling tot transitions, die enkel tussen twee toestanden kunnen animeren, kunnen animations meerdere keyframes hebben en automatisch starten zonder trigger.

Keyframes

Keyframes zijn de stappen die bepalen hoe een animatie verloopt tussen begin en eindpunt.

Ze beschrijven welke stijlen het element op bepaalde momenten van de animatie moet hebben.

Keyframes

/* Basis keyframes syntaxis */
@keyframes animationName {
    from {
        /* Start toestand */
        opacity: 0;
        transform: translateY(50px);
    }
    
    to {
        /* Eind toestand */
        opacity: 1;
        transform: translateY(0);
    }
}

Je kan werken met een startpunt (from) en eindpunt (to)

Keyframes

@keyframes slideInBounce {
    0% {
        opacity: 0;
        transform: translateX(-100px);
    }
    
    60% {
        opacity: 1;
        transform: translateX(20px);
    }
    
    100% {
        opacity: 1;
        transform: translateX(0);
    }
}

Of je definieert meerdere stappen met percentages

animation-name

Eerst definieer je

keyframes en geef je de animatie een naam, daarna kan je die aanspreken in een selector met animation-name

@keyframes heartbeat {
    0% {
        transform: scale(1);
    }

    70% {
        transform: scale(1);
    }

    75% {
        transform: scale(1.2);
    }
    
    80% {
        transform: scale(1);
    }
    
    85% {
        transform: scale(1.2);
    }
    
    90% {
        transform: scale(1);
    }

    100% {
        transform: scale(1);
    }
}
.my-selector {
    animation-name: heartbeat;
    animation-duration: 4s;
}

animation-duration

Hiermee bepaal je hoe lang de animatie duurt

.element {
    animation-duration: 1s;        /* 1 seconde */
    animation-duration: 500ms;     /* 500 milliseconden */
    animation-duration: 2.5s;      /* 2.5 seconden */
    
    /* Verschillende duraties voor meerdere animaties */
    animation-duration: 1s, 0.5s;
}

animation-timing-fucntion

Hiermee voeg je easing toe

.element {
    /* Basis easing functions */
    animation-timing-function: ease;        /* Standaard */
    animation-timing-function: linear;      /* Constante snelheid */
    animation-timing-function: ease-in;     /* Accelereren */
    animation-timing-function: ease-out;    /* Vertragen */
    animation-timing-function: ease-in-out; /* Beide */
    
    /* Custom cubic-bezier */
    animation-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
}

animation-delay

Hiermee kan je de animatie later laten starten

.element {
    animation-delay: 0.5s;    /* Start na 0.5 seconden */
    animation-delay: -0.2s;   /* Start 0.2s in de animatie */
    
    /* Verschillende delays */
    animation-delay: 0s, 0.3s, 0.6s;
}

animation-iteration-count

Bepaalt hoevaak de animatie afgespeeld wordt

.element {
    animation-iteration-count: 1;        /* Eén keer (standaard) */
    animation-iteration-count: 3;        /* Drie keer */
    animation-iteration-count: infinite; /* Oneindig herhalen */
    animation-iteration-count: 2.5;      /* 2.5 keer */
}

animation-direction

Bepaalt de "richting" van de animatie

.element {
    animation-direction: normal;          /* 0% naar 100% */
    animation-direction: reverse;         /* 100% naar 0% */
    animation-direction: alternate;       /* Heen en weer */
    animation-direction: alternate-reverse; /* Terug en heen */
}

animation-fill-mode

Bepaalt welke stijlen worden toegepast na de animatie

.element {
    animation-fill-mode: none;      /* Default: geen persistent styles */
    animation-fill-mode: forwards;  /* Behoud eindstijl */
    animation-fill-mode: backwards; /* Gebruik startstijl tijdens delay */
    animation-fill-mode: both;      /* Beide: backwards en forwards */
}

animation

Met de animation shorthand kan je al deze properties combineren. Let daarbij op de volgorde:

[name] [duration] [timing-function] [delay] [iteration-count] [direction] [fill-mode]

.element {
    animation: slideIn 0.5s ease-out 0.2s 1 normal forwards;
    
    /* Vereenvoudigd */
    animation: slideIn 0.5s ease-out forwards;
    
    /* Meerdere animaties */
    animation: 
        slideIn 0.5s ease-out forwards,
        fadeIn 0.3s linear 0.2s forwards,
        bounce 1s ease-in-out infinite;
}

15. Transities en animaties

By Lecturer GDM

15. Transities en animaties

CSS animations and transitions.

  • 144