Cześć! Jeśli zaczynasz przygodę z HTML, szybko docenisz prostotę i elastyczność tagu <div>. To generyczny kontener blokowy do grupowania elementów i budowania layoutu, świetny do stylizacji w CSS i kontroli zachowania przez JavaScript.
Czym dokładnie jest tag <div>?
Tag <div> (od „division”) to element blokowy, który zajmuje całą szerokość rodzica i zaczyna się w nowej linii. Wymaga znacznika otwierającego i zamykającego: <div>...</div>. Nie ma własnej semantyki – to „pusty” pojemnik na treść.
Dla porównania: <span> jest elementem liniowym i służy do stylizacji drobnych fragmentów tekstu. Div sprawdza się przy większych blokach – sekcjach, kartach produktów czy responsywnych układach.
Oto podstawowa składnia tagu <div>:
<div>
<!-- Tutaj umieszczamy inne elementy HTML -->
<p>To jest przykładowa treść wewnątrz diva.</p>
<img src="obrazek.jpg" alt="Opis obrazka">
</div>
Ten kod wyświetli się jako blok treści, gotowy do stylizacji.
Najczęściej używane atrybuty HTML dla <div> to:
- class – do przypisywania klas CSS (można podać wiele, oddzielonych spacją), np.
<div class="kontener glowny">; - id – unikalny identyfikator elementu (nie powielać w dokumencie), np.
<div id="header">; - style – wbudowane style CSS (stosuj oszczędnie – lepsze są arkusze zewnętrzne);
- lang – określenie języka treści, np.
lang="pl"; - title – tekst podpowiedzi wyświetlany po najechaniu kursorem;
- zdarzenia JavaScript – np.
onclick,onmouseover, np.<div onclick="alert('Kliknięto!')">.
Historia i ewolucja <div> w HTML
Przed HTML5 <div> dominował w strukturze stron – od nagłówków po stopki. HTML5 wprowadził semantyczne alternatywy jak <header>, <nav>, <main>, <section>, <article>, <aside> i <footer>, które lepiej opisują treść dla przeglądarek, czytników ekranowych i SEO.
Div nadal jest niezastąpiony tam, gdzie nie ma pasującej semantyki – np. w złożonych układach Flexbox i Grid. Uważaj jednak na „div soup” – nadmiar zagnieżdżonych divów obniża czytelność kodu.
Praktyczne przykłady użycia <div>
Poniżej znajdziesz scenariusze – od podstaw po rozwiązania bardziej zaawansowane:
1. Podstawowy layout strony z <div>
Stwórz prostą stronę z nagłówkiem, nawigacją i treścią – z klasami ułatwiającymi stylizację w CSS:
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Przykład z div</title>
<style>
.header { background: #333; color: white; padding: 20px; text-align: center; }
.nav { background: #eee; padding: 10px; }
.nav a { margin-right: 15px; text-decoration: none; }
.content { padding: 20px; max-width: 800px; margin: 0 auto; }
</style>
</head>
<body>
<div class="header">
<h1>Moja strona</h1>
</div>
<div class="nav">
<a href="#home">Strona główna</a>
<a href="#about">O nas</a>
<a href="#contact">Kontakt</a>
</div>
<div class="content">
<p>Tutaj jest główna treść strony. Div pozwala na łatwe grupowanie.</p>
</div>
</body>
</html>
Efekt: trzy czytelne bloki ułożone pionowo – gotowe do dalszej rozbudowy.
Lepsza, semantyczna wersja (HTML5) wygląda tak:
<header class="header"><h1>Moja strona</h1></header>
<nav class="nav">...</nav>
<main class="content">...</main>
Taki zapis poprawia SEO i dostępność.
2. Karty produktów z Flexbox (CSS + div)
Div błyszczy w responsywnych layoutach. Oto prosta galeria kart:
<div class="katalog" style="display: flex; flex-wrap: wrap; gap: 20px;">
<div class="karta" style="border: 1px solid #ccc; padding: 15px; width: 200px; border-radius: 8px;">
<img src="produkt1.jpg" alt="Produkt 1" style="width: 100%;">
<h3>Produkt 1</h3>
<p>Cena: 99 zł</p>
<button onclick="kup(1)">Kup</button>
</div>
<!-- Powtórz dla kolejnych kart -->
</div>
Dodaj prostą interakcję w JavaScript:
function kup(id) {
alert('Kupiono produkt ' + id);
}
Wynik: elastyczna siatka kart, która płynnie skaluje się na urządzeniach mobilnych.
3. Zaawansowany przykład – modal z div i JavaScript
Stwórz lekkie okno modalne w czystym HTML/CSS/JS:
<div id="modal" style="display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 1000;">
<div style="background: white; margin: 100px auto; padding: 20px; width: 300px; border-radius: 5px;">
<h2>Potwierdź</h2>
<p>Czy na pewno?</p>
<button onclick="zamknijModal()">Tak</button>
<button onclick="zamknijModal()">Nie</button>
</div>
</div>
<button onclick="otworzModal()">Otwórz modal</button>
<script>
function otworzModal() {
document.getElementById('modal').style.display = 'block';
}
function zamknijModal() {
document.getElementById('modal').style.display = 'none';
}
</script>
Dlaczego div? Łatwo go pozycjonować i animować (np. z CSS transitions), a struktura pozostaje prosta.
Najczęstsze błędy i jak ich unikać
Unikaj poniższych pułapek, aby kod był czytelny, semantyczny i łatwy w utrzymaniu:
- Nadużywanie div – jeśli masz element o oczywistej roli (np. artykuł, nawigacja), użyj semantycznego tagu jak
<article>,<nav>, co poprawia SEO i dostępność; - Brak semantyki – niebudowanie logicznej struktury dokumentu utrudnia nawigację czytnikom ekranowym i silnikom wyszukiwarek;
- Nieprawidłowe nazwy klas – stosuj spójne konwencje (np. BEM:
katalog__karta--duza) dla przewidywalności i skalowalności; - Zapominanie o zamykaniu – zawsze domykaj
<div>, bo błędy składni potrafią rozsypać cały layout; - Stare atrybuty prezentacyjne – unikaj zdeprecjonowanych rozwiązań typu
align="center"; używaj nowoczesnego Flexbox i Grid.
Przykład złego kodu (tzw. „div soup”):
<div><div><img src="logo.png" alt="Logo"></div></div>
<!-- Div soup! -->
Lepsze rozwiązanie z semantyką:
<header><img src="logo.png" alt="Logo"></header>
Najlepsze praktyki z <div>
Wykorzystaj poniższe wskazówki, by tworzyć nowoczesne i dostępne interfejsy:
- Łącz z CSS Grid/Flexbox – buduj elastyczne, responsywne układy bez hacków i nadmiaru zagnieżdżeń;
- Dodawaj ARIA, gdy to konieczne – np.
role="button"przy interaktywnych divach, aby poprawić dostępność; - Minimalizuj zagnieżdżenia – płytka struktura poprawia czytelność i ułatwia debugowanie;
- Testuj semantykę i dostępność – używaj narzędzi typu WAVE, Lighthouse oraz walidatorów HTML;
- Dbaj o responsywność – wspieraj różne ekrany za pomocą
@media(media queries) i jednostek elastycznych.
<div> vs. inne tagi: szybka tabela porównawcza
Poniższa tabela pomaga dobrać właściwy element do roli, jaką ma pełnić w dokumencie:
| Tag | Typ | Semantyka | Kiedy używać? |
|---|---|---|---|
| <div> | blokowy | brak (generyczny) | layouty, grupowanie bez znaczenia |
| <span> | liniowy | brak | stylizacja fragmentów tekstu inline |
| <section> | blokowy | sekcja tematyczna z nagłówkiem | logiczne grupy treści |
| <article> | blokowy | samodzielna jednostka treści | posty, artykuły, wpisy blogowe |
| <header> | blokowy | nagłówek strony/sekcji | logo, tytuł, elementy nawigacji |