PorównaniePorównania

<div> vs <span>

<div> jest blokowym kontenerem bez znaczenia, a <span> jego liniowym odpowiednikiem. Oba służą tylko do grupowania i stylowania, nigdy do opisu treści.

Na tej stronie

Porównanie w tabeli

#
  • Domyślny display

    <div>
    block
    <span>
    inline
  • Zaczyna nową linię

    <span>
    Nie, płynie w tekście
  • Respektuje width, height i margin-top/bottom

    <span>
    Nie, trzeba zmienić display
  • Może zawierać elementy blokowe

    <span>
    Nie, tylko treść frazową
  • Typowe użycie

    <div>
    Grupowanie sekcji, kontener do Flexboxa lub Grida
    <span>
    Stylowanie fragmentu tekstu w linii, cel dla skryptu

Przykład

#
HTML
<div style="display: flex; gap: 12px; align-items: center;">
  <div class="box">JS</div>
  <div>
    <strong>Kurs JavaScript</strong><br>
    Twój postęp: <span style="color: #34d399; font-weight: 600;">12 z 20</span> lekcji
  </div>
</div>
Podgląd

Definicja i zastosowanie

#

Oba elementy są neutralne: dla przeglądarki, czytników ekranu i wyszukiwarek nic nie znaczą. Różni je domyślny display. <div> jest blokowy, więc zaczyna nową linię, rozciąga się na całą szerokość rodzica i respektuje width, height oraz pionowe marginesy. <span> jest liniowy, więc płynie w tekście, nie przerywa linii, a jego szerokość i wysokość są ignorowane, dopóki nie zmienisz mu display.

To przekłada się na zawartość, jaką mogą mieć. <div> przyjmuje dowolną treść przepływu: akapity, listy, inne <div>, nawet nagłówki. <span> przyjmuje tylko treść frazową, czyli tekst i inne elementy liniowe. Wsadzenie do niego akapitu albo listy jest błędem.

Zanim sięgniesz po jeden z nich, sprawdź, czy nie pasuje element semantyczny. Grupa treści często powinna być <section> albo <article>, a fragment tekstu <strong>, <em> albo <mark>. <div> i <span> zostają na sytuacje, w których żaden z nich nie pasuje.

Składnia

#
Składnia
<div>...</div>
<span>...</span>

Więcej przykładów

#
Span liniowy ignoruje width i height
HTML
<p>
  Element <span style="width: 200px; height: 100px; background: #7c3aed;">span</span> z
  width i height w stylu, ale to nie działa, bo jest liniowy.
</p>
Podgląd
Zamiana span na inline-block włącza wymiary
HTML
<p>
  Teraz działa:
  <span style="display: inline-block; width: 120px; height: 40px; background: #0ea5e9; color: #fff; text-align: center; line-height: 40px;">inline-block</span>
</p>
Podgląd

display: inline-block łączy oba światy: element stoi w linii, ale respektuje wymiary jak blok.

Dobre praktyki

#
  • Zawsze sprawdź najpierw, czy nie pasuje element semantyczny, np. <section>, <nav> albo <strong>.
  • Nie zagnieżdżaj w <span> elementów blokowych, w tym <div>.
  • Mnóstwo <div> jeden w drugim ("divitis") utrudnia czytanie kodu. Każdy powinien mieć konkretne zadanie.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.