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.


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.



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:

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.

Jednoduché – nájdi a zmeň hodnotu
  1. Zmeň <title> stránky na iný názov – sleduj čo sa zmení v záložke prehliadača
  2. Zmeň text v <h1> v headeri
  3. Zmeň alt atribút obrázka na výstižnejší popis
  4. Zmeň jeden externý odkaz – nahraď URL inou webovou stránkou
  5. Pridaj atribút target="_blank" k odkazu ktorý ho ešte nemá
Stredné – pridaj alebo odober prvok
  1. Zmeň <ol> (číslovaný zoznam) na <ul> (nečíslovaný) – sleduj čo sa stane
  2. Pridaj novú položku <li> do existujúceho zoznamu
  3. Pridaj nový riadok <tr> s dátami do tabuľky
  4. Skontroluj či má <html> atribút lang="sk" – ak nie, pridaj ho
  5. Zmeň <h2> v jednej sekcii na <h3> – čo sa vizuálne zmení?
Náročnejšie – pochop štruktúru
  1. Pridaj novú <section> s unikátnym id, nadpisom <h2> a jedným odsekom <p>
  2. Pridaj odkaz do <nav> ktorý smeruje na tvoju novú sekciu cez #id
  3. Zakomentuj riadok <link rel="stylesheet"> v <head> – pozri čo sa stane, potom odkomentuj:
    <!-- <link rel="stylesheet" href="assets/css/style.css"> -->
  4. Nájdi <footer> a zmeň meno autora alebo rok
  5. 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äť.
Úloha 16 – obrázok
  1. Nájdi si voľne použiteľný obrázok na Unsplash alebo Pexels, alebo si nechaj obrázok vygenerovať v Claude AI. Ulož ho do priečinka assets/images/ a správne ho nastav v HTML:
     <img src="assets/images/foto.jpg" alt="popis obrázka" width="400" height="300">
    Obrázok musí byť viditeľný v prehliadači.
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 width a height
  • 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 — .container vs .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:

🎨 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; }

📦 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>

🔲 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: containerrowcol

<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

🤖 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.

Jednoduché — triedy farieb a spacing
  1. Nájdi <nav> a zmeň bg-primary na bg-dark — sleduj čo sa stalo
  2. Nájdi sekciu a pridaj jej triedu bg-light a p-4 — čo sa zmenilo?
  3. Zmeň bg-light na bg-warning — potom pridaj text-dark
  4. Nájdi .container a zmeň ho na .container-fluid — čo sa stalo so šírkou?
  5. Pridaj triedy mt-3 mb-3 k jednému odstavcu <p> — sleduj odsadenie
Stredné — grid stĺpce
  1. Nájdi .row so stĺpcami col-md-6 — zmeň na col-md-4 — čo sa stalo?
  2. Pridaj k stĺpcom triedu col-12 — zmenši okno prehliadača — sleduj ako sa stĺpce zosypú pod seba
  3. Nájdi tabuľku a pridaj triedy table table-striped table-hover na <table>
  4. Pridaj k tabuľke obal <div class="table-responsive"> — zmenši okno prehliadača
  5. Zmeň farbu jedného stĺpca — pridaj mu bg-primary bg-opacity-25
Náročnejšie — rozloženie stránky
  1. 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>
  2. Pridaj do navigácie nový odkaz na túto sekciu cez #id
  3. V súbore style.css zmeň farbu pozadia footer na vlastnú farbu (nie Bootstrap triedu) — sleduj špecificitu
  4. Pridaj k jednému col triedu border border-primary rounded p-3
  5. 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
    • .container pre obsah, .container-fluid pre nav/footer
    • Grid rozloženie — aspoň jedna .row s viacerými .col-*
    • Bootstrap farby — aspoň 2 sekcie s bg-* triedou
    • Bootstrap tabuľka — .table .table-striped
  • 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

📱 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
/* 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;
    }
}

📐 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>

🤖 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.

Jednoduché — testujeme v DevTools
  1. Prepni na iPhone SE — sú karty pod sebou? Ak nie — skontroluj či majú col-12
  2. Prepni na iPad — sú karty 2 vedľa seba? Skontroluj col-md-6
  3. Prepni na laptop (šírka 1200px) — sú karty 3 vedľa seba? Skontroluj col-lg-4
  4. Nájdi prvok s d-none d-md-block — zmizol na mobile?
  5. Nájdi prvok s d-block d-md-none — zobrazil sa len na mobile?
Stredné — upravujeme CSS
  1. Otvor assets/css/responsive.css — nájdi media query pre tablet a zmeň farbu pozadia body — sleduj v DevTools
  2. Nájdi footer v CSS — zmeň flex-direction na mobile z column na row — čo sa stalo? Vráť späť
  3. Zmenši okno prehliadača ručne myšou — sleduj v akom momente sa karty preskupia
  4. Prepni DevTools do režimu otočeného telefónu (ikonka otočenia) — sleduj rozdiel
  5. Otestuj stránku na 3 rôznych zariadeniach v DevTools a oprav čo nefunguje
Náročnejšie — vlastné úpravy
  1. Pridaj štvrtú kartu — čo sa stalo s rozložením? Prečo?
  2. Zmeň footer na Flexbox s ikonkami — uprav CSS:
    footer {
        display: flex;
        justify-content: space-around;
        align-items: center;
        flex-wrap: wrap;
        gap: 10px;
    }
  3. Pridaj do CSS vlastnú media query — na mobile skry navbar text a nechaj len ikony
  4. Vyskúšaj Flexbox Froggy — prvých 10 úrovní
  5. Porovnaj svoju stránku na mobile a desktope — čo by si zmenil/a aby vyzerala lepšie?
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 @media pravidlá podľa mobile-first prístupu
    • Flexbox na footeri
    • vlastnú farebnú schému (nie len Bootstrap farby)

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í — fieldset a legend
  • 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
textJednoriadkový textminlength, maxlength, pattern
emailE-mailová adresarequired — prehliadač overí formát automaticky
passwordHeslo — znaky sú skrytéminlength
numberČíslomin, max, step
telTelefónne číslopattern — prehliadač formát neoveruje sám
dateDátum — zobrazí výber kalendáramin, max
urlWebová adresarequired — prehliadač overí formát automaticky
checkboxZaškrtávacie políčko — viac možnostíchecked — predvolene zaškrtnuté
radioPrepínač — len jedna možnosť zo skupinyname — všetky v skupine musia mať rovnaký name
fileNahratie súboruaccept — napr. accept="image/*"
rangePosuvníkmin, max, step
hiddenSkrytá hodnota — neviditeľné polevalue

Okrem input existujú aj samostatné elementy:

ElementNa čo sa používaRozdiel od input
<textarea>Viacriadkový textMá párový tag, atribúty rows a cols
<select>Rozbaľovací zoznamVnú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>

🗂️ 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 triedaNa čo sa používa
form-controlŠtýluje input, textarea, select
form-labelŠtýluje label — správny spacing
mb-3Odsadenie medzi poliami
form-checkObalí checkbox alebo radio tlačidlo
form-check-inputSamotný checkbox alebo radio
form-check-labelLabel pre checkbox alebo radio
form-selectŠtýluje select — namiesto form-control
btn btn-primaryTlač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-triedaKedy platí
:focusKeď je pole aktívne — klikol si do neho
:validHodnota je správna — spĺňa všetky atribúty
:invalidHodnota je nesprávna alebo povinné pole je prázdne
/* 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.

Jednoduché — základný formulár
  1. Pridaj do stránky novú sekciu <section id="kontakt">
  2. Vytvor formulár s poliami: meno (text), email (email), správa (textarea)
  3. Každému poľu pridaj label so správnym for a id
  4. Povinným poliam pridaj atribút required
  5. Pridaj Bootstrap triedy — form-control, form-label, mb-3
Stredné — fieldset a viac typov polí
  1. Zoskup polia do dvoch fieldset skupín — pridaj legend každej
  2. Pridaj pole telefón (type="tel") s atribútom pattern="[0-9]{9,10}"
  3. Pridaj select s aspoň 3 možnosťami — použi form-select
  4. Pridaj checkbox pre súhlas s podmienkami — použi form-check
  5. Otestuj v prehliadači — skús odoslať prázdny formulár, čo sa stane?
Náročnejšie — CSS validácia
  1. Pridaj do style.css CSS 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);
    }
  2. Pridaj CSS pre :valid — zelené ohraničenie keď je hodnota správna
  3. Pridaj CSS pre :not(:focus):not(:placeholder-shown):invalid — červené ohraničenie
  4. Ku každému poľu pridaj <span class="invalid-hint"> s popisom chyby — napíš CSS aby sa zobrazil len pri neplatnej hodnote
  5. 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.html alebo nová stránka — musí obsahovať:
    • formulár s aspoň 5 rôznymi typmi vstupných polí
    • fieldset a legend — aspoň 2 skupiny
    • Bootstrap triedy pre všetky formulárové prvky
    • HTML5 validačné atribúty (required, pattern alebo minlength)
  • style.css — musí obsahovať:
    • CSS pre :focus, :valid, :invalid
    • CSS pre .invalid-hint — pomocný text pri chybe

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>

🌳 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
clickKliknutie na prvok
inputZmena hodnoty v input poli — každý stlačený kláves
changeZmena hodnoty v select alebo checkbox — po opustení poľa
submitOdoslanie 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';
        }
    });
});

🔍 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 
- Použi addEventListener — nie inline onclick=""
- Prvky hľadaj cez getElementById alebo querySelectorAll
- CSS pre JS stavy (napr. trieda .dark) daj do style.css nie do JS
- Nepoužívaj alert() ani prompt()
- Každý JS blok okomentuj — čo robí a prečo

Vypíš zvlášť obsah index.html a zvlášť obsah
assets/css/style.css a assets/js/script.js.

⌨️ Cvičenie na hodine

Na hodine pracujeme s ukážkovou stránkou z promptu — skúšame, meníme, sledujeme v DevTools čo sa deje. Každé cvičenie je jeden samostatný JS blok.

Jednoduché — prvý kontakt s JS
  1. Vytvor súbor assets/js/script.js — do index.html pridaj tento riadok tesne pred </body>:
    <script src="assets/js/script.js"></script>
    </body>
  2. Do script.js pridaj console.log('funguje!') — otvor DevTools → Console a skontroluj
  3. Pridaj tlačidlo ktoré zmení text nadpisu <h1> na stránke
  4. Pridaj dark mode toggle podľa ukážky z hodiny — otestuj v DevTools že trieda dark sa pridáva a odoberie na <body>
  5. Zmeň text tlačidla podľa aktuálneho režimu — 🌙 Tmavý režim / ☀️ Svetlý režim
Stredné — počítadlo a podmienený formulár
  1. Na ukážkovej stránke nájdi textarea — sleduj v DevTools ako sa mení textContent počítadla pri písaní
  2. Zmeň limit z 200 na 100 znakov — čo treba upraviť v HTML aj v JS?
  3. Nájdi radio tlačidlá — sleduj v DevTools style.display na skrytej sekcii pri prepínaní
  4. Zmeň radio tlačidlá na select — aká udalosť sa používa namiesto change na radio?
  5. Pridaj tretiu možnosť do podmienky — napr. "Možno" — skryje aj zobrazenú sekciu
Náročnejšie — živé vyhľadávanie
  1. Na ukážkovej stránke vyskúšaj vyhľadávanie — sleduj v DevTools style.display na položkách zoznamu
  2. Pridaj správu "Nič sa nenašlo" keď žiadna položka nezodpovedá hľadaniu
  3. Uprav vyhľadávanie aby hľadalo aj v podreťazci — napr. "čoko" nájde "Čokoládový koláč"
  4. Pridaj počítadlo nájdených výsledkov — napr. "Nájdené: 3 položky"
  5. Vymaž text z vyhľadávacieho poľa — zobrazia sa všetky položky späť?
Odovzdanie úlohy č. 5 (3 body):

Vezmi svoju stránku z T03 a doplň ju podľa toho čo sme robili na hodine. Nahraj do MS Teams tri súbory:

  • index.html — stránka z T03, musí obsahovať:
    • formulár z T05 ako novú sekciu — ak ho ešte nemáš, doplň ho
    • navigáciu doplnenú o odkaz na sekciu formulára
    • atribút action="#" na formulári — po odoslaní sa vráti na začiatok stránky
    • odkaz na assets/js/script.js pred </body>
  • assets/css/style.css — doplnený o CSS triedy pre JS stavy (napr. .dark)
  • assets/js/script.js — musí obsahovať aspoň 2 z týchto prvkov prispôsobených obsahu tvojej stránky:
    • dark mode toggle
    • počítadlo znakov v textarea tvojho formulára
    • podmienený formulár — rozbalenie sekcie podľa výberu
    • živé vyhľadávanie v zozname ktorý máš na stránke
    Všetky JS bloky musia mať komentáre a používať addEventListener — nie inline onclick="".

Deadline: Začiatok 7. týždňa

Týždeň 7 Pokročilé CSS a Bootstrap

📝 Témy:

  • Bootstrap komponenty — Modal, Carousel, Accordion, Toast
  • Bootstrap utility triedy — shadow, rounded, opacity, position, ratio, object-fit
  • CSS doladenie — transition, CSS premenné, @keyframes

🪟 1. Modal — vyskakovacie okno

Modal je okno ktoré sa zobrazí nad stránkou — detail položky, potvrdenie akcie, formulár. Bootstrap ho ovláda cez atribúty data-bs-toggle a data-bs-target — žiadny vlastný JavaScript.

<!-- Tlačidlo ktoré otvorí modal -->
<button type="button" class="btn btn-primary"
        data-bs-toggle="modal" data-bs-target="#mojModal">
    Otvoriť detail
</button>

<!-- Samotný modal — môže byť kdekoľvek v body -->
<div class="modal fade" id="mojModal" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">

            <div class="modal-header">
                <h5 class="modal-title">Názov modalu</h5>
                <button type="button" class="btn-close"
                        data-bs-dismiss="modal"></button>
            </div>

            <div class="modal-body">
                <p>Obsah modalu — text, obrázok, formulár...</p>
            </div>

            <div class="modal-footer">
                <button type="button" class="btn btn-secondary"
                        data-bs-dismiss="modal">Zatvoriť</button>
                <button type="button" class="btn btn-primary">Uložiť</button>
            </div>

        </div>
    </div>
</div>

🎠 2. Carousel — posúvač obrázkov

Carousel automaticky posúva obrázky — šípky, bodky aj automatické posúvanie sú súčasťou Bootstrap. Okamžite responzívny.

<div id="mojCarousel" class="carousel slide" data-bs-ride="carousel">

    <!-- Bodky — navigácia -->
    <div class="carousel-indicators">
        <button data-bs-target="#mojCarousel" data-bs-slide-to="0"
                class="active"></button>
        <button data-bs-target="#mojCarousel" data-bs-slide-to="1"></button>
        <button data-bs-target="#mojCarousel" data-bs-slide-to="2"></button>
    </div>

    <!-- Obrázky -->
    <div class="carousel-inner">
        <div class="carousel-item active">
            <img src="img/foto1.jpg" class="d-block w-100" alt="Popis 1">
            <div class="carousel-caption">
                <h5>Nadpis 1</h5>
                <p>Popis obrázka</p>
            </div>
        </div>
        <div class="carousel-item">
            <img src="img/foto2.jpg" class="d-block w-100" alt="Popis 2">
        </div>
        <div class="carousel-item">
            <img src="img/foto3.jpg" class="d-block w-100" alt="Popis 3">
        </div>
    </div>

    <!-- Šípky -->
    <button class="carousel-control-prev" data-bs-target="#mojCarousel"
            data-bs-slide="prev">
        <span class="carousel-control-prev-icon"></span>
    </button>
    <button class="carousel-control-next" data-bs-target="#mojCarousel"
            data-bs-slide="next">
        <span class="carousel-control-next-icon"></span>
    </button>

</div>

📂 3. Accordion — rozbaľovací obsah

Accordion skryje obsah a rozbalí ho po kliknutí — ideálny pre FAQ, dlhé popisy alebo skupiny nastavení. Jeden otvorený naraz.

<div class="accordion" id="mojAccordion">

    <!-- Položka 1 -->
    <div class="accordion-item">
        <h2 class="accordion-header">
            <button class="accordion-button" type="button"
                    data-bs-toggle="collapse"
                    data-bs-target="#polozka1">
                Otázka číslo 1
            </button>
        </h2>
        <div id="polozka1" class="accordion-collapse collapse show"
             data-bs-parent="#mojAccordion">
            <div class="accordion-body">
                Odpoveď na otázku číslo 1.
            </div>
        </div>
    </div>

    <!-- Položka 2 -->
    <div class="accordion-item">
        <h2 class="accordion-header">
            <button class="accordion-button collapsed" type="button"
                    data-bs-toggle="collapse"
                    data-bs-target="#polozka2">
                Otázka číslo 2
            </button>
        </h2>
        <div id="polozka2" class="accordion-collapse collapse"
             data-bs-parent="#mojAccordion">
            <div class="accordion-body">
                Odpoveď na otázku číslo 2.
            </div>
        </div>
    </div>

</div>

🍞 4. Toast — notifikácia

Toast je malá notifikácia ktorá sa zobrazí na chvíľu a zmizne — potvrdenie odoslania formulára, upozornenie, správa. Potrebuje jeden riadok JavaScriptu na zobrazenie.

<!-- Tlačidlo ktoré zobrazí toast -->
<button type="button" class="btn btn-success" id="zobrazToast">
    Odoslať formulár
</button>

<!-- Toast — zvyčajne v rohu obrazovky -->
<div class="position-fixed bottom-0 end-0 p-3">
    <div id="mojToast" class="toast align-items-center text-bg-success"
         role="alert">
        <div class="d-flex">
            <div class="toast-body">
                ✅ Formulár bol úspešne odoslaný!
            </div>
            <button type="button" class="btn-close btn-close-white me-2 m-auto"
                    data-bs-dismiss="toast"></button>
        </div>
    </div>
</div>
// JavaScript — jeden riadok na zobrazenie toastu
const toastEl  = document.getElementById('mojToast');
const toast    = new bootstrap.Toast(toastEl);
const tlacidlo = document.getElementById('zobrazToast');

tlacidlo.addEventListener('click', function() {
    toast.show();
});

🎨 5. Bootstrap utility triedy — rýchle vizuálne doladenie

Trieda Čo robí Príklad
shadow-sm / shadow / shadow-lgTieň pod prvkomclass="card shadow"
rounded / rounded-circle / rounded-pillZaoblené rohyclass="img rounded-circle"
opacity-25 / opacity-50 / opacity-75Priehľadnosť prvkuclass="img opacity-75"
ratio ratio-16x9Pevný pomer stránObal obrázka alebo videa
object-fit-coverObrázok vypĺňa kontajner bez deformácieclass="img object-fit-cover"
position-relativeRodič pre absolútne prvkyObal karty s odznačkom
position-absolute top-0 end-0Prvok v rohu rodičaOdznak "Novinka" na karte
overflow-hiddenSkryje obsah ktorý presahujeObrázok v zaoblenom kontajneri
<!-- Karta s odznakom v rohu — position-relative + position-absolute -->
<div class="card shadow position-relative" style="width: 18rem">
    <span class="badge bg-danger position-absolute top-0 end-0 m-2">
        Novinka
    </span>
    <div class="ratio ratio-16x9 overflow-hidden">
        <img src="img/foto.jpg" class="object-fit-cover w-100 h-100" alt="Foto">
    </div>
    <div class="card-body">
        <h5 class="card-title">Názov karty</h5>
        <p class="card-text">Popis karty.</p>
        <a href="#" class="btn btn-primary">Detail</a>
    </div>
</div>

✨ 6. CSS doladenie — transition, premenné, animácie

Bootstrap pokryje 90 % — vlastné CSS použijeme len na plynulé prechody, vlastné farby a jednoduché animácie.

/* Plynulý prechod pri hover — transition */
.card {
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.card:hover {
    transform: translateY(-5px);       /* posunie kartu o 5px nahor */
    box-shadow: 0 8px 25px rgba(0,0,0,0.15);
}

/* CSS premenné — prepíšeme Bootstrap farby */
:root {
    --bs-primary: #2e7d32;        /* zelená namiesto modrej */
    --bs-primary-rgb: 46, 125, 50;
}

/* Jednoduchá animácia — fadeIn pri načítaní */
@keyframes fadeIn {
    from { opacity: 0; transform: translateY(20px); }
    to   { opacity: 1; transform: translateY(0); }
}

.animovany {
    animation: fadeIn 0.6s ease forwards;
}

/* Oneskorenie pre každú kartu — efekt postupného objavenia */
.animovany:nth-child(1) { animation-delay: 0.1s; }
.animovany:nth-child(2) { animation-delay: 0.2s; }
.animovany:nth-child(3) { animation-delay: 0.3s; }

🤖 Prompt pre Claude AI — ukážková stránka

Tento prompt vygeneruje ukážkovú stránku so všetkými komponentmi 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
pokročilé Bootstrap komponenty a CSS efekty.

Stránka nech má tému "Cestovná agentúra" — vymysli obsah.

Musí obsahovať:
1. Carousel s 3 obrázkami (použi placeholder obrázky z picsum.photos)
   — s popismi (carousel-caption) a šípkami
2. Sekciu s 3 kartami — každá s obrázkom v pomere 16:9,
   odznakom "Novinka" v rohu (position-absolute),
   tieňom (shadow) a hover efektom (transition v CSS)
3. Modal otvorený tlačidlom na karte — detail zájazdu
4. Accordion s aspoň 3 položkami — FAQ sekcia
5. Toast notifikácia — zobrazí sa po kliknutí na tlačidlo
   "Rezervovať"

Požiadavky:
- Bootstrap 5 cez CDN vrátane Bootstrap JS
- Externý CSS súbor: assets/css/style.css
  — transition na kartách
  — CSS premenné pre vlastnú farebnú schému
  — fadeIn animácia cez @keyframes
- Externý JS súbor: assets/js/script.js
  — len pre Toast (bootstrap.Toast)
  — pridaj pred 
- Bootstrap utility triedy: shadow, rounded, ratio-16x9,
  object-fit-cover, position-relative, position-absolute,
  overflow-hidden

Vypíš zvlášť obsah index.html, assets/css/style.css
a assets/js/script.js.

⌨️ Cvičenie na hodine

Na hodine pracujeme s ukážkovou stránkou z promptu — skúšame, meníme, sledujeme v DevTools čo sa deje.

Jednoduché — komponenty
  1. Otvor ukážkovú stránku — vyskúšaj carousel, accordion, modal a toast
  2. Pridaj štvrtú položku do carouselu — novú bodku, obrázok aj šípky fungujú automaticky
  3. Pridaj novú položku do accordionu — skontroluj že sa otvára a zatvára správne
  4. Zmeň veľkosť modalu na modal-lg — čo sa zmenilo?
  5. Zmeň farbu toastu z text-bg-success na text-bg-danger
Stredné — utility a CSS
  1. Na karte pridaj shadow-lg a rounded-4 — sleduj rozdiel
  2. Pridaj odznak "Výpredaj" na druhú kartu — position-absolute top-0 start-0
  3. V style.css zmeň --bs-primary na inú farbu — čo sa zmenilo na stránke?
  4. Uprav transition na kartách — zmeň rýchlosť z 0.3s na 0.8s — sleduj hover efekt
  5. Pridaj triedu animovany na karty — sleduj postupné objavenie pri načítaní
Náročnejšie — vlastné úpravy
  1. Pridaj do modalu formulár s Bootstrap triedami — meno, email, tlačidlo odoslať
  2. Po kliknutí na "Odoslať" v modali — zatvor modal a zobraz toast s potvrdením
  3. Vytvor vlastnú @keyframes animáciu — napr. pulzovanie tlačidla
  4. Carousel — pridaj data-bs-interval="2000" — čo sa zmenilo?
  5. Skombinuj — karta s obrázkom ratio-16x9, odznakom, tieňom, hover efektom a tlačidlom ktoré otvorí modal
Odovzdanie úlohy č. 6 (3 body):

Vezmi svoju stránku z predchádzajúcich týždňov a vylepši jej dizajn. Nahraj do MS Teams tri súbory:

  • index.html — musí obsahovať aspoň 3 z týchto prvkov prispôsobených obsahu tvojej stránky:
    • Carousel s obrázkami z tvojej témy
    • Modal otvorený tlačidlom — detail, formulár alebo potvrdenie
    • Accordion — FAQ, popis alebo skupiny obsahu
    • Toast — notifikácia po akcii používateľa
    • Karty s ratio-16x9, odznakom a shadow
  • assets/css/style.css — musí obsahovať:
    • transition na hover efekte aspoň jedného prvku
    • CSS premenné — vlastná farebná schéma cez --bs-primary
    • @keyframes animácia aspoň na jednom prvku
  • assets/js/script.js — ak používaš Toast, musí obsahovať inicializáciu bootstrap.Toast

Deadline: Začiatok 8. týždňa

Týždeň 8 Git/GitHub + Návrh projektu

📝 Témy:

  • Čo je Git a GitHub — verziovanie a zálohovanie kódu
  • GitHub účet a GitHub Desktop — inštalácia a nastavenie
  • Commit a Push — uloženie a nahratie zmien
  • GitHub Pages — živá stránka zadarmo
  • Zadanie semestrálneho projektu

📦 1. Čo je Git a GitHub

Git je nástroj ktorý sleduje každú zmenu v tvojich súboroch — ako história zmien v dokumente, len oveľa mocnejšia. Kedykoľvek sa môžeš vrátiť k staršej verzii.

GitHub je webová služba kde uložíš svoj kód online — záloha, zdieľanie, spolupráca. A GitHub Pages z tvojho repozitára urobí živú webovú stránku — zadarmo.

PojemČo to je
Repozitár (repo)Priečinok projektu sledovaný Gitom
CommitUloženie zmien s popisom — "čo som zmenil"
PushNahranie zmien na GitHub
PullStiahnutie zmien z GitHubu do počítača
GitHub PagesBezplatný hosting statických HTML stránok

🚀 2. Postup — od nuly po živú stránku

Krok 1 — GitHub účet
  1. Choď na github.com — klikni Sign up
  2. Zadaj email, heslo a používateľské meno — zapamätaj si ich
  3. Over email — príde ti potvrdenie
Krok 2 — GitHub Desktop
  1. Stiahni GitHub Desktop — nainštaluj
  2. Prihlás sa svojím GitHub účtom
  3. Hotovo — žiadny terminál, všetko cez grafické rozhranie
Krok 3 — Nový repozitár
  1. V GitHub Desktop klikni File → New Repository
  2. Zadaj názov — napr. moj-projektbez medzier a diakritiky
  3. Vyber priečinok kde máš svoje HTML súbory
  4. Klikni Create Repository
Krok 4 — Commit a Push
  1. GitHub Desktop zobrazí všetky zmenené súbory
  2. Do poľa Summary napíš čo si zmenil — napr. "Pridaná hlavná stránka"
  3. Klikni Commit to main
  4. Klikni Push origin — súbory sa nahrajú na GitHub
Krok 5 — GitHub Pages — živá stránka
  1. Choď na github.com — otvor svoj repozitár
  2. Klikni Settings → ľavé menu Pages
  3. Pod Branch vyber main → klikni Save
  4. Počkaj 1–2 minúty — stránka bude živá na adrese:
https://menopouzivatela.github.io/nazov-repozitara/

🎓 Zadanie semestrálneho projektu

Téma projektu

Vyber si tému z oblasti ktorá ťa zaujíma — cestovný ruch, lokalita, kultúra, podujatie, služby. Stránka musí pôsobiť profesionálne ako keby si ju robil/a pre skutočného zákazníka.

Príklady tém:

  • Web o turistickej lokalite alebo regióne
  • Stránka cestovnej kancelárie alebo agentúry
  • Portfólio tlmočníckych alebo sprievodcovských služieb
  • Informačný web o kultúrnej pamiatke
  • Stránka ubytovania — penzión, hotel, chata

Do Teams odovzdaj do konca T08: Názov témy a 1–2 vety čo stránka bude prezentovať.

Povinná štruktúra súborov
projekt/
├── index.html          ← hlavná stránka
├── o-nas.html          ← o téme / autorovi
├── kontakt.html        ← kontaktná stránka
└── assets/
    ├── css/
    │   └── style.css   ← všetko vlastné CSS tu
    ├── js/
    │   └── script.js   ← všetok JavaScript tu
    └── img/            ← všetky obrázky tu
Povinný obsah každej stránky
📄 index.html — hlavná stránka
  • Hero sekcia — obrázok na pozadí, nadpis, podnadpis a tlačidlo s odkazom
  • O téme — aspoň 2 odseky textu, obrázok vedľa textu
  • Karty — aspoň 3 karty s obrázkom (ratio-16x9), nadpisom a textom (min. 3 vety každá)
  • Carousel alebo galéria — aspoň 4 obrázky
  • Call to action — sekcia s výzvou a tlačidlom odkazujúcim na kontakt
📄 o-nas.html — o téme
  • Nadpis a perex — o čom stránka je, prečo vznikla
  • Hlavný text — aspoň 3 odseky
  • Aspoň 1 obrázok s popisom (figcaption)
  • Accordion — zaujímavosti, FAQ alebo história — aspoň 4 položky s obsahom
📄 kontakt.html — kontaktná stránka
  • Kontaktný formulár — meno, email, telefón, správa, select alebo radio, checkbox súhlas
  • Fieldset a legend — aspoň 2 skupiny polí
  • CSS validácia:valid, :invalid, .invalid-hint
  • Kontaktné údaje vedľa formulára — adresa, email, telefón
  • Toast — notifikácia po kliknutí na odoslať
Technické požiadavky
HTML — povinné:
  • Správna štruktúra — <!DOCTYPE html>, <html lang="sk">, <head>, <body>
  • Meta tagy — charset, viewport, description
  • Sémantické tagy — <header>, <nav>, <main>, <section>, <footer>
  • Funkčné odkazy medzi všetkými stránkami vrátane navigácie
  • Všetky obrázky musia mať atribút alt
Bootstrap 5 — povinné:
  • Responzívna Navbar — hamburger menu na mobile, odkazy na všetky stránky
  • Grid systém — col-12 col-md-6 col-lg-4 pre karty
  • Karty s ratio-16x9, object-fit-cover, shadow
  • Aspoň 2 Bootstrap komponenty — Modal, Carousel, Accordion alebo Toast
  • Formulárové triedy — form-control, form-label, form-select, form-check
  • Footer s kontaktom, odkazmi a copyrightom
CSS — povinné:
  • Vlastná farebná schéma — --bs-primary a ďalšie CSS premenné
  • transition — hover efekt na kartách alebo tlačidlách
  • Aspoň jedna @keyframes animácia
  • CSS validácia formulára — :valid, :invalid, :focus
JavaScript — povinné:
  • Všetok kód v externom súbore assets/js/script.js
  • Len addEventListener — žiadny inline onclick=""
  • Aspoň 2 interaktívne prvky — dark mode, počítadlo, podmienený formulár, vyhľadávanie alebo Toast
  • Komentáre ku každému JS bloku
GitHub — povinné:
  • Projekt nahraný na GitHub — verejný repozitár
  • GitHub Pages aktívne — funkčná živá URL adresa
  • Aspoň 3 commity s popisom zmien
Harmonogram projektu
  • T09 — začiatok hodiny: Názov témy s krátkym popisom odovzdaný do Teams
  • T09 — začiatok hodiny: Vytvorený GitHub repozitár, nahratá základná štruktúra súborov
  • T10 — začiatok hodiny: Všetky tri stránky funkčné, Bootstrap komponenty zapracované
  • T11 — začiatok hodiny: CSS doladené, JS funkčný, GitHub Pages aktívne
  • T12–T13: Odovzdanie a obhajoba

📚 Materiály:

Týždeň 9 Práca na projekte + Test 2

Samostatná práca na semestrálnom projekte s individuálnymi konzultáciami.

Týždne 10–11 Práca na projekte

Pokračovanie práce na projekte. Doladenie dizajnu a funkcionalít.

Týždne 12–13 Finalizácia + Odovzdávanie + Obhajoby

Záverečné týždne sú venované dokončeniu projektov, ich odovzdaniu a obhajobám.

Odovzdanie projektu (20 bodov):
  • Funkčná webová stránka nahraná na GitHub
  • Zverejnená cez GitHub Pages
  • Kto je hotový – odovzdá v 12. týždni, kto nie – najneskôr do začiatku obhajoby

Deadline: Najneskôr do začiatku obhajoby v 13. týždni

Obhajoba + Live Coding (36 bodov):
  • 13 bodov: Vysvetlenie vlastného kódu
  • 13 bodov: Live Coding – operatívna zmena zadaná vyučujúcou (5–10 min)
  • 10 bodov: Správne používanie terminológie