Požádáte agenta, aby upravil stránku, a v jednoduchém projektu se objeví soubory s nesrozumitelnými názvy: index.html, style.css, script.js. Nebo už tam byly, ale v agentově zprávě stojí "změnil jsem styly" - a z té věty není jasné, na co přesně sahal.

Vysvětlíme si tři základní technologie, které dostává prohlížeč: HTML, CSS a JavaScript. Pro názornost si vezmeme jednoduchou statickou stránku bez sestavování (buildu). V reálném repozitáři se soubory mohou jmenovat a nacházet jinak, takže před úpravou je užitečné požádat agenta, aby ukázal strukturu projektu a našel soubory, které odpovídají za daný prvek. Ručně psát HTML a CSS vás článek neučí, na to máte agenta.

Stránka je text, který čte prohlížeč

Začneme jednoduchou statickou stránkou: její zdrojové kódy jsou běžné textové soubory. Dají se otevřít v Poznámkovém bloku a přečíst očima. Žádné další sestavování tu není potřeba: prohlížeč čte HTML, načítá související zdroje a podle nich vykreslí stránku na obrazovce.

Výchozím bodem takového projektu bývá soubor index.html. Prohlížeč ho otevře, rozebere značkování a podle odkazů si načte styly, skripty, obrázky a fonty.

Prohlížeč čte tři soubory jednoduchého statického projektu a zobrazuje hotovou stránkuindex.htmlstyle.cssscript.jsProhlížečHotová stránka
Takto může být uspořádán jednoduchý statický projekt: prohlížeč načte tři propojené soubory a zobrazí stránku

V projektu se sestavováním mohou zdrojové kódy ležet v komponentách a hotové HTML, CSS a JavaScript vytváří speciální nástroj. Role níže zůstávají užitečnou mapou, ale hledat tam právě tři soubory s takovými názvy nemá smysl.

Pro náš jednoduchý příklad si vezmeme tři soubory s různými rolemi:

  • HTML - co je na stránce: nadpis, odstavec, tlačítko, obrázek;
  • CSS - jak to vypadá: barvy, fonty, odsazení, zaoblení, plynulost;
  • JavaScript - co se stane: po kliknutí, po zadání textu, podle časovače.

Pojďme postupně.

HTML: z čeho se skládá značkování

HTML je značkování, ne kreslení. Nepopisujete, jak vypadá tlačítko. Říkáte "tady je tlačítko" - a prohlížeč ho nakreslí sám, jak umí.

Základní jednotkou značkování je tag. Skoro vždycky jsou dva: otevírací a zavírací, a mezi nimi obsah.

Řádek button Hrát rozebraný na tři části: otevírací tag, obsah a zavírací tag, a celek je označen jako HTML prvek<button>Hrát</button>HTML prvekotevírací tagzavírací tagobsah
V tomto příkladu tři části dohromady tvoří jeden prvek stránky

Každá část má své jméno a celek se nazývá prvek (element). To slovo se vám bude hodit: o stránce se častěji mluví jako o "prvcích" a myslí se tím tag i s tím, co je uvnitř.

Jména tagů jsou zkratky anglických slov: p od paragraph, a od anchor, img od image. Učit se je zpaměti nemusíte, ale domyslet si, k čemu slouží neznámý tag, to obvykle pomůže.

Zavírací tag se liší lomítkem. Existují i prvky bez zavíracího tagu. Například <img> nemůže obsahovat text nebo vnořené tagy a adresu obrázku dostává přes atribut src.

Tagy se do sebe vnořují jako krabice v krabicích a zavírají se v opačném pořadí - nejdřív vnitřní, pak vnější. Když pořadí porušíte, prohlížeč nespadne, pokusí se to uhodnout. Obvykle se netrefí.

Druhý pojem je atribut. Je to upřesnění, které žije uvnitř otevíracího tagu a něco o něm říká: kam vede odkaz, odkud vzít obrázek, jak tento prvek pojmenovat.

<a href="https://example.com">Otevřít web</a>
<img src="cover.png" alt="Obal">
<button id="play" class="btn">Hrát</button>

Atribut class z posledního řádku se bude hodit za dvě minuty: podle něj se na tlačítko použijí styly. Atribut id="play" mu dává jedinečné jméno, podle kterého ho skript najde.

Teď celá stránka. Je kratší, než byste čekali:

<!doctype html>
<html>
<head>
  <title>Moje stránka</title>
</head>
<body>
  <h1>První stránka</h1>
  <p>Běžný odstavec textu.</p>
  <button id="play" class="btn">Hrát</button>
</body>
</html>

Dvě části: <head> - pomocná, patří do ní název karty a odkazy na styly; <body> - všechno, co čtenář vidí na obrazovce. První řádek jen říká prohlížeči, že jde o moderní HTML.

Vnoření na stránce: uvnitř html leží head s názvem karty a body se vším, co je vidět na obrazovce<html></html><head></head><body></body><title>Moje stránka</title><h1>, <p>, <button>, <img>
Krabice v krabici: head a body leží uvnitř html, zbytek uvnitř nich

Diagram ukazuje hlavní vlastnost značkování: na stránce všechno leží uvnitř něčeho. <body> uvnitř <html>, tlačítko uvnitř <body>, text uvnitř tlačítka. Odtud i schodovité odsazení v souboru: není pro krásu, ukazuje, co je v čem vnořené.

Praktický závěr je jednoduchý. Název karty prohlížeče a připojení stylů žijí v <head> a na obrazovce je vůbec nevidíte. Všechno ostatní je v <body>. Když agent ve zprávě napíše "přidal jsem blok do body", jde přesně o druhou krabici: nový obsah se objevil na stránce, ne v pomocné části.

Tagů má jazyk přes sto, ale na reálné stránce se skoro vždycky točí pořád tytéž:

TagCo dělá
<h1> ... <h6>nadpisy, od hlavního k nejmenšímu
<p>odstavec textu
<a>odkaz, adresa v atributu href
<img>obrázek, cesta k souboru v atributu src
<button>tlačítko
<ul> a <li>seznam a položka seznamu
<div>blokový kontejner, krabice pro další prvky
<span>kousek textu uvnitř řádku, aby se dal zvýraznit zvlášť

Poslední dva samy o sobě nic neznamenají a nic nekreslí. Jsou to prázdné krabice, za které se stylům a skriptům dobře chytá - a právě proto jich je na každé stránce nejvíc.

CSS: jak stránka dostane vzhled

Holé značkování vypadá chudě: černý text na bílém, šedé systémové tlačítko, všechno natlačené k levému okraji. Většinu rozdílu mezi tímhle a upravenou stránkou dělá CSS.

CSS se skládá z pravidel. Pravidlo odpovídá na dvě otázky: na co ho použít a co změnit.

.btn {
  background: #6c5ce7;    /* barva pozadí */
  color: #ffffff;         /* barva textu */
  padding: 12px 24px;     /* vnitřní odsazení */
  border-radius: 12px;    /* zaoblení rohů */
}

První řádek je selektor: říká, na které prvky se pravidlo vztahuje. Dál ve složených závorkách následují dvojice "vlastnost: hodnota", každá končí středníkem.

Tečka před btn znamená třídu. Pamatujete si atribut class="btn" na tlačítku? Tady se uplatnil: ve značkování na prvek připnete štítek a ve stylech se na něj odkazujete. Jeden štítek můžete připnout na deset tlačítek - a jedno pravidlo z nich udělá deset stejných.

Vlastností má CSS stovky, ale abyste četli cizí soubor a rozuměli, co se tam děje, stačí několik:

  • color - barva textu, background - barva nebo obrázek pozadí;
  • font-size a font-family - velikost a řez písma;
  • padding - odsazení uvnitř prvku, margin - vně, mezi sousedy;
  • border-radius - zaoblení rohů, mimochodem polovina dojmu "draze to vypadá";
  • transition - plynulost: ne skokem, ale za 0,2 sekundy.

Nejčastěji pravidla leží v samostatném souboru a stránka se o něm dozvídá z jednoho řádku v pomocné části:

<head>
  <link rel="stylesheet" href="style.css">
</head>

Odstraňte ten řádek - soubor se styly se nenačte. Text a prvky ve značkování zůstanou, ale obvyklé rozložení a vzhled mohou zmizet a používat stránku bude někdy těžší.

Stejné značkování dvakrát: vlevo bez stylů, text a šedé obdélníkové tlačítko, vpravo stejné prvky s odsazením, barvou a zaoblenými rohyJenom HTMLHTML plus CSS
Prvky jsou úplně stejné a ve stejném pořadí. Změnily se jen barva, odsazení a tvar

Na diagramu vlevo i vpravo je stejná stránka: nadpis, dva řádky textu, tlačítko. Žádný prvek nepřibyl ani nezmizel - v tomto příkladu se upravoval jen soubor se styly.

Berte to jako mapu pro hledání, ne jako technickou zeď. Kvůli novému rozložení agent někdy musí změnit třídy nebo kontejnery v HTML a nepovedené pravidlo CSS může tlačítko překrýt a kliknutí znemožnit. Proto se po vizuální úpravě prochází diff, otevírá stránka a kontrolují dotčené akce.

JavaScript: co se stane při akci

HTML a CSS už umí zobrazit stránku a přidat jí plynulé přechody nebo animaci. Ale tlačítko z našeho příkladu zatím nemá vlastní akci: kliknete - a skóre se nezmění.

Libovolnou logiku na stránce obvykle přidává JavaScript. Tlačítko už dostalo v HTML jedinečné jméno id="play". Teď je postup jednoduchý: najít prvek, počkat na událost, něco změnit.

// najdeme tlačítko podle jeho id
const button = document.getElementById("play");
let score = 0;

// přihlásíme se k události: co se má stát po kliknutí
button.addEventListener("click", function () {
  score = score + 1;
  button.textContent = "Body: " + score;
});

První klik změní text na "Body: 1", druhý na "Body: 2". Pokud se nic neděje, nejdřív zkontrolujte, že v HTML je id="play" a ve skriptu je totéž jméno play.

Tady jsou tři detaily. const a let zakládají proměnnou - pojmenovanou krabici s hodnotou. addEventListener přihlašuje stránku k odběru události: klik, zadání textu, najetí myší. A ve složených závorkách je funkce - kus kódu, který se provede, když událost nastane.

Všimněte si posledního řádku: skript mění text tlačítka. To je důležitý moment - JavaScript může měnit značkování i styly přímo během běhu stránky. Může přidat odstavec, schovat blok, přebarvit tlačítko. Takže hranice mezi vrstvami je spíš rozdělení práce, ne zeď.

V praxi začněte hledat v JavaScriptu, pokud prvek reaguje na data, zpracovává klik nebo něco počítá. Plynulé objevení, změnu barvy a jednoduchý pohyb často obstará CSS. Je to výchozí bod, ne konečná diagnóza: po úpravě si stránku otevřete a sami si zkontrolujte vzhled a chování - jeden screenshot nestačí.

Jedno tlačítko ve třech souborech

Dáme všechno dohromady na jednom prvku. Tlačítko "Hrát" žije rovnou ve třech souborech a každý odpovídá za své.

<button id="play" class="btn">Hrát</button>
.btn {
  background: #6c5ce7;
  border-radius: 12px;
}
const playButton = document.getElementById("play");

playButton.addEventListener("click", function () {
  playButton.textContent = "Hra spuštěna";
});

Pokud jsou soubory připojeny, klik změní nápis "Hrát" na "Hra spuštěna". Teď se dá příklad vyzkoušet, aniž byste si museli domýšlet chybějící funkci.

A teď to nejužitečnější - co se stane, když odeberete vždy jednu část:

  • odstraníte HTML - zmizí všechno: není co stylovat ani oživovat;
  • odstraníte CSS - tlačítko zůstane a funguje, jen vypadá jako šedé systémové tlačítko z devadesátek;
  • odstraníte JS - tlačítko je hezké, ale mrtvé. Dá se zmáčknout, a nic se nestane.

Odtud jednoduchá mapa pro zadávání úkolů. Pokud se vám nelíbí, jak to vypadá, začněte hledat ve stylech. Pokud se vám nelíbí, co se děje, - ve skriptu. Pokud prvek vůbec chybí, začněte značkováním. Právě jen začněte: skutečná úprava může zasáhnout i sousední vrstvu, proto se výsledek agenta ověřuje v diffu a v prohlížeči.

Co leží ve složce projektu

Nejčastější sada pro jednoduchou stránku vypadá takto:

index.html    značkování, vstupní bod
style.css     styly
script.js     chování

Propojují je dva řádky ve značkování. Styly se připojují v pomocné části, skript - úplně na konci, před uzavřením </body>, aby v okamžiku jeho spuštění už všechny prvky existovaly:

<head>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <!-- značkování stránky -->
  <script src="script.js"></script>
</body>

Bývá to i jinak. Ve velkém projektu jsou souborů desítky, rozložené do složek jako css/ a js/, a vedle leží obrázky a fonty. Bývá i naopak, že je soubor jen jeden - o tom hned níže. Role značkování, stylů a logiky přesto zůstávají, ale názvy souborů a způsob jejich připojení se mohou lišit.

Když styly a skripty leží uvnitř stránky

Tři soubory jsou nejčastější varianta, ale ne jediná. Totéž CSS se dá umístit na tři různá místa a na všechna tři dřív nebo později narazíte.

První už jste viděli: samostatný soubor plus řádek <link>. Druhé - blok <style> přímo ve značkování, bez samostatného souboru:

<head>
  <style>
    .btn {
      background: #6c5ce7;
      border-radius: 12px;
    }
  </style>
</head>

Uvnitř je všechno stejné: selektor, složené závorky, dvojice "vlastnost: hodnota". Změnila se jen adresa. Takhle se to píše, když je stránka jen jedna a zakládat pro ni samostatný soubor nemá smysl.

Třetí místo - vložené styly, neboli inline styles. Vlastnosti visí přímo na prvku, v atributu style:

<button class="btn" style="background: #e17055; font-size: 20px">Hrát</button>

Selektor tu není potřeba: i tak je jasné, k čemu pravidlo patří - k prvku, na kterém je napsané. Proto žádné složené závorky ani tečka před třídou, jen dvojice "vlastnost: hodnota" oddělené středníkem, všechno na jednom řádku.

Pohodlné je to přesně jednou. Pak začínají nevýhody. Pravidlo se vztahuje na jediný prvek: deset tlačítek - deset kopií a měnit pak musíte všech deset. Běžný vložený styl má obvykle přednost před běžným pravidlem ze souboru. Obarvíte tlačítko přes style, pak upravujete tutéž vlastnost ve style.css a nechápete, proč se barva nemění. Proto se atribut style kontroluje mezi prvními; podrobná pravidla priority zatím nepotřebujete.

Se skriptem je to stejné, jen místa jsou dvě. Samostatný soubor se připojuje přes <script src="...">, ale kód můžete napsat i přímo mezi tagy:

<script>
  document.getElementById("play").addEventListener("click", function () {
    alert("Hra spuštěna");
  });
</script>

Shrňme to do jedné tabulky, ať máte kam nahlédnout:

CoKde ležíJak vypadá v HTML
stylysamostatný soubor<link rel="stylesheet" href="style.css">
stylyblok na stránce<style> ... </style>
stylypřímo na prvkustyle="color: red"
skriptsamostatný soubor<script src="script.js"></script>
skriptblok na stránce<script> ... </script>

Krajní případ - když je pohromadě úplně všechno: značkování, blok <style> i blok <script> žijí v jednom index.html. Nic strašného na tom není, pro malou stránku je to dokonce jednodušší: jeden soubor, otevřete ho v prohlížeči a funguje, nic se cestou neztratí. Nepohodlí přichází později, když stránka naroste a v tom dlouhém souboru je potřeba něco najít. Pak se obsah obvykle rozdělí do souborů a vznikne právě ta trojice.

Než agenta požádáte, aby "změnil styly", zjistěte, kde leží. Pokud má projekt jen jeden index.html, soubor style.css tam vůbec nemusí být a úprava skončí uvnitř značkování. Pokud se prvek nemění, požádejte ho o kontrolu tří věcí: je připojený správný soubor se styly, sedí selektor a není tam vložený style nebo silnější pravidlo. Tak se hledání zúží bez hádání, kdo je viník.

Jak to funguje ve spojení s Claude Code

Teď je jasné, co se děje, když se agent pustí do stránky:

  • v jednoduchém statickém projektu může agent HTML, CSS a JavaScript sám napsat a propojit. V jiném projektu ho nejdřív požádejte, aby ukázal strukturu a vyjmenoval soubory, které odpovídají za daný prvek;
  • co přesně uvidíte před zápisem, záleží na nastavení a režimu práce. Pokud agent ukáže návrh předem, projděte si ho; po zápisu si v každém případě prostudujte diff a výsledné soubory. Jméno style.css naznačuje roli souboru, ale ještě nic nezaručuje;
  • vizuální úpravu kontrolujte očima a kliknutím na dotčené prvky, úpravu chování - skutečnými akcemi. Screenshot neukáže, že počítadlo přestalo počítat;
  • pokud se něco rozbilo, popište pozorovaný příznak, ne odhadnutou vrstvu: "po úpravě je tlačítko vidět, ale klik nic nedělá". Pak agent zkontroluje vazby mezi HTML, CSS a JavaScriptem.