a, img, picture, figure, figcaption, video, audio, iframe — hyperlinkový element, obrázky, responzivní média a vložené dokumenty.
Nejdůležitější tag webu. Odkaz na URL, email, telefon, kotvu v dokumentu nebo soubor ke stažení.
a (anchor) je hyperlinkový element. Může odkazovat na URL, email (mailto:), telefon (tel:), soubor ke stažení (download), nebo kotvu v dokumentu (#id). Nikdy nepoužívejte a bez href jako klikatelný element — pro akce bez navigace slouží <button>.
| href | URL cíl — URL, mailto:, tel:, #id, relativní, absolutní | URL / #id |
| target | _blank = nová záložka, _self = stejná (výchozí) | _blank / _self |
| rel | noopener noreferrer pro _blank. nofollow pro SEO. | string |
| download | Stáhnout soubor, hodnota = název souboru | filename |
| aria-label | Přístupný popis pro screen readery | string |
| hreflang | Jazyk cílové stránky | cs / en |
<a> pro navigaci, <button> pro akce<!-- Základní odkaz --> <a href="https://google.com">Google</a> <!-- Nová záložka — BEZPEČNĚ --> <a href="https://google.com" target="_blank" rel="noopener noreferrer"> Otevřít v nové záložce </a> <!-- Email --> <a href="mailto:info@web.cz"> info@web.cz </a> <!-- Telefon (klik na mobilu zavolá) --> <a href="tel:+420123456789"> +420 123 456 789 </a> <!-- Kotva v dokumentu --> <a href="#kontakt">Přejít na kontakt</a> <section id="kontakt">...</section> <!-- Stažení souboru --> <a href="cenik.pdf" download="cenik-2024.pdf"> Stáhnout ceník (PDF) </a> <!-- Odkaz s ikonou — přístupně --> <a href="/produkt" aria-label="Detail produktu Victorinox"> <img src="icon.png" alt=""> Victorinox Classic </a>
Void element. alt je povinný. width+height zabrání layout shift. loading="lazy" pro výkon.
img vloží rastrový obrázek. alt je povinný atribut — pro přístupnost a pro případ nenahrání. Void element — nemá zavírací tag. loading="lazy" výrazně zlepšuje výkon stránky.
Nese informaci → popisný alt text:
alt="Jana Nováková při prezentaci"
Jen vizuální → prázdný alt:
alt=""
alt="image" — obecné
alt="logo.png" — název souboru
Chybějící alt atribut
Alt = název firmy:
alt="MůjWeb — domů"
| src | URL obrázku. Povinné. | URL / cesta |
| alt | Alt text. Povinné! Prázdné ("") pro dekorativní. | string / "" |
| width | Šířka v px — zabrání CLS (layout shift) | číslo |
| height | Výška v px — zabrání CLS | číslo |
| loading | lazy = načti při scrollu, eager = okamžitě (LCP) | lazy / eager |
| srcset | Různá rozlišení pro různé obrazovky | URL + deskriptor |
| sizes | Pro srcset: jaká velikost na jaký viewport | media + size |
| decoding | async = neblokuje render při dekódování | async / sync |
<!-- Základní -->
<img
src="foto.jpg"
alt="Jana Nováková při prezentaci"
width="800"
height="600"
>
<!-- Výkonná verze -->
<img
src="hero.jpg"
alt="Victorinox Classic kapesní nůž"
width="800"
height="600"
loading="eager"
decoding="async"
srcset="
hero-400.jpg 400w,
hero-800.jpg 800w,
hero-1200.jpg 1200w
"
sizes="
(max-width: 600px) 400px,
(max-width: 900px) 800px,
1200px
"
>
<!-- Lazy load -->
<img
src="produkt.jpg"
alt="Gerber Paraframe"
width="400" height="300"
loading="lazy"
>
<!-- Dekorativní — prázdný alt -->
<img src="dekorace.svg" alt="">
<!-- CSS: responzivní obrázky -->
<style>
img { max-width: 100%; height: auto; }
</style>
Různé obrázky pro různé podmínky: formát (WebP/AVIF), breakpoint, DPR. Art direction.
picture umožňuje "art direction" — různé obrázky pro různé situace. Prohlížeč vybere první vyhovující <source>. Fallback je <img> uvnitř. Skvělé pro WebP s JPG fallbackem pro starší prohlížeče.
<!-- WebP + JPG fallback -->
<picture>
<source type="image/avif"
srcset="hero.avif">
<source type="image/webp"
srcset="hero.webp">
<img
src="hero.jpg"
alt="Hero obrázek"
width="1200" height="600"
loading="eager"
>
</picture>
<!-- Art direction: jiný ořez -->
<picture>
<!-- Mobil: na výšku, jiný ořez -->
<source
media="(max-width: 600px)"
srcset="hero-mobile.jpg"
>
<!-- Tablet -->
<source
media="(max-width: 1200px)"
srcset="hero-tablet.jpg"
>
<!-- Desktop fallback -->
<img
src="hero-desktop.jpg"
alt="Naše prodejna"
width="1200" height="400"
>
</picture>
figure obalí samostatný obsah (obrázek, kód, graf). figcaption je jeho viditelný popis.
figure obaluje samostatný obsah — obrázek, video, kód, citát, diagram — ke kterému se vztahuje popisek. figcaption je viditelný popis. figure lze přesunout na jiné místo dokumentu bez ztráty smyslu.
<!-- Obrázek s popiskem -->
<figure>
<img
src="nuz.jpg"
alt="Victorinox Classic"
width="400" height="300"
>
<figcaption>
Victorinox Classic — kapesní nůž
s 9 funkcemi, váha 21 g.
</figcaption>
</figure>
<!-- Kódový blok s popiskem -->
<figure>
<figcaption>
Příklad: Hello World v Pythonu
</figcaption>
<pre><code>
print("Hello, World!")
</code></pre>
</figure>
<!-- CSS -->
<style>
figure {
margin: 1.5rem 0;
}
figcaption {
font-size: 0.875rem;
color: #666;
margin-top: 0.5rem;
font-style: italic;
}
</style>
Nativní HTML video přehrávač. Více formátů pro kompatibilitu. Poster pro náhled. Track pro titulky.
Nativní video bez Flash nebo JS pluginů. controls zobrazí ovládací prvky. autoplay funguje jen s muted — prohlížeče blokují autoplay se zvukem. track uvnitř pro titulky (přístupnost).
| controls | Zobrazí přehrávač s tlačítky | boolean |
| autoplay | Automaticky přehrát (jen s muted!) | boolean |
| muted | Bez zvuku (nutné pro autoplay) | boolean |
| loop | Opakovat stále dokola | boolean |
| poster | Náhledový obrázek před přehráváním | URL |
| preload | Co přednahrát: none / metadata / auto | metadata |
| playsinline | iOS: přehrát inline, ne fullscreen | boolean |
| width/height | Rozměry přehrávače | číslo |
<!-- Standardní video s titulky -->
<video
controls
poster="nahled.jpg"
preload="metadata"
width="800" height="450"
>
<source src="video.mp4"
type="video/mp4">
<source src="video.webm"
type="video/webm">
<track
src="titulky.vtt"
kind="subtitles"
srclang="cs"
label="Čeština"
>
<p>Váš prohlížeč nepodporuje video.
<a href="video.mp4">Stáhnout</a>
</p>
</video>
<!-- Background video -->
<video
autoplay muted loop playsinline
>
<source src="bg.mp4" type="video/mp4">
</video>
<!-- Responzivní video CSS -->
<style>
.video-wrap {
position: relative;
padding-top: 56.25%; /* 16:9 */
}
.video-wrap video {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
}
</style>
Nativní HTML audio přehrávač. Podobný video, ale bez poster a rozměrů. Podcast, hudba.
audio vloží audio přehrávač. Bez controls není viditelný (skrytý přehrávač ovládaný JS). Multiple source elementy uvnitř pro různé formáty — prohlížeč vybere první podporovaný.
| controls | Zobrazí přehrávač | boolean |
| autoplay | Automaticky přehrát (blokováno!) | boolean |
| loop | Opakovat | boolean |
| muted | Ztlumit | boolean |
| preload | none / metadata / auto | metadata |
<!-- Základní audio -->
<audio controls preload="metadata">
<source src="podcast.mp3"
type="audio/mpeg">
<source src="podcast.ogg"
type="audio/ogg">
Váš prohlížeč nepodporuje audio.
</audio>
<!-- Skrytý audio řízený JS -->
<audio id="bgMusic" loop>
<source src="hudba.mp3"
type="audio/mpeg">
</audio>
<button onclick="
document.getElementById('bgMusic')
.play()
">
Spustit hudbu
</button>
<!-- Stylování -->
<style>
audio {
width: 100%;
border-radius: 4px;
}
</style>
Vloží jiný webový dokument do stránky. YouTube, Google Mapy, platební brány. title je povinný!
iframe vloží jiný dokument — YouTube video, Google Mapy, platební bránu, reCAPTCHA. Atribut sandbox omezuje co může iframe dělat (JS, formuláře, stejný origin). title je povinný pro přístupnost — screen reader přečte co iframe obsahuje.
| src | URL vkládaného dokumentu | URL |
| title | Popis pro screen readery. POVINNÉ! | string |
| width/height | Rozměry | číslo / 100% |
| loading | lazy = načíst při scrollu do viewportu | lazy / eager |
| sandbox | Omezení: allow-scripts, allow-forms... | string |
| allowfullscreen | Povolí fullscreen (YouTube) | boolean |
| referrerpolicy | Omezení odesílání referrer | no-referrer |
<!-- YouTube -->
<iframe
src="https://www.youtube.com/embed/VIDEO_ID"
title="Název videa"
width="560" height="315"
frameborder="0"
allow="accelerometer; autoplay;
encrypted-media; gyroscope"
allowfullscreen
loading="lazy"
></iframe>
<!-- Google Maps -->
<iframe
src="https://www.google.com/maps/embed?pb=..."
title="Mapa pobočky Praha 1"
width="600" height="450"
loading="lazy"
style="border: 0"
></iframe>
<!-- Responzivní iframe (16:9) -->
<div class="iframe-wrap">
<iframe src="..." title="...">
</iframe>
</div>
<style>
.iframe-wrap {
position: relative;
aspect-ratio: 16 / 9;
}
.iframe-wrap iframe {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
border: 0;
}
</style>