Vitajte na stránke predmetu Technológie internetu
Tento predmet je zameraný na základy tvorby moderných webových stránok pomocou HTML, CSS a JavaScriptu. Naučíte sa používať moderné nástroje ako VS Code, Git a AI asistentov, ktoré vám pomôžu vytvoriť profesionálne webové projekty.
Všetky materiály, úlohy a termíny nájdete na tejto stránke. do Ms teams budete iba odovzdávať každý týždeň vypracované úlohy. Pri otázkach ma kontaktujte cez Teams chat alebo email.
Inštalácia potrebného softvéru
Pre úspešné absolvovanie predmetu potrebujete nainštalovať nasledujúce nástroje:
1. Visual Studio Code
Moderný editor kódu od Microsoftu, ktorý budeme používať na písanie HTML, CSS a JavaScriptu.
Odporúčané extensions: Live Server, Prettier, HTML CSS Support
2. Git
Nástroj na verziovanie kódu. Používa sa na ukladanie histórie zmien a zdieľanie projektov.
3. Claude AI
AI nástroj od Anthropic, ktorý vám pomôže pri tvorbe webových stránok a učení sa programovania.
Bezplatný účet je pre potreby predmetu dostačujúci.
4. Docker Desktop Voliteľné
Pokročilý nástroj pre kontajnerizáciu aplikácií. Nie je pre tento semester povinný.
Prehľad semestra
Predmet je rozdelený na 13 týždňov:
- Týždeň 1: Informácie o predmete + Inštalácia softvéru
- Týždne 2-8: Intenzívna výučba základov web developmentu
- Týždne 9-11: Samostatná práca na semestrálnom projekte
- Týždne 12-13: Finalizácia a obhajoby projektov
Detailne rozpísané témy pre každý týždeň nájdete nižšie v príslušných sekciách.
Odporúčaná literatúra a zdroje
Online dokumentácia a tutoriály
Nástroje a pomôcky
Harmonogram výučby pre jednotlivé týždne semestra
Týždeň 1 Informácie o predmete + Inštalácia softvéru
📝 Témy:
- Informácie o predmete, podmienky absolvovania, hodnotenie
- História internetu (od Sputniku po moderný web)
- Inštalácia VS Code, Git, Claude AI
- Prvé kroky s VS Code a rozšíreniami
- Demo SSH a FTP
Úloha:
- Nainštalovať všetok potrebný softvér (VS Code, Git)
- Vytvoriť GitHub účet
- Vytvoriť Claude AI účet
- Prečítať materiál o histórii internetu
- Prečítať podmienky absolvovania predmetu
Deadline: Začiatok 2. týždňa
📚 Materiály:
Týždeň 2 HTML Základy
📝 Témy:
- Štruktúra HTML dokumentu (
doctype,head,body) - Sémantické tagy (
header,main,section,article,footer) - Základné elementy (
h1–h6,p,a,img,ul,ol,li) - Tabuľky (
table,thead,tbody,tr,th,td) - Odkazy a navigácia – interné (
#id) aj externé (target="_blank") - Štruktúra priečinkov webového projektu
- Prepojenie externého CSS súboru
- Autorské práva k obrázkom na webe
📁 Štruktúra projektu:
Každý webový projekt bude mať túto štruktúru priečinkov:
moj-projekt/
├── index.html
└── assets/
├── css/
│ └── style.css
└── images/
🤖 Prompt pre Claude AI:
Skopíruj tento prompt do Claude AI, doplň svoju tému a farebnú schému:
Vytvor mi jednoduchú webovú stránku na tému [napíš svoju tému] s primárnou farbou dizajnu [napíš hex kód alebo názov farby].
Stránka musí mať túto štruktúru priečinkov:
moj-projekt/
├── index.html
└── assets/
├── css/
│ └── style.css
└── images/
index.html musí obsahovať:
- Správnu štruktúru: <!DOCTYPE html>, <html lang="sk">, <head> s <title> a <meta charset="UTF-8">, <body>
- Prepojenie na externý CSS súbor: <link rel="stylesheet" href="assets/css/style.css">
- Sémantické tagy: <header>, <nav>, <main>, aspoň 3 sekcie <section> každá s unikátnym id, <footer>
- Navigácia <nav> s odkazmi <a href="#id"> na každú sekciu
- Nadpisy: <h1> v headeri, <h2> ako názov každej sekcie
- Aspoň 2 odseky <p>
- Obrázok: <img src="assets/images/foto.jpg" alt="popis obrázka" width="400" height="300">
- Jeden nečíslovaný zoznam <ul> s aspoň 3 položkami <li>
- Jeden číslovaný zoznam <ol> s aspoň 3 položkami <li>
- Tabuľku <table> s <thead>, <tbody>, aspoň 3 stĺpcami a 3 riadkami dát
- Aspoň jeden externý odkaz <a href="..." target="_blank">
assets/css/style.css musí obsahovať:
- Základné štýly pre body, header, nav, main, footer, table
- Primárnu farbu [hex kód] použitú konzistentne (pozadie headeru, farba odkazov, hlavička tabuľky...)
- Jednoduchý, prehľadný kód – každý selektor na novom riadku
Vypíš zvlášť obsah súboru index.html a zvlášť obsah súboru assets/css/style.css. Nič iné nepridávaj.
⌨️ Cvičenie na hodine – úpravy v HTML:
Keď máš vygenerovanú stránku, otvor index.html vo VS Code a vykonaj tieto úpravy.
Ku každej zmene si ulož súbor a skontroluj výsledok v prehliadači.
- Zmeň
<title>stránky na iný názov – sleduj čo sa zmení v záložke prehliadača - Zmeň text v
<h1>v headeri - Zmeň
altatribút obrázka na výstižnejší popis - Zmeň jeden externý odkaz – nahraď URL inou webovou stránkou
- Pridaj atribút
target="_blank"k odkazu ktorý ho ešte nemá
- Zmeň
<ol>(číslovaný zoznam) na<ul>(nečíslovaný) – sleduj čo sa stane - Pridaj novú položku
<li>do existujúceho zoznamu - Pridaj nový riadok
<tr>s dátami do tabuľky - Skontroluj či má
<html>atribútlang="sk"– ak nie, pridaj ho - Zmeň
<h2>v jednej sekcii na<h3>– čo sa vizuálne zmení?
- Pridaj novú
<section>s unikátnymid, nadpisom<h2>a jedným odsekom<p> - Pridaj odkaz do
<nav>ktorý smeruje na tvoju novú sekciu cez#id - Zakomentuj riadok
<link rel="stylesheet">v<head>– pozri čo sa stane, potom odkomentuj:<!-- <link rel="stylesheet" href="assets/css/style.css"> -->
- Nájdi
<footer>a zmeň meno autora alebo rok - Nájdi v kóde
<meta charset="UTF-8">– skús ho zakomentovať, ulož a obnov stránku – čo sa stalo so slovenčinou? Potom vráť späť.
index.html do poľa a klikni na Check.
Odovzdanie úlohy č. 1 (3 body):
Nahrajte súbor index.html vašej webovej stránky do MS Teams.
Súbor musí obsahovať všetky prvky preberané na hodine:
- Sémantické tagy (
header,nav,main,section,footer) - Navigáciu s odkazmi na sekcie cez
#id - Nadpisy, odseky, obrázok s atribútmi
widthaheight - Nečíslovaný aj číslovaný zoznam
- Tabuľku s hlavičkou a aspoň 3 riadkami dát
- Externý odkaz s
target="_blank" - Prepojenie na externý CSS súbor
Deadline: Začiatok 3. týždňa
📚 Materiály:
Týždeň 3 CSS princípy + Bootstrap 5
📝 Témy:
- Opakovanie — validácia HTML z minulého týždňa
- CSS — ako sa zapisuje, selektory, špecificita
- Box model —
margin,padding,border - Formátovanie textu, farieb, zoznamov a tabuliek v CSS
- Bootstrap 5 — čo to je, prečo ho používame, CDN
- Kontajnery —
.containervs.container-fluid - Grid systém — riadky, stĺpce, breakpointy
- Predvolené farby a farby písma v Bootstrape
- Navigácia z Bootstrap dokumentácie
🔁 Opakovanie — validácia HTML
Minulý týždeň sme nestihli validáciu. Skôr než ideme ďalej — over si HTML kód z týždňa 2:
index.html do poľa a klikni Check.
Oprav všetky chyby (červené) — varovania (žlté) môžeš zatiaľ ignorovať.
🎨 1. CSS — ako funguje
CSS (Cascading Style Sheets) hovorí prehliadaču ako má HTML vyzerať. Každé pravidlo má tri časti: selektor (čo štylujeme), vlastnosť (čo meníme) a hodnotu (na čo to meníme).
selektor {
vlastnosť: hodnota;
vlastnosť: hodnota;
}
/* Príklady: */
h1 {
color: #2c3e50; /* farba textu */
font-size: 2rem; /* veľkosť písma */
}
p {
margin-bottom: 1rem; /* vonkajší okraj dole */
line-height: 1.6; /* výška riadku */
}
table {
width: 100%; /* šírka tabuľky */
border-collapse: collapse; /* zlúčenie ohraničení buniek */
}
ul {
list-style-type: disc; /* typ odrážky: disc, circle, square, none */
padding-left: 1.5rem; /* odsadenie zoznamu */
}
Selektory — čo štylujeme
/* Element selektor — štyluje VŠETKY h2 na stránke */
h2 { color: navy; }
/* Triedny selektor — štyluje všetko s class="moja-trieda" */
.moja-trieda { background-color: #f0f0f0; }
/* ID selektor — štyluje JEDEN prvok s id="hlavicka" */
#hlavicka { font-size: 2rem; }
/* Kombinácia — odseky VNÚTRI sekcie */
section p { color: #555; }
Keď platí viac pravidiel naraz, prehliadač použije to najšpecifickejšie. Poradie od najslabšieho po najsilnejšie:
element (najslabší) → .trieda → #id (najsilnejší)
Preto keď budeš miešať Bootstrap a vlastné CSS — Bootstrap používa triedy, takže ak chceš niečo prepísať, použi aj ty triedu alebo pridaj
!important (krajné riešenie).
📦 Box model — margin, padding, border
Každý HTML element je obdĺžnik. Box model popisuje jeho vrstvy zvnútra von:
┌─────────────────────────────────────┐ │ MARGIN │ ← vonkajší okraj — odsadenie od okolia │ ┌───────────────────────────────┐ │ │ │ BORDER │ │ ← ohraničenie (čiara okolo) │ │ ┌─────────────────────────┐ │ │ │ │ │ PADDING │ │ │ ← vnútorný okraj — odsadenie obsahu │ │ │ ┌───────────────────┐ │ │ │ │ │ │ │ OBSAH │ │ │ │ ← text, obrázok... │ │ │ └───────────────────┘ │ │ │ │ │ └─────────────────────────┘ │ │ │ └───────────────────────────────┘ │ └─────────────────────────────────────┘
div {
margin: 20px; /* vonkajší okraj zo všetkých strán */
margin-top: 10px; /* len zhora */
margin: 10px 20px; /* hore+dole | vľavo+vpravo */
margin: 10px 20px 15px 5px; /* hore | vpravo | dole | vľavo (po hodinách) */
padding: 15px; /* vnútorný okraj — rovnaká logika ako margin */
border: 1px solid #ccc; /* hrúbka | štýl | farba */
border-radius: 8px; /* zaoblenie rohov */
}
⚡ 2. Bootstrap 5 — čo to je a prečo ho používame
Bootstrap je CSS framework — hotová knižnica tried a komponentov ktorú vložíme do stránky a okamžite máme k dispozícii profesionálny dizajn, responzívny grid systém a hotové komponenty (navigácia, tlačidlá, karty, alerty...).
Namiesto písania CSS od nuly — použijeme hotové triedy priamo v HTML. Vlastné CSS píšeme len na doladenie toho čo Bootstrap nedokáže.
Ako pridať Bootstrap — CDN
CDN (Content Delivery Network) — načítame Bootstrap zo servera, nemusíme nič sťahovať.
Pridáme dva riadky do <head> a jeden pred </body>:
<!-- CSS Bootstrapu — do <head> -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"
rel="stylesheet">
<!-- Ikony Bootstrap Icons — do <head> (voliteľné) -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css"
rel="stylesheet">
<!-- JS Bootstrapu — tesne pred </body> (potrebné pre dropdown, modal...) -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
📐 Kontajnery — container vs container-fluid
Kontajner je základ každého Bootstrap layoutu — obaluje obsah a centruje ho:
<!-- .container — pevná maximálna šírka, obsah je vycentrovaný -->
<!-- Na veľkých monitoroch má obsah biely okraj z oboch strán -->
<div class="container">
Obsah je max. 1320px široký, vycentrovaný.
</div>
<!-- .container-fluid — plná šírka obrazovky, bez okrajov -->
<!-- Vhodné pre navigácie, bannery, hero sekcie -->
<div class="container-fluid">
Obsah siaha od kraja po kraj obrazovky.
</div>
.container — pre hlavný obsah stránky (text, karty, formuláre).container-fluid — pre navigáciu, pätu, celošírkové bannery
🔲 Grid systém — riadky a stĺpce
Bootstrap delí každý riadok na 12 stĺpcov.
Ty určíš koľko stĺpcov zaberie každý blok.
Základná štruktúra: container → row → col
<div class="container">
<div class="row">
<!-- Tri rovnaké stĺpce: 4+4+4 = 12 -->
<div class="col-4">Stĺpec 1</div>
<div class="col-4">Stĺpec 2</div>
<div class="col-4">Stĺpec 3</div>
</div>
<div class="row">
<!-- Dva nestihli stĺpce: 8+4 = 12 -->
<div class="col-8">Hlavný obsah</div>
<div class="col-4">Bočný panel</div>
</div>
</div>
Breakpointy — responzívne stĺpce
Pomocou breakpointov určíme ako sa stĺpce správajú na rôznych veľkostiach obrazovky. Na mobile sa stĺpce automaticky zosypú pod seba — na väčšej obrazovke sa zobrazia vedľa seba.
col- → platí pre VŠETKY veľkosti (vrátane mobilu)
col-sm- → od 576px (veľký mobil, malý tablet)
col-md- → od 768px (tablet)
col-lg- → od 992px (laptop)
col-xl- → od 1200px (veľký monitor)
<!-- Príklad: na mobile pod sebou, na tablete 2 stĺpce, na laptope 3 -->
<div class="row">
<div class="col-12 col-md-6 col-lg-4">Karta 1</div>
<div class="col-12 col-md-6 col-lg-4">Karta 2</div>
<div class="col-12 col-md-6 col-lg-4">Karta 3</div>
</div>
🎨 Predvolené farby Bootstrapu
Bootstrap má 8 pomenovaných farieb — používajú sa ako prípony tried:
primary → modrá — hlavná akcentová farba secondary → šedá — vedľajšia, menej dôležitá success → zelená — úspech, potvrdenie danger → červená — chyba, nebezpečenstvo warning → žltá — varovanie, pozor info → tyrkys — informácia light → svetlá — jemné pozadie dark → tmavá — tmavy text alebo pozadie
Farby pozadia a písma v kontajneroch
<!-- Farba pozadia: bg-{farba} -->
<div class="bg-primary">Modrý kontajner</div>
<div class="bg-success">Zelený kontajner</div>
<div class="bg-warning">Žltý kontajner</div>
<!-- Farba písma: text-{farba} -->
<div class="bg-dark text-white">Tmavý kontajner, biele písmo</div>
<div class="bg-warning text-dark">Žltý kontajner, tmavé písmo</div>
<div class="bg-primary text-white">Modrý kontajner, biele písmo</div>
<!-- Priehľadnosť: bg-opacity-{hodnota} — 25, 50, 75 -->
<div class="bg-primary bg-opacity-25">Svetlomodrý (25% opacity)</div>
<!-- Kombinácia s paddingom a okrajmi -->
<div class="bg-light border border-primary p-3 mb-2">
Svetlé pozadie, modrý okraj, padding 3, margin-bottom 2
</div>
↔️ Spacing — margin a padding cez Bootstrap triedy
Bootstrap má skratky pre margin a padding —
nemusíme písať CSS, stačí trieda priamo v HTML:
m-{n} → margin zo všetkých strán (n = 0 až 5, alebo auto)
mt-{n} → margin-top (t = top)
mb-{n} → margin-bottom (b = bottom)
ms-{n} → margin-left (start) (s = start)
me-{n} → margin-right (end) (e = end)
mx-{n} → margin vľavo aj vpravo (x = horizontálne)
my-{n} → margin hore aj dole (y = vertikálne)
p-{n}, pt-{n}, pb-{n}... → rovnaká logika pre padding
<div class="mt-3 mb-2 px-4">
margin-top: 3 jednotky, margin-bottom: 2, padding vľavo aj vpravo: 4
</div>
🧭 Navigácia z Bootstrap dokumentácie
Bootstrap má hotovú responzívnu navigáciu — Navbar. Nebudeme ju písať od nuly — skopírujeme ju z dokumentácie a upravíme. Pozrite si ju na:
<!-- Základná Bootstrap navigácia -->
<nav class="navbar navbar-expand-lg bg-primary navbar-dark">
<div class="container">
<a class="navbar-brand" href="#">Môj web</a>
<div class="collapse navbar-collapse">
<ul class="navbar-nav ms-auto">
<li class="nav-item"><a class="nav-link" href="#sekcia1">Sekcia 1</a></li>
<li class="nav-item"><a class="nav-link" href="#sekcia2">Sekcia 2</a></li>
<li class="nav-item"><a class="nav-link" href="#sekcia3">Sekcia 3</a></li>
</ul>
</div>
</div>
</nav>
📚 Bootstrap 5 — pojmy a dokumentácia
- W3Schools — Bootstrap 5 Tutorial (prehľad)
- W3Schools — Containers (container vs fluid)
- W3Schools — Grid System
- W3Schools — Colors (farby pozadia a písma)
- W3Schools — Spacing (margin a padding triedy)
- W3Schools — Navbar
- Bootstrap 5 — Grid dokumentácia (oficiálna)
🤖 Prompt pre Claude AI — Bootstrap verzia stránky
Skopíruj tento prompt do Claude AI. AI naformátuje tvoju existujúcu stránku z týždňa 2 pomocou Bootstrap 5. Obsah ostane rovnaký — zmení sa len vizuálna štruktúra.
Mám hotovú HTML stránku z predchádzajúcej úlohy. Chcem ju naformátovať pomocou Bootstrap 5 a CSS. Požiadavky: 1. Pridaj Bootstrap 5 cez CDN do <head>: <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> A pred </body>: <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script> 2. Obsah stránky NEMEŇ — len ho obal do Bootstrap štruktúry. 3. Použi Bootstrap triedy: - .container pre hlavný obsah - .container-fluid pre navigáciu a pätu - .row a .col-* pre rozdelenie obsahu do stĺpcov (napr. col-12 col-md-6 col-lg-4) - bg-* a text-* pre farby sekcií - p-*, m-* pre odsadenie - .table .table-striped .table-hover pre tabuľku - .list-group pre zoznamy 4. Navigácia musí byť Bootstrap Navbar (.navbar .navbar-expand-lg) s odkazmi na sekcie cez #id. 5. Súbor assets/css/style.css PONECHAJ — Bootstrap je priorita, CSS slúži len na doladenie. Do style.css pridaj vlastnú farebnú schému pre header a footer (nie Bootstrap farby). 6. Vypíš zvlášť obsah index.html a zvlášť obsah assets/css/style.css. Nič iné nepridávaj.
⌨️ Cvičenie na hodine — Bootstrap triedy
Keď máš vygenerovanú Bootstrap stránku, vykonaj tieto úpravy priamo v kóde. Po každej zmene ulož a skontroluj výsledok v prehliadači.
- Nájdi
<nav>a zmeňbg-primarynabg-dark— sleduj čo sa stalo - Nájdi sekciu a pridaj jej triedu
bg-lightap-4— čo sa zmenilo? - Zmeň
bg-lightnabg-warning— potom pridajtext-dark - Nájdi
.containera zmeň ho na.container-fluid— čo sa stalo so šírkou? - Pridaj triedy
mt-3 mb-3k jednému odstavcu<p>— sleduj odsadenie
- Nájdi
.rowso stĺpcamicol-md-6— zmeň nacol-md-4— čo sa stalo? - Pridaj k stĺpcom triedu
col-12— zmenši okno prehliadača — sleduj ako sa stĺpce zosypú pod seba - Nájdi tabuľku a pridaj triedy
table table-striped table-hoverna<table> - Pridaj k tabuľke obal
<div class="table-responsive">— zmenši okno prehliadača - Zmeň farbu jedného stĺpca — pridaj mu
bg-primary bg-opacity-25
-
Pridaj novú sekciu s Bootstrap kartami — skopíruj štruktúru:
<div class="row"> <div class="col-12 col-md-6 col-lg-4"> <div class="card mb-3"> <div class="card-body"> <h5 class="card-title">Názov</h5> <p class="card-text">Popis.</p> </div> </div> </div> </div> - Pridaj do navigácie nový odkaz na túto sekciu cez
#id -
V súbore
style.csszmeň farbu pozadiafooterna vlastnú farbu (nie Bootstrap triedu) — sleduj špecificitu - Pridaj k jednému
coltrieduborder border-primary rounded p-3 - Zakomentuj CDN link na Bootstrap v
<head>— pozri čo sa stane, potom vráť
Odovzdanie úlohy č. 2 (3 body):
Nahrajte do MS Teams dva súbory:
-
index.html— stránka z týždňa 2 naformátovaná Bootstrapom. Musí obsahovať:- Bootstrap 5 CDN v
<head> - Bootstrap Navbar s odkazmi na sekcie
.containerpre obsah,.container-fluidpre nav/footer- Grid rozloženie — aspoň jedna
.rows viacerými.col-* - Bootstrap farby — aspoň 2 sekcie s
bg-*triedou - Bootstrap tabuľka —
.table .table-striped
- Bootstrap 5 CDN v
-
assets/css/style.css— vlastné CSS ktoré dopĺňa Bootstrap. Musí obsahovať aspoň 3 vlastné pravidlá (nie Bootstrap triedy).
Deadline: Začiatok 4. týždňa
📚 Všetky materiály k tejto hodine:
Týždeň 4 Responzívny dizajn
📝 Témy:
- DevTools — ako testovať mobilnú verziu na PC
- Mobile-first prístup
- Media queries — vlastná responzívnosť v CSS
- Flexbox — moderné zarovnávanie prvkov
- Bootstrap responzívne utility
🔧 1. DevTools — testujeme mobilnú verziu na PC
Telefón na testovanie nepotrebujeme — každý prehliadač má vstavaný nástroj ktorý simuluje rôzne zariadenia priamo na PC.
1. Otvor stránku v prehliadači Chrome alebo Edge 2. Stlač Ctrl + Shift + I (alebo F12 — na niektorých notebookoch Fn + F12) 3. Klikni na ikonku 🖥️📱 vľavo hore v DevTools — vyzerá ako tablet s telefónom 4. V rozbaľovacom zozname vyber zariadenie: → iPhone SE, iPhone 14, Samsung Galaxy, iPad... 5. Obnov stránku — F5
Ctrl + Shift + I (alebo F12 — na niektorých notebookoch Fn + F12) — otvoriť/zatvoriť DevToolsCtrl + Shift + R — tvrdý refresh — ignoruje cache, načíta všetko znovaF5 obnovenie stránky Šírku obrazovky môžeš aj ťahať myšou — sleduj ako sa stránka mení.
📱 2. Mobile-first — prečo začíname od mobilu
Mobile-first znamená že CSS píšeme najprv pre najmenšiu obrazovku a potom pridávame pravidlá pre väčšie. Je to opak toho čo sme doteraz robili.
Tradičný prístup (desktop-first): Napíšem CSS pre veľký monitor → potom zmenšujem pre tablet → potom pre mobil Problém: na mobile to vyzerá ako zmenšená desktopová stránka Mobile-first prístup: Napíšem CSS pre mobil → potom rozširujem pre tablet → potom pre monitor Výsledok: na každom zariadení stránka vyzerá prirodzene
Viac ako 60 % návštevníkov webu príde z mobilu. Google hodnotí stránky primárne podľa mobilnej verzie — ak stránka nefunguje na mobile, vo vyhľadávaní sa zobrazí nižšie.
/* Mobile-first — základ platí pre mobil */
.container {
padding: 10px; /* na mobile — malý padding */
font-size: 14px;
}
/* Tablet a väčšie — rozšírime */
@media (min-width: 768px) {
.container {
padding: 20px; /* na tablete — väčší padding */
font-size: 16px;
}
}
/* Monitor — ešte väčšie */
@media (min-width: 992px) {
.container {
padding: 40px;
font-size: 18px;
}
}
col-12 platí pre mobil a col-md-6 platí
od tabletu. Keď v T03 sme písali col-12 col-md-6 col-lg-4
— písali sme mobile-first bez toho aby sme o tom vedeli.
📐 3. Media queries — vlastná responzívnosť v CSS
Media query je podmienka v CSS — hovorí „toto pravidlo platí len ak je obrazovka širšia/užšia ako X pixelov".
/* Všeobecný zápis */
@media (podmienka) {
/* CSS pravidlá ktoré platia len keď je podmienka splnená */
}
/* Príklady podmienok: */
@media (max-width: 576px) { /* len pre mobil — užšie ako 576px */ }
@media (min-width: 768px) { /* tablet a väčšie — širšie ako 768px */ }
@media (min-width: 992px) { /* laptop a väčšie */ }
@media (min-width: 1200px) { /* veľký monitor */ }
Breakpointy — rovnaké ako Bootstrap
xs → 0px — mobil (žiadny prefix v Bootstrap) sm → 576px — veľký mobil col-sm-* md → 768px — tablet col-md-* lg → 992px — laptop col-lg-* xl → 1200px — veľký monitor col-xl-* xxl → 1400px — extra veľký col-xxl-*
Príklad — navigácia na mobile vs desktop
/* Navigácia — na mobile pod sebou, na desktope vedľa seba */
nav ul {
list-style: none;
padding: 0;
margin: 0;
}
/* Mobil — každá položka zaberá celý riadok */
nav ul li {
display: block;
padding: 10px;
border-bottom: 1px solid #eee;
}
/* Tablet a väčšie — položky vedľa seba */
@media (min-width: 768px) {
nav ul li {
display: inline-block;
border-bottom: none;
padding: 10px 20px;
}
}
/* Nadpis — na mobile centrovane, na desktope vľavo */
h1 {
text-align: center; /* mobil */
}
@media (min-width: 768px) {
h1 {
text-align: left; /* desktop */
}
}
📦 4. Flexbox — moderné zarovnávanie prvkov
Flexbox je CSS nástroj na zarovnávanie a rozmiestnenie prvkov
v jednom smere — v riadku alebo v stĺpci.
Bootstrap grid ho používa interne — keď píšeš .row a .col,
v pozadí pracuje Flexbox.
/* Aktivujeme Flexbox na rodičovskom prvku */
.rodic {
display: flex;
}
/* Smer — riadok (default) alebo stĺpec */
flex-direction: row; /* deti vedľa seba → (default) */
flex-direction: column; /* deti pod sebou ↓ */
/* Zarovnanie po hlavnej osi (horizontálne ak row) */
justify-content: flex-start; /* zarovnať vľavo (default) */
justify-content: flex-end; /* zarovnať vpravo */
justify-content: center; /* vycentrovať */
justify-content: space-between; /* rovnomerne — prvý vľavo, posledný vpravo */
justify-content: space-around; /* rovnomerne — s okrajmi */
/* Zarovnanie po vedľajšej osi (vertikálne ak row) */
align-items: flex-start; /* zarovnať hore */
align-items: flex-end; /* zarovnať dole */
align-items: center; /* vertikálne vycentrovať */
align-items: stretch; /* natiahnuť na výšku rodiča (default) */
/* Zalamovanie — ak sa deti nezmestia na jeden riadok */
flex-wrap: nowrap; /* nezalamuj (default) */
flex-wrap: wrap; /* zalomí na ďalší riadok */
Príklad — karty vedľa seba s Flexboxom
.karty {
display: flex;
flex-wrap: wrap; /* zalomí na mobile */
gap: 20px; /* medzera medzi kartami */
justify-content: center;
}
.karta {
flex: 1 1 250px;
/* flex-grow: 1 → môže rásť */
/* flex-shrink: 1 → môže sa zmenšiť */
/* flex-basis: 250px → minimálna šírka 250px */
padding: 20px;
border: 1px solid #ddd;
border-radius: 8px;
}
/* Výsledok:
Mobil → karty pod sebou (250px sa nezmestia vedľa seba)
Tablet → 2 karty vedľa seba
Monitor→ 3 a viac kariet vedľa seba
Bez jedinej media query! */
Praktické použitie Flexboxu
/* Vycentrovať prvok horizontálne aj vertikálne */
.centrovany {
display: flex;
justify-content: center; /* horizontálne */
align-items: center; /* vertikálne */
height: 200px;
}
/* Navigácia s logom vľavo a odkazmi vpravo */
nav {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 20px;
}
/* Footer — tri stĺpce rovnomerne */
footer {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
gap: 20px;
}
🔲 CSS Grid — informačne
CSS Grid je nástroj na rozmiestnenie prvkov v dvoch smeroch naraz — v riadkoch aj stĺpcoch. Bootstrap grid je inšpirovaný CSS Gridom ale píše sa inak. V našom predmete budeme používať Bootstrap grid — CSS Grid len spomíname aby ste vedeli že existuje.
⚡ 5. Bootstrap responzívne utility
Bootstrap má hotové triedy na skrývanie, zobrazovanie a zarovnávanie prvkov podľa veľkosti obrazovky — bez písania CSS.
Skrývanie a zobrazovanie — d-* triedy
/* d-none = display:none (skryť) */
/* d-{breakpoint}-{hodnota} = platí od daného breakpointu */
<!-- Skryť na mobile, zobraziť od tabletu -->
<div class="d-none d-md-block">Len na tablete a väčšom</div>
<!-- Zobraziť len na mobile, skryť od tabletu -->
<div class="d-block d-md-none">Len na mobile</div>
<!-- Skryť na mobile aj tablete, zobraziť od laptopu -->
<div class="d-none d-lg-block">Len na laptope a väčšom</div>
Poradie stĺpcov na mobile — order-* triedy
<!-- Na desktope: obsah vľavo, obrázok vpravo
Na mobile: obrázok hore, obsah dole -->
<div class="row">
<div class="col-12 col-md-8 order-2 order-md-1">
Hlavný obsah — na desktope prvý, na mobile druhý
</div>
<div class="col-12 col-md-4 order-1 order-md-2">
Obrázok — na desktope druhý, na mobile prvý
</div>
</div>
Zarovnanie textu podľa veľkosti
<!-- Na mobile centrovane, od tabletu vľavo --> <p class="text-center text-md-start">Tento text...</p> <!-- Na mobile vľavo, od laptopa vpravo --> <p class="text-start text-lg-end">Tento text...</p>
Flexbox utility v Bootstrape
<!-- Aktivovať flexbox --> <div class="d-flex">...</div> <div class="d-md-flex">...</div> <!-- flex len od tabletu --> <!-- justify-content --> <div class="d-flex justify-content-between">...</div> <div class="d-flex justify-content-center">...</div> <!-- align-items --> <div class="d-flex align-items-center">...</div> <!-- flex-wrap --> <div class="d-flex flex-wrap">...</div>
- W3Schools — Bootstrap 5 Flex
- W3Schools — Bootstrap 5 Utilities
- Bootstrap 5 — Display utilities (oficiálna dok.)
🤖 Prompt pre Claude AI — nová responzívna stránka
Skopíruj tento prompt do Claude AI. Vytvoríš novú jednoduchú stránku kde si vyskúšaš responzívny dizajn — existujúcu stránku z predchádzajúcich týždňov nechaj tak.
Vytvor mi jednoduchú HTML stránku na tému "O mne" (alebo ľubovoľnú tému podľa môjho záujmu).
Požiadavky:
1. Súbory:
- index-responsive.html (hlavná stránka)
- assets/css/responsive.css (vlastné CSS)
Bootstrap 5 pridaj cez CDN.
2. Štruktúra stránky:
- Bootstrap Navbar s 3 odkazmi na sekcie (#o-mne, #zaujmy, #kontakt)
- Sekcia #o-mne: krátky text a fotka (môže byť placeholder obrázok)
- Sekcia #zaujmy: 3 karty vedľa seba — každá s názvom záujmu a krátkym popisom
- Sekcia #kontakt: jednoduchý text s kontaktnými údajmi (vymyslené)
- Footer s menom a rokom
3. Bootstrap grid — mobile-first:
- Karty musia byť: col-12 col-md-6 col-lg-4
(na mobile pod sebou, na tablete 2 vedľa seba, na laptope 3 vedľa seba)
4. Bootstrap responzívne utility:
- Pridaj jeden prvok viditeľný len na desktope: class="d-none d-md-block"
(napr. dekoratívny text alebo extra info)
- Pridaj jeden prvok viditeľný len na mobile: class="d-block d-md-none"
(napr. skrátený text alebo upozornenie)
5. Do assets/css/responsive.css pridaj:
- Vlastnú farebnú schému pre navbar a footer (nie Bootstrap farby)
- Mobile-first media queries:
základné CSS pre mobil (bez @media)
@media (min-width: 768px) pre tablet — zväčši písmo, uprav padding
@media (min-width: 992px) pre laptop — ďalšie úpravy
- Footer pomocou Flexboxu:
na mobile prvky pod sebou (flex-direction: column)
od tabletu vedľa seba (flex-direction: row, justify-content: space-between)
6. Vypíš zvlášť obsah index-responsive.html a zvlášť obsah assets/css/responsive.css.
⌨️ Cvičenie na hodine — otestuj svoju stránku
Keď máš vygenerovanú stránku, otestuj ju v DevTools.
Otvor stránku v prehliadači, stlač Ctrl + Shift + I
a klikni na ikonku telefónu vľavo hore v DevTools.
Po každej zmene ulož súbor a obnov stránku cez Ctrl + Shift + R.
- Prepni na iPhone SE — sú karty pod sebou? Ak nie — skontroluj či majú
col-12 - Prepni na iPad — sú karty 2 vedľa seba? Skontroluj
col-md-6 - Prepni na laptop (šírka 1200px) — sú karty 3 vedľa seba? Skontroluj
col-lg-4 - Nájdi prvok s
d-none d-md-block— zmizol na mobile? - Nájdi prvok s
d-block d-md-none— zobrazil sa len na mobile?
- Otvor
assets/css/responsive.css— nájdi media query pre tablet a zmeň farbu pozadiabody— sleduj v DevTools - Nájdi footer v CSS — zmeň
flex-directionna mobile zcolumnnarow— čo sa stalo? Vráť späť - Zmenši okno prehliadača ručne myšou — sleduj v akom momente sa karty preskupia
- Prepni DevTools do režimu otočeného telefónu (ikonka otočenia) — sleduj rozdiel
- Otestuj stránku na 3 rôznych zariadeniach v DevTools a oprav čo nefunguje
- Pridaj štvrtú kartu — čo sa stalo s rozložením? Prečo?
-
Zmeň footer na Flexbox s ikonkami — uprav CSS:
footer { display: flex; justify-content: space-around; align-items: center; flex-wrap: wrap; gap: 10px; } - Pridaj do CSS vlastnú media query — na mobile skry navbar text a nechaj len ikony
- Vyskúšaj Flexbox Froggy — prvých 10 úrovní
- Porovnaj svoju stránku na mobile a desktope — čo by si zmenil/a aby vyzerala lepšie?
style="" atribúty validátor nepozná, to nie sú chyby.
Odovzdanie úlohy č. 3 (3 body):
Nahrajte do MS Teams dva súbory:
-
index-responsive.html— nová stránka. Musí obsahovať:- Bootstrap 5 CDN
- Bootstrap Navbar s odkazmi na sekcie
- 1 riadok (
.row) s 3 stĺpcami (.col-12 .col-md-6 .col-lg-4) — každý stĺpec obsahuje jednu kartu (.card) - aspoň jeden prvok skrytý na mobile (
d-none d-md-block) - aspoň jeden prvok zobrazený len na mobile (
d-block d-md-none)
-
assets/css/responsive.css— musí obsahovať:- aspoň dve
@mediapravidlá podľa mobile-first prístupu - Flexbox na footeri
- vlastnú farebnú schému (nie len Bootstrap farby)
- aspoň dve
Deadline: Začiatok 5. týždňa
📚 Všetky materiály k tejto hodine:
Týždeň 5 Formuláre
📝 Témy:
- Input typy (text, email, number, date, password, tel...)
- Textarea, select, checkbox, radio button
- Zoskupenie polí —
fieldsetalegend - HTML5 validácia — atribúty
required,pattern,min,max,minlength - Bootstrap triedy pre formuláre —
form-control,form-label,form-check - CSS štýlovanie stavov formulára —
:valid,:invalid,:focus - Vizuálna spätná väzba používateľovi (zelená/červená pri vypĺňaní)
📋 1. Input typy — prehľad
Všetky input typy si pozri priamo na W3Schools — HTML Input Types — každý typ má ukážku zdrojového kódu aj ako vyzerá v prehliadači. Tu je rýchly prehľad tých ktoré budeš používať najčastejšie:
| Typ | Na čo sa používa | Dôležité atribúty |
|---|---|---|
text | Jednoriadkový text | minlength, maxlength, pattern |
email | E-mailová adresa | required — prehliadač overí formát automaticky |
password | Heslo — znaky sú skryté | minlength |
number | Číslo | min, max, step |
tel | Telefónne číslo | pattern — prehliadač formát neoveruje sám |
date | Dátum — zobrazí výber kalendára | min, max |
url | Webová adresa | required — prehliadač overí formát automaticky |
checkbox | Zaškrtávacie políčko — viac možností | checked — predvolene zaškrtnuté |
radio | Prepínač — len jedna možnosť zo skupiny | name — všetky v skupine musia mať rovnaký name |
file | Nahratie súboru | accept — napr. accept="image/*" |
range | Posuvník | min, max, step |
hidden | Skrytá hodnota — neviditeľné pole | value |
Okrem input existujú aj samostatné elementy:
| Element | Na čo sa používa | Rozdiel od input |
|---|---|---|
<textarea> | Viacriadkový text | Má párový tag, atribúty rows a cols |
<select> | Rozbaľovací zoznam | Vnútri <option> pre každú možnosť |
🧱 2. Čistý HTML formulár — základ bez štýlov
Najprv sa pozrieme na formulár bez akéhokoľvek štýlovania. Toto je základ — Bootstrap a CSS len menia to ako vyzerá, nie ako funguje.
<form action="#" method="post">
<label for="meno">Meno:</label>
<input type="text" id="meno" name="meno" required minlength="2">
<label for="email">E-mail:</label>
<input type="email" id="email" name="email" required>
<label for="sprava">Správa:</label>
<textarea id="sprava" name="sprava" rows="4" required></textarea>
<label for="tema">Téma:</label>
<select id="tema" name="tema">
<option value="">-- Vyber tému --</option>
<option value="otazka">Otázka</option>
<option value="problem">Problém</option>
<option value="ine">Iné</option>
</select>
<button type="submit">Odoslať</button>
</form>
for na label musí zodpovedať id na input.
Keď klikneš na label — kurzor skočí do poľa.
Je to aj požiadavka prístupnosti (accessibility).
🗂️ 3. Fieldset a legend — zoskupenie polí
Keď má formulár viac sekcií — napríklad osobné údaje a kontaktné údaje —
môžeme polia zoskupiť pomocou <fieldset>.
Nadpis skupiny pridáme cez <legend>.
<form action="#" method="post">
<fieldset>
<legend>Osobné údaje</legend>
<label for="meno">Meno:</label>
<input type="text" id="meno" name="meno" required>
<label for="vek">Vek:</label>
<input type="number" id="vek" name="vek" min="1" max="120">
</fieldset>
<fieldset>
<legend>Kontaktné údaje</legend>
<label for="email">E-mail:</label>
<input type="email" id="email" name="email" required>
<label for="tel">Telefón:</label>
<input type="tel" id="tel" name="tel" pattern="[0-9]{9,10}">
</fieldset>
<button type="submit">Odoslať</button>
</form>
🎨 4. Rovnaký formulár s Bootstrapom
Bootstrap má pripravené triedy pre formulárové prvky. HTML zostáva rovnaké — pridáme len triedy.
| Bootstrap trieda | Na čo sa používa |
|---|---|
form-control | Štýluje input, textarea, select |
form-label | Štýluje label — správny spacing |
mb-3 | Odsadenie medzi poliami |
form-check | Obalí checkbox alebo radio tlačidlo |
form-check-input | Samotný checkbox alebo radio |
form-check-label | Label pre checkbox alebo radio |
form-select | Štýluje select — namiesto form-control |
btn btn-primary | Tlačidlo odoslať |
<form action="#" method="post">
<fieldset class="border rounded p-3 mb-3">
<legend class="float-none w-auto px-2 fs-6">Osobné údaje</legend>
<div class="mb-3">
<label for="meno" class="form-label">Meno *</label>
<input type="text" class="form-control" id="meno"
name="meno" required minlength="2"
placeholder="Zadaj meno">
</div>
<div class="mb-3">
<label for="email" class="form-label">E-mail *</label>
<input type="email" class="form-control" id="email"
name="email" required
placeholder="meno@domena.sk">
</div>
<div class="mb-3">
<label for="tel" class="form-label">Telefón</label>
<input type="tel" class="form-control" id="tel"
name="tel" pattern="[0-9]{9,10}"
placeholder="0901234567">
</div>
</fieldset>
<fieldset class="border rounded p-3 mb-3">
<legend class="float-none w-auto px-2 fs-6">Správa</legend>
<div class="mb-3">
<label for="tema" class="form-label">Téma</label>
<select class="form-select" id="tema" name="tema">
<option value="">-- Vyber tému --</option>
<option value="otazka">Otázka</option>
<option value="problem">Problém</option>
<option value="ine">Iné</option>
</select>
</div>
<div class="mb-3">
<label for="sprava" class="form-label">Správa *</label>
<textarea class="form-control" id="sprava"
name="sprava" rows="4" required
minlength="10"></textarea>
</div>
<div class="mb-3">
<div class="form-check">
<input class="form-check-input" type="checkbox"
id="suhlas" name="suhlas" required>
<label class="form-check-label" for="suhlas">
Súhlasím so spracovaním osobných údajov *
</label>
</div>
</div>
</fieldset>
<button type="submit" class="btn btn-primary">Odoslať</button>
</form>
✅ 5. CSS validácia — :valid, :invalid, :focus
Prehliadač automaticky pridá stav :valid alebo :invalid
každému poľu podľa toho či hodnota spĺňa atribúty (required, pattern...).
My len napíšeme CSS — čo sa má zobraziť pri každom stave.
| CSS pseudo-trieda | Kedy platí |
|---|---|
:focus | Keď je pole aktívne — klikol si do neho |
:valid | Hodnota je správna — spĺňa všetky atribúty |
:invalid | Hodnota je nesprávna alebo povinné pole je prázdne |
:invalid platí aj pre prázdne povinné pole hneď po načítaní stránky —
predtým než používateľ čokoľvek napísal.
Preto červenú farbu nastavíme až po tom ako pole stratí fokus,
pomocou kombinácie :not(:focus):invalid.
/* Fokus — modré ohraničenie keď je pole aktívne */
.form-control:focus {
border-color: #0d6efd;
box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25);
}
/* Platná hodnota — zelené ohraničenie */
.form-control:valid {
border-color: #198754;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='%23198754' d='M10.28 1.28L3.989 7.575 1.695 5.28A1 1 0 00.28 6.695l3 3a1 1 0 001.414 0l7-7A1 1 0 0010.28 1.28z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 0.75rem center;
background-size: 1rem;
padding-right: 2.5rem;
}
/* Neplatná hodnota — červené ohraničenie
:not(:focus) — nezobrazí sa kým je pole aktívne
:not(:placeholder-shown) — nezobrazí sa kým je pole prázdne */
.form-control:not(:focus):not(:placeholder-shown):invalid {
border-color: #dc3545;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='%23dc3545' d='M6 0a6 6 0 100 12A6 6 0 006 0zm0 10.5a.75.75 0 110-1.5.75.75 0 010 1.5zm.75-3.75a.75.75 0 01-1.5 0v-3a.75.75 0 011.5 0v3z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 0.75rem center;
background-size: 1rem;
padding-right: 2.5rem;
}
/* Pomocný text pod poľom — zobrazí sa len keď je hodnota neplatná */
.form-control:not(:focus):not(:placeholder-shown):invalid ~ .invalid-hint {
display: block;
}
.invalid-hint {
display: none;
font-size: 0.85rem;
color: #dc3545;
margin-top: 0.25rem;
}
<!-- Použitie invalid-hint v HTML -->
<div class="mb-3">
<label for="tel" class="form-label">Telefón</label>
<input type="tel" class="form-control" id="tel"
name="tel" pattern="[0-9]{9,10}"
placeholder="0901234567">
<span class="invalid-hint">Zadaj 9 až 10 číslic bez medzier.</span>
</div>
🤖 Prompt pre Claude AI — formulár pre tvoju aplikáciu
Skopíruj tento prompt do Claude AI a doplň popis svojej aplikácie a polí ktoré chceš mať vo formulári.
Vytvor mi HTML formulár pre moju webovú aplikáciu. Moja aplikácia je: [DOPÍŠ — napr. "recept web", "eshop", "kontaktná stránka"] Formulár má obsahovať tieto polia: [DOPÍŠ — napr.] - Meno (text, povinné, min. 2 znaky) - E-mail (email, povinné) - Telefón (tel, nepovinné, 9-10 číslic) - Správa (textarea, povinné, min. 10 znakov) - Súhlas s podmienkami (checkbox, povinné) Požiadavky: 1. Polia zoskup pomocou fieldset a legend do logických skupín. 2. Použi Bootstrap 5 triedy: - form-control pre input a textarea - form-label pre label - form-select pre select - form-check, form-check-input, form-check-label pre checkbox a radio - mb-3 pre odsadenie medzi poliami - btn btn-primary pre tlačidlo 3. Do súboru style.css pridaj CSS validáciu: - :focus — modré ohraničenie aktívneho poľa - :valid — zelené ohraničenie + ikona fajky - :not(:focus):not(:placeholder-shown):invalid — červené ohraničenie + ikona - .invalid-hint — pomocný text pod poľom viditeľný len pri neplatnej hodnote 4. Každé pole musí mať: - label s atribútom for - input s atribútom id, name, type - placeholder s príkladom hodnoty - správne HTML5 validačné atribúty (required, pattern, minlength...) - span class="invalid-hint" s vysvetlením čo je nesprávne 5. Vypíš zvlášť obsah HTML a zvlášť obsah style.css.
⌨️ Cvičenie na hodine
Otvor svoju stránku z predchádzajúcich týždňov. Pridáš do nej kontaktný formulár s validáciou.
- Pridaj do stránky novú sekciu
<section id="kontakt"> - Vytvor formulár s poliami: meno (text), email (email), správa (textarea)
- Každému poľu pridaj
labelso správnymforaid - Povinným poliam pridaj atribút
required - Pridaj Bootstrap triedy —
form-control,form-label,mb-3
- Zoskup polia do dvoch
fieldsetskupín — pridajlegendkaždej - Pridaj pole telefón (
type="tel") s atribútompattern="[0-9]{9,10}" - Pridaj
selects aspoň 3 možnosťami — použiform-select - Pridaj
checkboxpre súhlas s podmienkami — použiform-check - Otestuj v prehliadači — skús odoslať prázdny formulár, čo sa stane?
-
Pridaj do
style.cssCSS pre:focus— modré ohraničenie aktívneho poľa:.form-control:focus { border-color: #0d6efd; box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25); } - Pridaj CSS pre
:valid— zelené ohraničenie keď je hodnota správna - Pridaj CSS pre
:not(:focus):not(:placeholder-shown):invalid— červené ohraničenie -
Ku každému poľu pridaj
<span class="invalid-hint">s popisom chyby — napíš CSS aby sa zobrazil len pri neplatnej hodnote - Vyskúšaj formulár — vypĺňaj polia správne aj nesprávne, sleduj farby
Odovzdanie úlohy č. 4 (3 body):
Nahrajte do MS Teams dva súbory:
-
index.htmlalebo nová stránka — musí obsahovať:- formulár s aspoň 5 rôznymi typmi vstupných polí
fieldsetalegend— aspoň 2 skupiny- Bootstrap triedy pre všetky formulárové prvky
- HTML5 validačné atribúty (
required,patternalebominlength)
-
style.css— musí obsahovať:- CSS pre
:focus,:valid,:invalid - CSS pre
.invalid-hint— pomocný text pri chybe
- CSS pre
Deadline: Začiatok 6. týždňa
📚 Materiály:
Týždeň 6 JavaScript Light + Test 1
📝 Témy:
- Čo dokáže JavaScript — motivácia a základy
- Kde sa JavaScript píše — inline vs externý súbor
- DOM manipulácia — nájdi prvok, zmeň text, prepni triedu
- Event listener — reakcia na kliknutie
- Praktické ukážky — dark mode, počítadlo znakov, podmienený formulár, živé vyhľadávanie
⚡ 1. Čo dokáže JavaScript
HTML určuje čo je na stránke. CSS určuje ako to vyzerá. JavaScript určuje čo sa stane keď používateľ niečo urobí — klikne, píše, scrolluje.
Veci ktoré poznáš z reálnych stránok a ktoré robí JavaScript:
- Prepnutie svetlého a tmavého režimu
- Zobrazenie a skrytie časti stránky
- Počítadlo zostávajúcich znakov pri písaní
- Filtrovanie zoznamu pri písaní do poľa
- Validácia formulára pred odoslaním
- Rozbalenie ďalších polí podľa výberu používateľa
📄 2. Kde sa JavaScript píše
Rovnako ako CSS — JS môžeme písať inline alebo do externého súboru. Externý súbor je vždy lepší — kód je prehľadnejší a súbor sa dá použiť na viacerých stránkach.
<!-- ❌ Inline — nie je odporúčané -->
<button onclick="alert('Klikol si!')">Klikni</button>
<!-- ✅ Externý súbor — odporúčané -->
<!-- Pridaj pred </body> — nie do <head> -->
<script src="assets/js/script.js"></script>
</body>
<script> v <head>,
JS sa spustí skôr ako HTML prvky existujú — a nenájde ich.
Pred </body> sú už všetky prvky načítané.
🌳 3. DOM manipulácia — základné príkazy
DOM (Document Object Model) je reprezentácia HTML stránky v pamäti prehliadača. JavaScript môže cez DOM nájsť akýkoľvek prvok a zmeniť ho.
| Príkaz | Čo robí |
|---|---|
document.getElementById('id') | Nájde prvok podľa id |
element.textContent | Číta alebo mení text prvku |
element.classList.toggle('trieda') | Pridá triedu ak ju nemá, odoberie ak ju má |
element.classList.add('trieda') | Pridá CSS triedu |
element.classList.remove('trieda') | Odoberie CSS triedu |
element.style.display = 'none' | Skryje prvok |
element.style.display = 'block' | Zobrazí prvok |
element.value | Číta hodnotu input poľa |
👂 4. Event listener — reakcia na udalosť
Event listener "počúva" na udalosť — napríklad kliknutie — a zavolá funkciu keď nastane.
// Nájdi tlačidlo podľa id
const tlacidlo = document.getElementById('moje-tlacidlo');
// Keď naň klikneš — zavolá sa funkcia
tlacidlo.addEventListener('click', function() {
// Čo sa stane po kliknutí
console.log('Klikol si!');
});
| Udalosť | Kedy nastane |
|---|---|
click | Kliknutie na prvok |
input | Zmena hodnoty v input poli — každý stlačený kláves |
change | Zmena hodnoty v select alebo checkbox — po opustení poľa |
submit | Odoslanie formulára |
🌙 5. Ukážka — Dark mode toggle
Kliknutím na tlačidlo prepneme svetlý a tmavý režim.
JS len pridá alebo odoberie CSS triedu dark na <body>
— o farby sa postará CSS.
<!-- HTML -->
<button id="dark-toggle">🌙 Tmavý režim</button>
/* CSS — tmavý režim */
body.dark {
background-color: #1a1a2e;
color: #e0e0e0;
}
body.dark .card {
background-color: #16213e;
border-color: #444;
}
// JavaScript — script.js
const toggleBtn = document.getElementById('dark-toggle');
toggleBtn.addEventListener('click', function() {
// Pridá triedu 'dark' ak ju body nemá, odoberie ak ju má
document.body.classList.toggle('dark');
// Zmení text tlačidla podľa aktuálneho režimu
if (document.body.classList.contains('dark')) {
toggleBtn.textContent = '☀️ Svetlý režim';
} else {
toggleBtn.textContent = '🌙 Tmavý režim';
}
});
🔢 6. Ukážka — Počítadlo znakov v textarea
Pri písaní do textarea zobrazíme koľko znakov zostáva.
Udalosť input sa spustí pri každom stlačení klávesu.
<!-- HTML -->
<div class="mb-3">
<label for="sprava" class="form-label">Správa</label>
<textarea class="form-control" id="sprava" maxlength="200" rows="4"></textarea>
<small id="pocitadlo" class="text-muted">Zostáva: 200 znakov</small>
</div>
// JavaScript — script.js
const textarea = document.getElementById('sprava');
const pocitadlo = document.getElementById('pocitadlo');
const maxZnakov = 200;
textarea.addEventListener('input', function() {
const zostatok = maxZnakov - textarea.value.length;
pocitadlo.textContent = 'Zostáva: ' + zostatok + ' znakov';
// Červená farba keď zostáva menej ako 20 znakov
if (zostatok < 20) {
pocitadlo.style.color = '#dc3545';
} else {
pocitadlo.style.color = '';
}
});
📋 7. Ukážka — Podmienený formulár
Podľa výberu používateľa sa zobrazí alebo skryje ďalšia časť formulára. Používateľ vyberie či má záujem o obed — ak áno, rozbalí sa výber jedál.
<!-- HTML -->
<div class="mb-3">
<label class="form-label">Máte záujem o obed?</label>
<div class="form-check">
<input class="form-check-input" type="radio"
name="obed" id="obed-ano" value="ano">
<label class="form-check-label" for="obed-ano">Áno</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio"
name="obed" id="obed-nie" value="nie" checked>
<label class="form-check-label" for="obed-nie">Nie</label>
</div>
</div>
<!-- Táto sekcia je na začiatku skrytá -->
<div id="vyber-jedla" style="display:none">
<div class="mb-3">
<label for="jedlo" class="form-label">Vyberte jedlo:</label>
<select class="form-select" id="jedlo" name="jedlo">
<option value="">-- Vyberte --</option>
<option value="polievka">Polievka</option>
<option value="rezne">Rezne s hranolkami</option>
<option value="salat">Šalát</option>
</select>
</div>
</div>
// JavaScript — script.js
const radioButtons = document.querySelectorAll('input[name="obed"]');
const vyberJedla = document.getElementById('vyber-jedla');
radioButtons.forEach(function(radio) {
radio.addEventListener('change', function() {
if (this.value === 'ano') {
vyberJedla.style.display = 'block';
} else {
vyberJedla.style.display = 'none';
}
});
});
getElementById nájde jeden prvok podľa id.
querySelectorAll nájde všetky prvky ktoré zodpovedajú CSS selektoru —
použijeme ho keď potrebujeme pracovať s viacerými prvkami naraz.
🔍 8. Ukážka — Živé vyhľadávanie v zozname
Pri písaní do poľa sa zoznam filtruje v reálnom čase — zobrazia sa len položky ktoré obsahujú hľadaný text.
<!-- HTML -->
<input type="text" class="form-control mb-3"
id="hladaj" placeholder="Hľadaj...">
<ul id="zoznam">
<li>Jablko</li>
<li>Banán</li>
<li>Čerešňa</li>
<li>Jahoda</li>
<li>Malina</li>
<li>Pomaranč</li>
</ul>
// JavaScript — script.js
const hladajPole = document.getElementById('hladaj');
const polozky = document.querySelectorAll('#zoznam li');
hladajPole.addEventListener('input', function() {
// Prevedieme hľadaný text na malé písmená — case-insensitive hľadanie
const hladanyText = hladajPole.value.toLowerCase();
polozky.forEach(function(polozka) {
const textPolozky = polozka.textContent.toLowerCase();
if (textPolozky.includes(hladanyText)) {
polozka.style.display = 'block'; // zobraz
} else {
polozka.style.display = 'none'; // skry
}
});
});
🤖 Prompt pre Claude AI — ukážková stránka
Tento prompt vygeneruje ukážkovú stránku so všetkými JS prvkami ktoré sme preberali — použi ju ako referenčný príklad pri práci na svojej stránke.
Vytvor mi ukážkovú HTML stránku ktorá demonštruje základné
interaktívne prvky pomocou JavaScriptu.
Stránka nech má tému "Kaviareň" — vymysli obsah.
Musí obsahovať:
1. Dark mode toggle tlačidlo v navigácii
2. Kontaktný formulár so sekciou:
- textarea s počítadlom zostávajúcich znakov (max 200)
- radio tlačidlá "Mám záujem o rezerváciu: Áno / Nie"
ak Áno — rozbalí sa sekcia s výberom dátumu a počtu osôb
3. Zoznam ponuky (aspoň 6 položiek) s vyhľadávacím poľom nad ním
4. Navigácia s odkazmi na sekcie stránky — po kliknutí
sa stránka plynulo posunie na danú sekciu
5. Po odoslaní formulára sa stránka vráti na začiatok
Požiadavky:
- Bootstrap 5 cez CDN
- Externý CSS súbor: assets/css/style.css
- Externý JS súbor: assets/js/script.js — pridaj pred