Własność CSS box-sizing

> Dodaj do ulubionych

Własność CSS box-sizing określa sposób obliczania wymiarów elementów HTML przez wybór modelu polowego CSS. Jej ustawienie ma wpływ na sposób interpretacji wszystkich własności związanych z definiowaniem rozmiaru, takich jak width, height czy flex-basis.

W uproszczeniu można powiedzieć, że własność box-sizing służy do wybierania modelu polowego CSS.

Domyślnie wszystkie elementy HTML podlegają zasadom tzw. standardowego modelu polowego. W modelu tym wartości obramowania i dopełnienia (jeśli są zdefiniowane) są dodawane do szerokości i wysokości elementu zdefiniowanych za pomocą własności width i height (albo pokrewnych), czyli je zwiększają. Na przykład:

article {
  width: 300px;
  height: 600px;
  padding: 10px;
  border: 5px solid black;
}

Ten element article, mimo że ma ustawione szerokość na 300 pikseli i wysokość na 600 pikseli, w rzeczywistości na stronie będzie zajmował 330 pikseli w poziomie i 630 pikseli w pionie, ponieważ wartości obramowania i dopełnienia (odpowiednio po 5 i 10 pikseli z każdej strony) zostaną dodane do wartości własności width i height, które w tym przypadku odnoszą się tylko do obszaru treści elementu (który będzie miał szerokość 300 pikseli i wysokość 600 pikseli). Takie są podstawowe zasady standardowego modelu polowego.

Jeśli natomiast ktoś woli, aby ustawienia własności rozmiarów (m.in. width i height) obejmowały także szerokość dopełnienia i obramowania, to może przełączyć element na tzw. alternatywny model polowy. W efekcie element zawsze będzie miał taką samą szerokość, ustawioną np. przez własności width i height, a ewentualne obramowanie i dopełnienie będą powodowały zmniejszenie obszaru treści elementu. Spójrz na poniższy przykład:

article {
  box-sizing: border-box;
  width: 300px;
  height: 600px;
  padding: 10px;
  border: 5px solid black;
}

Deklaracja CSS box-sizing: border-box; w tej regule CSS włącza tryb alternatywnego modelu polowego, w efekcie czego jego ostateczna szerokość wyniesie 300 pikseli, a wysokość – 600 pikseli. Natomiast obszar treści będzie odpowiednio zmniejszony i jego szerokość wyniesie 270 pikseli (300 – 10 – 10 – 5 – 5), a wysokość – 570 pikseli (600 – 10 – 10 – 5 – 5).

Wartości i składnia

Własność box-sizing jako wartość przyjmuje jedno z dwóch słów kluczowych:

  • content-box: jest to ustawienie domyślne, przy którym własności rozmiarów, takie jak width i height określają tylko rozmiar obszaru treści elementu, a ewentualne dopełnienie i obramowanie są do niego dodawane. Zobacz przykład użycia wartości border-box i content-box poniżej.
  • border-box: przy tym ustawieniu element podlega zasadom tzw. alternatywnego modelu polowego, w którym własności rozmiarów, takie jak width i height, określają rozmiar pola obejmowanego przez krawędź obszaru obramowania, a ewentualne dopełnienie i obramowanie powodują odpowiednie zmniejszenie wymiarów obszaru treści. Zobacz przykład użycia wartości border-box i content-box poniżej.
  • Przykład

    Poniżej są zdefiniowane dwa elementy div o identycznych ustawieniach własności width i height, dopełnienia oraz obramowania. Różnią się jedynie modelem polowym – pierwszy ma ustawiony standardowy model polowy, a drugi – alternatywny model polowy.

    <style>
    div {
      border: 10px dashed darkgreen;
      padding: 20px;
      width: 200px;
      height: 100px;
    }
    #content-box {
      box-sizing: content-box;
    }
    #border-box {
      box-sizing: border-box;
    }
    </style>
    <div id="content-box">content-box</div>
    <p></p>
    <div id="border-box">border-box</div>

    Efekt:

    Zastosowanie własności CSS box-sizing z wartościami content-box i border-box

    Mimo takich samych ustawień szerokości i wysokości oba elementy div znacznie różnią się wielkością.

    Szerokość pierwszego z nich (content-box) wynosi 200 + 20 + 20 + 10 + 10 = 260 pikseli, a jego wysokość wynosi 100 + 20 + 20 + 10 + 10 = 160 pikseli, ponieważ własności width i height określiły tylko szerokość i wysokość obszaru treści, do którego następnie zostały dodane dopełnienie i obramowanie z dwóch stron w każdym wymiarze.

    Natomiast wymiary drugiego (border-box) kontenera to 200 pikseli szerokości i 100 pikseli wysokości, ponieważ w tym przypadku własności width i height określają rozmiar całego elementu już po uwzględnieniu dopełnienia i obramowania. W efekcie zmniejszył się rozmiar obszaru treści.

    Zastosowanie

    Własność box-sizing ma zastosowanie do wszystkich elementów HTML, które obsługują własności width i height.

    Podsumowanie

    ZastosowanieWszystkie elementy HTML, które obsługują własności width i height
    Obsługiwane wartościSłowa kluczowe: content-box i border-box
    Wartość początkowacontent-box
    DziedziczenieNie
    SpecyfikacjaCSS Box Sizing Module Level 3