Właściwość CSSUkład i pozycjonowanie

contain

Obiecuje przeglądarce, że wnętrze elementu nie wpływa na resztę strony, więc może ona ograniczyć przeliczanie układu i rysowanie.

Wartość domyślna
none
Dziedziczona
Nie
Animowalna
nie
Dotyczy
wszystkie elementy, ale size, layout i paint nie działają na zwykłych elementach liniowych i wewnętrznych elementach tabel (poza komórkami)
JavaScript
element.style.contain = "content"
Na tej stronie

Przykład

#
CSS
.feed {
  display: grid;
  gap: 8px;
}

.feed-item {
  contain: content;
  padding: 10px 12px;
  border-radius: 10px;
  background: #18181b;
}
Podgląd

Każdy wpis jest odgrodzony od reszty. Gdy w jednym zmieni się coś, co nie wpływa na jego rozmiar, na przykład licznik polubień, przeglądarka może przeliczyć tylko ten wpis zamiast całej strony. content nie wymaga podawania wymiarów, więc wpisy dalej dopasowują wysokość do treści.

Definicja i zastosowanie

#

Właściwość contain pozwala odgrodzić fragment strony od reszty. Deklarujesz, że to, co dzieje się w środku elementu, nie wpłynie na otoczenie, a przeglądarka może wtedy przeliczać i malować tylko ten fragment. Przydaje się w długich listach, widżetach i panelach, które często się zmieniają.

Rodzaje zawierania można łączyć: size (rozmiar elementu nie zależy od treści), inline-size (to samo tylko dla rozmiaru liniowego), layout (układ w środku nie wpływa na zewnątrz), paint (potomkowie nie rysują się poza elementem) i style (liczniki CSS zmieniane w środku nie działają poza elementem). Skrót content oznacza layout paint style, a strict to wszystkie te trzy razem z size.

Każdy rodzaj ma widoczne skutki uboczne. Przy layout i paint element staje się blokiem zawierającym dla potomków z position: absolute i fixed oraz tworzy nowy kontekst stosu. paint dodatkowo przycina wszystko, co wystaje, podobnie jak overflow: clip. Przy size element bez podanych wymiarów jest mierzony tak, jakby był pusty, więc jego wysokość spada do zera.

Na co dzień rzadko ustawia się contain ręcznie, bo często robią to za Ciebie inne właściwości: container-type włącza zawieranie rozmiaru, a content-visibility: auto włącza zawieranie i dodatkowo pomija renderowanie fragmentów poza ekranem.

Składnia

#
Składnia
contain: none | strict | content | [ [ size | inline-size ] || layout || style || paint ];

Wartości

#
  • none

    Brak zawierania. Plakietka ustawia się względem zewnętrznej ramki, bo to ona ma position: relative.
  • layout

    Karta staje się blokiem zawierającym, więc plakietka przeskakuje do jej rogu. Nic nie jest przycinane.
  • paint

    Plakietka też trafia do rogu karty, ale jej część wystająca poza kartę zostaje ucięta.
  • size

    Wysokość karty przestaje zależeć od treści. Bez podanego rozmiaru karta zapada się do samego paddingu, a tekst wylewa się poniżej.
  • content

    layout paint style

    Najbezpieczniejszy zestaw: karta izoluje układ i rysowanie, ale nadal dopasowuje wysokość do treści. Wygląda tak samo jak paint.
  • strict

    size layout paint style

    Wszystko naraz. Karta bez wymiarów zapada się, a paint przycina całą treść, więc zostaje pusty pasek. Używaj tylko z ustalonym rozmiarem.

Wartości w praktyce

#

none

Brak zawierania. Plakietka ustawia się względem zewnętrznej ramki, bo to ona ma position: relative.
.demo { contain: none; }

layout

Karta staje się blokiem zawierającym, więc plakietka przeskakuje do jej rogu. Nic nie jest przycinane.
.demo { contain: layout; }

paint

Plakietka też trafia do rogu karty, ale jej część wystająca poza kartę zostaje ucięta.
.demo { contain: paint; }

size

Wysokość karty przestaje zależeć od treści. Bez podanego rozmiaru karta zapada się do samego paddingu, a tekst wylewa się poniżej.
.demo { contain: size; }

content

Najbezpieczniejszy zestaw: karta izoluje układ i rysowanie, ale nadal dopasowuje wysokość do treści. Wygląda tak samo jak paint.
.demo { contain: content; }

strict

Wszystko naraz. Karta bez wymiarów zapada się, a paint przycina całą treść, więc zostaje pusty pasek. Używaj tylko z ustalonym rozmiarem.
.demo { contain: strict; }

Obsługa przeglądarek

#

Szeroko dostępne · od 2022 roku

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • contain: content to rozsądny wybór dla niezależnych widżetów i elementów długich list. Nie wymaga wymiarów i rzadko coś psuje, o ile nic nie musi wystawać poza element.
  • size i strict stosuj tylko z ustalonymi wymiarami albo razem z contain-intrinsic-size, inaczej element zapadnie się do zera.
  • Jeśli po dodaniu contain okno z position: fixed przestało zakrywać cały ekran, to skutek nowego bloku zawierającego. Przenieś okno poza zawierany element albo użyj <dialog> otwieranego metodą showModal().

Powiązane hasła

#

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