Een introductie voor beginners van CSS-animaties

Tegenwoordig gebruiken steeds meer websites animaties, of dat nu in de vorm is van GIF's, SVG's, WebGL, achtergrondvideo's enzovoort. Wanneer het op de juiste manier wordt gebruikt, zorgt animatie op het web voor leven en interactiviteit, waardoor een extra laag feedback en ervaring voor gebruikers wordt toegevoegd.

In deze tutorial ga ik je kennis laten maken met CSS-animaties; een zeer performante manier om dingen te doen die steeds populairder worden naarmate browserondersteuning verbetert. Nadat we de basis hebben behandeld, gaan we een snel voorbeeld bouwen dat een vierkant element in een cirkel animeert:

Premium-opties

De ontwerpers op Envato Market zijn bezig geweest met het maken van een reeks CSS-animaties die u kunt aansluiten op uw websites, van schaduwen tot linten, schuifregelaars en meer.

CSS3 Shadow Pack op Envato Market

U kunt ook een CSS-expert bij Envato Studio inhuren om u te helpen met een breed scala aan oplossingen en aanpassingen voor uw project.

CSS-experts op Envato Studio

Een inleiding tot @keyframes en animatie

Het belangrijkste onderdeel van CSS-animaties is @keyframes, de CSS-regel waar animatie wordt gemaakt. Denken aan @keyframes als zijnde etappes langs een tijdlijn. Binnen @keyframes, u kunt deze fasen definiëren, elk met een andere stijlverklaring.

Om vervolgens CSS-animaties te laten werken, moet u binden aan de @keyframes naar een selector. Dit zal geleidelijk alle code in de code ontleden @keyframes aangiften en verander de oorspronkelijke stijl in de nieuwe stijl, op basis van de fasen.

De @keyframes

Hier zullen we de animatiefasen instellen. Onze @keyframes eigenschappen zijn:

  • Een naam van onze keuze (tutsFade in dit geval).
  • Stages: 0%-100%; van (gelijk aan 0%) en naar (gelijk aan 100%).
  • CSS-stijlen: de stijl die u voor elke fase wilt toepassen.

Bijvoorbeeld:

@keyframes tutsFade 0% opacity: 1;  100% dekking: 0; 

of:

@keyframes tuts Fade from opacity: 1;  tot opacity: 0; 

of de afkorting:

@keyframes tutsFade to opacity: 0; 

De bovenstaande code past een overgang toe naar de dekking van een element, van dekking: 1 naar dekking: 0. Elk van de bovenstaande benaderingen zal hetzelfde eindresultaat opleveren.

De animatie

De animatie eigenschap wordt gebruikt om te bellen @keyframes in een CSS-selector. Animatie kan meerdere eigenschappen hebben:

  • animatie-naam: @keyframes naam (onthoud dat we hebben gekozen tutsFade).
  • animatie-duur: de tijdsduur, de totale duur van de animatie van begin tot eind.
  • animatie-timing-functie: stelt de animatiesnelheid in ( lineair | gemak | gemak in | gemak | gemak in-uit | kubieke Bezier ).
  • animatie-delay: de vertraging voordat onze animatie start.
  • animatie-iteratie-count: Hoe vaak wordt animatie herhaald.
  • animatie-richting: geeft u de mogelijkheid om de lusrichting te wijzigen, van begin tot eind, of van begin tot eind, of beide.
  • animatie-fill-mode: geeft aan welke stijlen op het element worden toegepast wanneer onze animatie is voltooid ( geen | vooruit achteruit beide )

Bijvoorbeeld:

.element animation-name: tuts Fade; animatie-duur: 4s; animatie-vertraging: 1s; animatie-iteratie-telling: oneindig; animatie-timing-functie: lineair; animatie-richting: alternatief; 

of steno:

.element animation: tuts Fade 4s 1s oneindige lineaire alternatief; 

De bovenstaande code zorgt voor een knipperend effect, met een vertraging van 1 seconde, een totale duur van 4 seconden, met een alternatieve richting en oneindige lus-iteraties.

Voorvoegsels van leveranciers toevoegen

Tijdens een werkende versie moeten we browser-specifieke voorvoegsels gebruiken om de best mogelijke browser-ondersteuning te garanderen. De standaardprefixen zijn van toepassing:

  • Chrome & Safari: -webkit-
  • Firefox: -moz-
  • Opera: -O-
  • Internet Explorer: -Mevrouw-

Een animatie de eigenschap met voorvoegsels van leveranciers ziet er als volgt uit: 

.element -webkit-animation: tuts Fade 4s 1s oneindige lineaire alternatief; -moz-animation: tuts Fade 4s 1s oneindig lineair alternatief; -ms-animatie: tuts Fade 4s 1s oneindige lineaire alternatief; -o-animatie: tuts Fade 4s 1s oneindige lineaire alternatief; animatie: tuts Fade 4s 1s oneindig lineair alternatief; 

samen met @keyframes:

@ -webkit-keyframes tutsFade / * jouw stijl * / @ -moz-keyframes tutsFade / * jouw stijl * / @ -ms-keyframes tuts Fade / * jouw stijl * / @ -o-keyframes tuts Fade / * jouw stijl * / @keyframes tutsFade / * jouw stijl * /

Ten behoeve van de leesbaarheid tijdens deze tutorial ga ik verder zonder gebruik te maken van voorvoegsels, maar de definitieve versie zal ze bevatten en ik zou u willen aanmoedigen om ze in uw CSS-code te gebruiken.

Voor meer informatie over voorvoegsels van leveranciers kunt u http://css3please.com/ raadplegen, wat een geweldige website is voor resources van leveranciersprefixen.

Meerdere animaties

U kunt meerdere animaties toevoegen met behulp van een kommascheider. Laten we zeggen dat we een extra rotatie aan onze willen toevoegen tutsFade element, doen we dit door extra te declareren @keyframes en ze vervolgens aan ons element te binden:

.element animation: tuts Fade 4s 1s oneindig lineair alternatief, tutsRotate 4s one oneindig lineair alternatief;  @keyframes tutsFade to opacity: 0;  @keyframes tutsRotate to transform: rotate (180deg); 

Square to Circle Tutorial

Laten we erin springen en een eenvoudige vormovergang maken; een vierkant-tot-cirkel-animatie met behulp van de bovenstaande principes. We zullen in totaal vijf fasen hebben en voor elke fase zullen we een grensradius, een rotatie en een andere achtergrondkleur definiëren voor ons element. Genoeg gepraat, laten we beginnen met coderen.

Basis element

Laten we eerst de markup maken, een element om te animeren. We gaan ons zelfs niet bezighouden met klassenamen, we gaan nu gewoon een duidelijke div gebruiken:

Vervolgens met behulp van een elementselector (div ), Voeg standaard styling toe aan de div:

div width: 200px; hoogte: 200 px; achtergrondkleur: koraal; 

De keyframes declareren

Laten we ons nu voorbereiden @keyframes, die we zullen noemen af-to-cirkel, en de vijf fasen

@keyframes square-to-circle 0%  25%  50%  75%  100% 

We moeten enkele styes definiëren binnen deze stadia, dus laten we beginnen met het dicteren van de border-radius voor elke hoek van het plein:

@ -webkit-keyframes square-to-circle 0% border-radius: 0 0 0 0;  25% grensradius: 50% 0 0 0;  50% grensradius: 50% 50% 0 0;  75% grensradius: 50% 50% 50% 0;  100% grensradius: 50%; 

Daarnaast kunnen we een andere declareren Achtergrond kleur voor elke fase.

@keyframes square-to-circle 0% border-radius: 0 0 0 0; achtergrond: koraal;  25% grensradius: 50% 0 0 0; achtergrond: darksalmon;  50% grensradius: 50% 50% 0 0; achtergrond: indianred;  75% grensradius: 50% 50% 50% 0; achtergrond: lightcoral;  100% grensradius: 50%; achtergrond: darksalmon; 

Om echt het idee naar huis te raken, laten we verder gaan border-radius en Achtergrond kleur door de div te draaien en een beetje visueel belang toe te voegen.

@keyframes square-to-circle 0% border-radius: 0 0 0 0; achtergrond: koraal; transform: rotate (0deg);  25% grensradius: 50% 0 0 0; achtergrond: darksalmon; transform: draaien (45deg);  50% grensradius: 50% 50% 0 0; achtergrond: indianred; transform: draaien (90deg);  75% grensradius: 50% 50% 50% 0; achtergrond: lightcoral; transform: rotate (135deg);  100% grensradius: 50%; achtergrond: darksalmon; transform: rotate (180 graden); 

Pas de animatie toe

Nadat we onze vierkant-naar-cirkel-animatie hebben gedefinieerd, moeten we deze toepassen op de div:

div width: 200px; hoogte: 200 px; achtergrondkleur: koraal; animatie: vierkant-naar-cirkel 2s one oneindig alternatief; 

Hier zie je dat we een afkorting hebben toegevoegd animatie eigendom, waarin staat:

  • De animatie-naam is af-to-cirkel.
  • De duur van de animatie is 2s.
  • De animatie-vertraging is 1s.
  • Het aantal animaties-iteratie is oneindig, dus het zal voor onbepaalde tijd doorgaan.
  • En de richting van de animatie is afwisselend, dus het zal van begin tot eind spelen, dan terug naar het begin, dan weer tot het einde, enzovoort. 

Gebruik timing-functie voor Awesomeness 

Een laatste waarde die we aan de animatie-eigenschap kunnen toevoegen, is de animatie-timing-functie. Dit zal de snelheid, versnelling en vertraging van onze beweging bepalen. Deze functie kan een zeer gedetailleerde waarde zijn, wat lastig is om handmatig te berekenen, maar er zijn veel gratis websites die bronnen en live aanpassing bieden voor animatietimingfuncties.

Eén zo'n tool is de CSS Easing Animation Tool, dus laten we dat gebruiken om onze timingfunctie te berekenen.

Ik zou graag een toevoegen elastisch effect op onze af-to-cirkel animatie, met behulp van een cubic-bezier-functie.

Nadat je hebt gespeeld met de handvatten en een soort beziercurve hebt gegenereerd, werk je de waarde van de animatietimingfunctie bij met behulp van het verstrekte fragment.

div width: 200px; hoogte: 200 px; achtergrondkleur: koraal; animatie: vierkant-naar-cirkel 2s 1s oneindige cubic-bezier (1, .015, .295,1.225) alternate; 

De definitieve code, zonder gebruik te maken van voorvoegsels van leveranciers ( -webkit- , -moz-, -Mevrouw-, -O- ) is als volgt:

div width: 200px; hoogte: 200 px; achtergrondkleur: koraal; animatie: vierkant-naar-cirkel 2s .5s oneindige cubic-bezier (1, .015, .295,1.225) alternate;  @keyframes square-to-circle 0% border-radius: 0 0 0 0; achtergrond: koraal; transform: rotate (0deg);  25% grensradius: 50% 0 0 0; achtergrond: darksalmon; transform: draaien (45deg);  50% grensradius: 50% 50% 0 0; achtergrond: indianred; transform: draaien (90deg);  75% grensradius: 50% 50% 50% 0; achtergrond: lightcoral; transform: rotate (135deg);  100% grensradius: 50%; achtergrond: darksalmon; transform: rotate (180 graden); 

Nog een ding

Alles werkt goed in moderne browsers, maar Firefox heeft een vervelende gewoonte om het transformeren van objecten slecht te maken. Bekijk deze gekartelde regels om te zien wat ik bedoel:

Gelukkig is hier een oplossing voor. Voeg de volgende transparante omtrek toe aan uw div en Firefox zal de dingen perfect weergeven!

overzicht: 1px solide transparant;

Conclusie

Dat is het! We hebben de CSS-animatiesyntaxis gebruikt om een ​​eenvoudige, herhaalde animatie te maken.

Browserondersteuning

Voor actuele informatie over de ondersteuning van browsers voor CSS-animaties, kijk op Kan ik gebruiken ... maar in een notendop, ondersteunen browsers onder meer: ​​Firefox 5+, IE 10+, Chrome, Safari 4+, Opera 12+.

Middelen:

  • CSS3 alstublieft
  • Ceaser - CSS Easing Animation Tool
  • CSS3-animaties op Envato Market