Element <track> to kluczowy znacznik HTML5, który umożliwia dołączanie tekstowych ścieżek do elementów multimedialnych takich jak <audio> i <video>. Pozwala na implementację napisów (subtitles), podpisów dla niesłyszących (captions), opisów audio (descriptions), rozdziałów (chapters) oraz metadanych (metadata), co znacząco poprawia dostępność i doświadczenie użytkownika.
W świecie, w którym treści wideo i audio dominują w internecie, <track> staje się nieodzownym narzędziem dla frontendowców – bez wtyczek, prosto w HTML. Ten przewodnik przeprowadzi Cię przez składnię, atrybuty, przykłady kodu oraz praktyczne wskazówki i kompatybilność przeglądarek.
Czym dokładnie jest element <track> i do czego służy?
<track> to element pusty (samozamykający), który musi być umieszczony jako dziecko elementów <audio> lub <video>, zawsze przed ich ogólną treścią (fallbackiem). Wskazuje zewnętrzne pliki w formacie WebVTT (rozszerzenie .vtt), które są precyzyjnie synchronizowane z odtwarzaniem.
Główne zastosowania:
- Napisy (subtitles) – tłumaczenia dialogów dla użytkowników nieznających języka oryginalnego;
- Podpisy (captions) – pełny opis dialogów, efektów dźwiękowych i muzyki – idealne dla osób niesłyszących;
- Opisy (descriptions) – tekstowe opisy wizualnych elementów, odczytywane przez syntezatory mowy;
- Rozdziały (chapters) – punkty nawigacyjne, podobne do menu DVD;
- Metadane (metadata) – dane dla skryptów JavaScript, niewidoczne dla użytkownika.
Element jest częścią specyfikacji HTML5 i w DOM reprezentowany przez interfejs HTMLTrackElement.
Atrybuty elementu <track>
Element <track> ma jeden atrybut obowiązkowy oraz kilka opcjonalnych, a także wspiera globalne atrybuty HTML (np. id, class, title):
Atrybuty obowiązkowe
Poniżej znajdziesz atrybut, bez którego <track> nie zadziała:
| Atrybut | Wartość | Opis |
|---|---|---|
src |
URL | Obowiązkowy – ścieżka do pliku .vtt. Jeśli kind="subtitles", wymagany jest też srclang. |
Atrybuty opcjonalne
Te atrybuty rozszerzają funkcjonalność i kontrolę nad ścieżkami tekstowymi:
| Atrybut | Wartość | Opis |
|---|---|---|
default |
default |
Ustawia ścieżkę jako domyślną, jeśli preferencje użytkownika nie wskazują innej. |
kind |
captions, chapters, descriptions, metadata, subtitles |
Określa typ ścieżki (domyślnie subtitles). |
label |
tekst | Etykieta widoczna w menu przeglądarki (np. „Polski”). |
srclang |
kod języka (np. pl, en) |
Język ścieżki (wymagany dla kind="subtitles"). |
Praktyczne przykłady użycia <track>
Zacznijmy od prostego przykładu pliku .vtt – jego zawartość powinna wyglądać następująco:
WEBVTT
00:00:01.000 --> 00:00:04.000
Witaj w tutorialu HTML5!
00:00:05.000 --> 00:00:08.000
Dziś omawiamy element track.
Przykład 1 – podstawowe napisy do wideo
Tak włączysz napisy w dwóch językach bezpośrednio w HTML:
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Przykład track</title>
</head>
<body>
<video width="640" height="360" controls>
<source src="film.mp4" type="video/mp4">
<track kind="subtitles" src="napisy.pl.vtt" srclang="pl" label="Polski" default>
<track kind="subtitles" src="napisy.en.vtt" srclang="en" label="English">
Twoja przeglądarka nie obsługuje wideo.
</video>
</body>
</html>
Pierwsza ścieżka jest domyślna dzięki atrybutowi default, a przeglądarka wyświetli w menu wybór „Polski” i „English”.
Przykład 2 – wiele ścieżek: napisy, podpisy i rozdziały
Możesz dodać różne rodzaje ścieżek (w tym rozdziały i opisy audio):
<video controls>
<source src="podcast.mp4" type="video/mp4">
<!-- Napisy -->
<track kind="subtitles" src="subs.pl.vtt" srclang="pl" label="Napisy PL" default>
<!-- Podpisy dla niesłyszących -->
<track kind="captions" src="captions.en.vtt" srclang="en" label="Captions EN">
<!-- Rozdziały -->
<track kind="chapters" src="chapters.vtt" srclang="pl" label="Rozdziały">
<!-- Opisy audio -->
<track kind="descriptions" src="descriptions.pl.vtt" srclang="pl" label="Opisy audio">
</video>
Dla audio działa to podobnie – oto przykład użycia rozdziałów:
<audio controls>
<source src="muzyka.ogg" type="audio/ogg">
<track kind="chapters" src="rozdziely.vtt" srclang="pl" default>
</audio>
Przykład 3 – integracja z JavaScript
Możesz dynamicznie tworzyć i sterować ścieżkami przez DOM:
const video = document.querySelector('video');
const track = video.addTextTrack('subtitles', 'Dynamiczne napisy', 'pl');
track.mode = 'showing'; // włącza ścieżkę
// Dodaj cues ręcznie
const cue = new VTTCue(0, 5, 'Witaj z JS!');
track.addCue(cue);
Taka integracja pozwala budować zaawansowane funkcje – np. generować napisy z API w locie lub personalizować treści.
Obsługa przeglądarkowa – rzeczywistość vs. ideał
Nowoczesne przeglądarki szeroko obsługują <track> i format WebVTT. Poniższa tabela podsumowuje ogólny stan wsparcia:
| Przeglądarka | Wsparcie <track> |
Uwagi |
|---|---|---|
| Chrome | Tak | Pełna obsługa napisów i większości typów ścieżek. |
| Firefox | Tak | Dobre wsparcie WebVTT i menu wyboru ścieżek. |
| Safari | Tak | Obsługa <track>; testuj szczegóły renderingu. |
| Edge | Tak | Dziedziczy wsparcie z Chromium. |
| Opera | Tak | Podobnie jak Chrome (silnik Blink). |
| Internet Explorer | Nie | Przestarzała przeglądarka; wymagane obejścia/polyfill. |
Jeśli celujesz w starsze środowiska lub niestandardowe strumienie, rozważ biblioteki/polyfille (np. video.js, @videojs/http-streaming) i zawsze testuj w wielu przeglądarkach.
Tworzenie plików WebVTT – krok po kroku
Struktura pliku .vtt jest prosta i czytelna:
- Nagłówek:
WEBVTT - Czas:
HH:MM:SS.mmm --> HH:MM:SS.mmm - Treść: tekst napisu.
Przykład pełnego pliku rozdziely.vtt (z notatką i dwoma rozdziałami):
WEBVTT
NOTE Rozdziały podcastu
00:00:00.000 --> 00:01:00.000
Wstęp
00:01:00.000 --> 00:05:00.000
Główna treść
Do wygodnej edycji możesz użyć narzędzi typu Aegisub lub edytora kodu z podświetlaniem składni.
Najlepsze praktyki i pułapki
Stosuj poniższe wskazówki, aby zapewnić świetne UX i dostępność:
- Wielojęzyczność – zawsze podawaj
srclangi czytelnylabeldla menu wyboru; - Dostępność – używaj
defaultdla głównego języka i testuj z czytnikami ekranu (NVDA, VoiceOver); - Fallback – dodaj treść tekstową wewnątrz
<video>/<audio>dla starszych przeglądarek; - Wydajność i CORS – hostuj pliki
.vttna tym samym serwerze lub poprawnie skonfiguruj nagłówki; - Polyfille – gdy wspierasz stare przeglądarki, rozważ
video.jslubwebvtt.js; - SEO – napisy wspierają indeksowanie treści wideo przez wyszukiwarki.
Błędy do uniknięcia:
- brak
src– element nie działa, - nieprawidłowy format czasu w VTT – napisy nie synchronizują się,
- umieszczenie
<track>poza<video>/<audio>– zostanie zignorowane.