Milan Herda, 01/2020
Lekcia 2
Cascading Style Sheets
Kaskádové štýly
Jazyk, ktorým sa popisuje výzor HTML (alebo XML) dokumentu
čo chcem upraviť {
ako to chcem upraviť
}
vlastnosť: hodnota;
vlastnosť2: hodnota;
* {
color: black;
font-size: 14px;
}
h1 {
font-size: 20px;
font-weight: bold;
color: blue;
}
p {
font-style: italic;
}
Zoznam deklarácií, hovoriacich, "ako to chcem upraviť":
Pravidlá:
čo chcem upraviť {
ako to chcem upraviť
}
zoznam selektorov {
zoznam deklarácií
}
Pamätáte na document.querySelector?
univerzálny | * |
element (tag) | div |
triedny | .active |
id | #main-title |
Viete aj kombinovať:
li.active { /* ... */ }
div#menu { /*... */ }
div#menu.hidden { /* ... */ }
[attribút] | [data-cy] |
[atribút="hodnota"] | [data-cy="button"] |
atribút~="hodnota" | [data-cy~="button"] |
<input type="submit" data-cy="button" value="Odoslať">
<input type="submit" data-cy="cv-form button" value="Odoslať">
<input type="submit" data-cy="button cv-form" value="Odoslať">
:focus | element má fokus |
:hover | nad elementom je myš |
:nth-child(N) | N-tý prvok |
a veľa ďalších |
Pridávajú sa na koniec iného selectoru
input:focus { /* Input má fokus (píše sa doň) */ }
a:hover { /* nad linkou je myš */ }
tr:nth-child(2) { /* druhý riadok tabuľky */ }
tr:nth-child(2n) { /* každý druhý riadok tabuľky */}
::before | pred elementom |
::after | po elemente |
:nth-child(N) | N-tý prvok |
a veľa ďalších |
Pridávajú sa na koniec iného selectoru a každý má špecifické správanie
a::before { content: 'text pred'; }
a::after { content: 'text po'; }
A, B | A alebo B |
A B | Každé B, ktoré je potomkom A |
A > B | Každé B, ktoré je priamym potomkom A |
A + B | Každé B, ktoré má priamo pred sebou A (A aj B majú spoločného rodiča) |
A ~ B | Každé B, ktoré má pred sebou A (A aj B majú spoločného rodiča) |
Precvičte si selektory
Pri programovaní je dôležité dodržiavať určité formátovacie pravidlá.
Prettier je nástroj, ktorý náš kód bude formátovať sám podľa nami daných pravidiel.
V editore VS Code otvoríme zoznam pluginov
Pohľadáme Prettier a klikneme na "Install"
Otvoríme si nastavenia
File > Preferences > Settings
Nastavenia si dáme otvoriť ako súbor
Pridáme nasledovné riadky
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
Karel je jednoduchý robot, ktorý sa vie pohybovať a ukladať na zem značky.
Pozná tieto príkazy:
krokDopredu()
otocDoprava()
polozZnacku()
zdvihniZnacku()
Príkazy mu viete zapísať do súboru sandbox.js
Karel ich bude vykonávať v tom poradí, ako sú zapísané.
Príkaz musí mať na svojom konci bodkočiarku
Je vhodné, aby bol na každom riadku iba jeden príkaz (ale nemusí byť)
krokDopredu();
polozZnacku();
Prikážte Karlovi, aby sa pohol o 2 políčka dopredu.
krokDopredu();
krokDopredu();
A otočí sa doprava
otocDoprava();
Nech položí značku
polozZnacku();
Prikážte Karlovi, aby sa pohol o ďalšie 2 políčka dopredu.
krokDopredu();
krokDopredu();
otocDoprava();
krokDopredu();
krokDopredu();
polozZnacku();
Pohne o ďalšie 2 políčka a položí značku
Otočí sa doprava
Krajší Karel:
Otočíme Karla doľava
Karel nepozná príkaz pre otočenie doľava
otocDoprava();
otocDoprava();
otocDoprava();
Ďalšie dva kroky, ešte raz doľava, dva kroky a položíme značku
Otáčanie doľava vyzerá byť užitočná vec.
Nevieme to pridať k príkazom, ktoré Karel pozná?
function otocDolava() {
otocDoprava();
otocDoprava();
otocDoprava();
}
Zoskupenie viacerých príkazov pod jeden názov
Zapísaním funkcie vykonávame jej deklaráciu
Ide iba o predpis
K vykonaniu príkazov zapísaných vo vnútri funkcie dôjde v okamihu jej volania
otocDolava()
Názov funkcie môže obsahovať iba alfanumerické znaky, podtržítka a znak $
Prvý znak názvu nesmie byť číslo
Veľké a malé písmená sú považované za rozdielne
Vytvorte novú funkciu nazvanú dvojKrok, v ktorej bude Karel robiť dva kroky dopredu.
Použite novú funkciu v už hotovom kóde.
function otocDolava() {
otocDoprava();
otocDoprava();
otocDoprava();
}
function dvojKrok() {
krokDopredu();
krokDopredu();
}
dvojKrok();
polozZnacku();
otocDoprava();
dvojKrok();
otocDoprava();
dvojKrok();
polozZnacku();
otocDolava();
dvojKrok();
otocDolava();
dvojKrok();
polozZnacku();
Zabaľte doterajší výkonný kód do novej funkcie nazvanej prikladUvod
Funkciu dajte vykonať vo vnútri EventListeneru
function prikladUvod() {
dvojKrok();
/* zvyšok kódu */
polozZnacku();
}
document.addEventListener("DOMContentLoaded", function (event) {
prikladUvod();
});
Každý program sa skladá z dvoch zložiek:
Pomáhajú nám rozdeliť si algoritmus (a kód) na menšie celky (Divide and Conquer)
Je dobré ich vhodne pomenovávať
Dobrý názov by mal jednoznačne hovoriť, čo funkcia robí
Vytvorte funkciu, v ktorej Karel urobí krok dopredu a položí značku
function polozVpredu() {
krokDopredu();
polozZnacku();
}
Vytvorte funkciu, v ktorej Karel:
function stvorec2x2() {
polozZnacku();
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
otocDoprava();
}
function stvorec2x2() {
polozZnacku();
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
otocDoprava();
}
Dá sa to zjednodušiť?
function stvorec2x2() {
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
otocDoprava();
}
Dá sa to zjednodušiť?
function stvorec2x2() {
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
otocDoprava();
polozZnacku();
}
Dá sa to zjednodušiť?
function stvorec2x2() {
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
polozZnacku();
otocDoprava();
krokDopredu();
otocDoprava();
polozZnacku();
}
function polozVpredu() {
krokDopredu();
polozZnacku();
}
function polozVpreduAOtoc() {
polozVpredu();
otocDoprava();
}
function stvorec2x2() {
polozVpreduAOtoc();
polozVpreduAOtoc();
polozVpreduAOtoc();
polozVpreduAOtoc();
}