Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

8. diel - Animácie zobrazovanie textu pomocou CSS3

V minulej lekcii, Text a písmo 4. časť , sme si ukázali, ako pracovať s vlastnými fonty, meniť smer písma a napísať text veľkými písmenami tak, aby zostala malá.

Vitajte pri druhej lekcie ohľadom animácií v CSS3, v ktorej si ukážeme, ako vytvoriť efekty zobrazenie textu na stránke.

Čo sa v tejto lekcii naučíme vytvoriť?

Animace textu
localhost

Typewriter effect

Tejto konkrétnej animáciu, ktorú dnes budeme robiť, sa hovorí typewriter effect. Text sa nám totiž nezobrazí tak, ako obvykle (všetok naraz), ale postupne. Pritom to bude vyzerať, ako keby bol práve písaný. Kreativite sa medze síce nekladú, bohužiaľ možnosti CSS3 sú (teda aspoň zatiaľ) trochu obmedzené a pre zložitejšie animácie a efekty je potreba použiť JavaScript. Teraz si ukážeme niektoré základné, tie ho našťastie nepotrebujú.

Animácie písanie textu

Základný trik spočíva v tom, že text sa na stránke nachádza, len nie je vidieť. Potom sa vykoná animácia, ktorá nám ho zobrazí. Súčasťou ňou je aj okraj elementu (border), ktorý chceme zobraziť. Ten keď upravíme, vyzerá ako kariet pri písaní textu.

Najprv teda zvolíme element, ktorý chceme animovať:

<div class="typewriter">
  <h1>Náš text, který chce animaci.</h1>
</div>

Trochu upravíme telo stránky, veľkosť a font:

body {
  display: flex;
  justify-content: center;
}

h1 {
  font-family: monospace;
  font-size: 25px;
}

Font monospace je neproporcionálne písmo, to znamená, že každý znak má rovnakú šírku. Vďaka tomu sa text potom bude vypisovať lineárne:

Animace - Text
localhost

Teraz prerobíme nadpis <h1> tak, že k nemu pridáme triedu .typewriter:

.typewriter h1 {
  font-family: monospace;
  font-size: 20px;
  overflow: hidden;
  border-right: .15em solid blue;
  white-space: nowrap;
  margin: 0 auto;
  letter-spacing: .15em;
}

Tu sme museli pridať vlastnosť overflow: hidden;, Aby text, ktorý ešte neprešiel animácií, nebol vidieť. Ďalej sme pridali okraj elementu border-right: .15em solid blue;, Ktorý bude vyzerať ako pohybujúce sa písací kurzor. white-space: nowrap; máme z dôvodu možnosti zalomenie textu pri nevhodnej šírke elementu. To znamená, že text bude napísaný na jednom riadku až k okraju, nehľadiac na šírku elementu v akom sa nachádza. Potom už je tu len úprava odsadenie pomocou margin: 0 auto; a letter-spacing: .15em, čo len vytvorí nepatrné medzery medzi písmenami:

Animace - Text
localhost

Všetko máme pripravené, môžeme pridať CSS animácie:

.typewriter h1 {
  font-family: monospace;
  font-size: 20px;
  overflow: hidden;
  border-right: .15em solid blue;
  white-space: nowrap;
  margin: 0 auto;
  letter-spacing: .15em;
  animation:
    typing 3.5s steps(30, end),
    blink-caret .5s step-end infinite;
}

@keyframes typing {
  from { width: 0 }
  to { width: 100% }
}

@keyframes blink-caret {
  from, to { border-color: transparent }
  50% { border-color: blue }
}

Vo výsledku budeme mať toto:

Animace - Text
localhost

V tomto prípade som do animácie animation: typing 3.5s steps(30, end) pridal ešte atribút infinite, aby bola lepšie vidieť. Bez nej by sa vykonala a potom zastavila takto:

Animace - Text
localhost

Steps

Môžeme si všimnúť, že pre takéto animácia je veľmi dôležitá vlastnosť animácie steps, v tomto prípade steps(30, end) a step-end. Vďaka tejto vlastnosti definujeme rozdelenie animácie na jednotlivé kroky. V zátvorke uvedieme najskôr počet krokov a potom konečný bod. Pre nás teda 30 krokov a end (čiže koniec animácie elementu).

Teraz sa dajú pri okraji elementu rôzne upravovať veľkosti alebo farby. Napríklad nejako takto:

<div id="typewriter">Náš text, který chce animaci.<div id="border"></div></div>
body {
  display: flex;
  justify-content: center;
}

#typewriter {
  height: 40px;
  white-space: nowrap;
  overflow: hidden;
  font-family: monospace;
  font-size: 28px;
  position: relative;
  animation: animated-text 2s steps(30,end) 1s 1 normal both;
}

#border {
  border-bottom: solid 3px rgba(8, 107, 8, 1);
  position: absolute;
  right: -7px;
  width: 20px;
  animation: animated-cursor 600ms steps(30,end) infinite;
}

@keyframes animated-text{
  from{width: 0;}
  to{width: 460px;}
}

@keyframes animated-cursor{
  from{border-bottom-color: rgba(8, 107, 8, 1);}
  to{border-bottom-color: transparent;}
}

V tomto prípade nepoužívame triedy, ale id jednotlivých elementov id=typewriter / #typewriter. Má to využitie, keď napríklad chceme animovať iba jednu časť elementu so spoločnou triedou.

V prehliadači budeme mať vďaka predchádzajúceho CSS tento výsledok:

Animace - Text
localhost

A ak chceme border úplne vynechať:

<p>Náš text, který chce animaci.</p>

A CSS:

body {
  display: flex;
  justify-content: center;
}

p {
  white-space: nowrap;
  overflow: hidden;
  font-family: monospace;
  font-size: 20px;
  color: rgba(255,255,255,.70);
  animation: animated-text 2s steps(30,end) 1s 1 normal both;
}

@keyframes animated-text{
  from{width: 0;}
  to{width: 350px;}
}

V prehliadači žiadny kurzor nebude:

Animace - Text
localhost

Pomocou týchto animácií možno text zobrazovať zo všetkých rôznych smerov s akoukoľvek rýchlosťou.

Ak vám nie je niečo jasné, všetky zobrazené ukážky si môžete stiahnuť v prílohe tejto lekcie.

V ďalšej lekcii, Animácie efektov pri interakcii s elementmi (tooltip) , si ukážeme, ako sa dajú meniť elementy, keď je používateľ napríklad prekryje kurzorom myši.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 209x (1.12 kB)

 

Predchádzajúci článok
Text a písmo 4. časť
Všetky články v sekcii
CSS3
Preskočiť článok
(neodporúčame)
Animácie efektov pri interakcii s elementmi (tooltip)
Článok pre vás napísal Filip Opluštil
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity