Název článku
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
Prozkoumejte CSS Container Queries, další evoluci v responzivním designu. Naučte se vytvářet adaptabilní komponenty na základě velikosti kontejneru, nejen velikosti okna prohlížeče.
Responzivní design je základním kamenem webového vývoje již více než deset let. Tradičně jsme se spoléhali na media queries, abychom přizpůsobili naše rozvržení na základě velikosti okna prohlížeče. Nicméně, tento přístup se může někdy zdát omezující, zejména při práci se složitými, komponentově orientovanými návrhy. Vstupte do CSS Container Queries – výkonné nové funkce, která umožňuje komponentám se přizpůsobit na základě velikosti jejich obsahujícího elementu, nejen okna prohlížeče.
Container queries jsou zásadní změnou, protože umožňují responzivní design založený na elementech. Místo otázky "Jaká je velikost obrazovky?", se můžete zeptat "Kolik prostoru má tato komponenta k dispozici?" To otevírá svět možností pro vytváření skutečně znovu použitelných a adaptabilních komponent.
Představte si komponentu karty, která se může objevit v různých kontextech: úzký postranní panel, široká úvodní sekce nebo mřížka s více sloupci. S media queries byste museli psát specifická pravidla pro každý z těchto scénářů na základě šířky okna prohlížeče. S container queries může karta inteligentně upravit své rozvržení a stylování na základě rozměrů svého nadřazeného kontejneru, bez ohledu na celkovou velikost obrazovky.
Container queries nabízejí několik klíčových výhod oproti tradičním media queries:
Pojďme se ponořit do praktických aspektů používání container queries. Prvním krokem je deklarovat kontejner. Můžete to udělat pomocí vlastnosti container-type na nadřazeném elementu:
Vlastnost container-type akceptuje několik hodnot:
size: Container queries budou reagovat na inline i block rozměry kontejneru.inline-size: Container queries budou reagovat pouze na inline (šířka v horizontálních režimech psaní) rozměr kontejneru. Toto je nejběžnější a často nejužitečnější možnost.block-size: Container queries budou reagovat pouze na block (výška v horizontálních režimech psaní) rozměr kontejneru.normal: Element není kontejner pro queries. Toto je výchozí hodnota.style: Kontejnerové dotazy budou reagovat na stylové dotazy a dotazy na názvy kontejnerů (popsané později), což vám umožní dotazovat se na vlastní vlastnosti nastavené na kontejneru.Zde je příklad definování kontejneru, který reaguje na jeho inline velikost:
.card-container {
container-type: inline-size;
}
Můžete také použít zkratku container pro zadání container-type i container-name (který probereme později) v jedné deklaraci:
.card-container {
container: card / inline-size;
}
V tomto případě je 'card' název kontejneru.
Jakmile definujete kontejner, můžete použít @container at-rule k psaní vašich queries. Syntaxe je podobná media queries, ale místo cílení na rozměry okna prohlížeče cílíte na rozměry kontejneru:
@container card (min-width: 400px) {
.card {
flex-direction: row;
}
.card__image {
width: 50%;
}
.card__content {
width: 50%;
}
}
V tomto příkladu cílíme na kontejner "card" a aplikujeme styly na elementy .card, .card__image a .card__content, když je šířka kontejneru alespoň 400px. Všimněte si `card` před `(min-width: 400px)`. To je zásadní, pokud jste pojmenovali svůj kontejner pomocí `container-name` nebo zkratky vlastnosti `container`.
Pokud jste svůj kontejner nepomenovali, můžete název kontejneru vynechat:
@container (min-width: 400px) {
.card {
flex-direction: row;
}
.card__image {
width: 50%;
}
.card__content {
width: 50%;
}
}
Můžete použít stejný rozsah media features, které jsou k dispozici v media queries, jako například min-width, max-width, min-height, max-height a orientation.
Pojmenování kontejnerů může být užitečné, zejména při práci s vnořenými kontejnery nebo složitými rozvrženími. Název kontejneru můžete přiřadit pomocí vlastnosti container-name:
.card-container {
container-name: card;
container-type: inline-size;
}
Poté můžete ve svých container queries cílit na kontejner podle jeho názvu:
@container card (min-width: 400px) {
/* Styly pro kontejner 'card' */
}
Container Style Queries vám umožňují reagovat na styl vašeho kontejneru, nikoli na jeho velikost. To je obzvláště silné v kombinaci s vlastními vlastnostmi. Nejprve musíte definovat svůj kontejner pomocí container-type: style:
.component-container {
container-type: style;
}
Poté můžete použít @container style(--theme: dark) k dotazování na hodnotu vlastní vlastnosti --theme:
.component-container {
--theme: light;
}
@container style(--theme: dark) {
.component {
background-color: black;
color: white;
}
}
To umožňuje vašim komponentám se přizpůsobit na základě konfigurace, která je nastavena prostřednictvím CSS spíše než velikosti okna prohlížeče. To otevírá skvělé možnosti pro vytváření motivů a dynamické stylování.
Představte si komponentu karty, která zobrazuje informace o produktu. V úzkém kontejneru můžeme chtít naskládat obrázek a obsah svisle. V širším kontejneru je můžeme zobrazit vedle sebe.
HTML:
CSS:
.card-container {
container-type: inline-size;
}
.card {
display: flex;
flex-direction: column;
border: 1px solid #ccc;
padding: 16px;
}
.card__image {
width: 100%;
margin-bottom: 16px;
}
.card__content {
width: 100%;
}
@container (min-width: 400px) {
.card {
flex-direction: row;
}
.card__image {
width: 50%;
margin-bottom: 0;
}
.card__content {
width: 50%;
}
}
V tomto příkladu karta zpočátku zobrazí obrázek a obsah naskládané svisle. Když šířka kontejneru dosáhne 400px, karta se přepne na horizontální rozvržení.
Zvažte navigační menu, které se musí přizpůsobit na základě dostupného prostoru. V úzkém kontejneru (např. mobilní postranní panel) můžeme chtít zobrazit položky menu ve svislém seznamu. V širším kontejneru (např. záhlaví desktopu) je můžeme zobrazit vodorovně.
HTML:
CSS:
.nav-container {
container-type: inline-size;
}
.nav {
list-style: none;
padding: 0;
margin: 0;
}
.nav__item {
margin-bottom: 8px;
}
.nav__item a {
display: block;
padding: 8px 16px;
text-decoration: none;
color: #333;
}
@container (min-width: 600px) {
.nav {
display: flex;
}
.nav__item {
margin-right: 16px;
margin-bottom: 0;
}
.nav__item a {
display: inline-block;
}
}
V tomto příkladu navigační menu zpočátku zobrazí položky ve svislém seznamu. Když šířka kontejneru dosáhne 600px, menu se přepne na horizontální rozvržení.
Představte si rozvržení článku, které se musí přizpůsobit v závislosti na tom, kde je umístěno. Pokud je v malé náhledové sekci, měl by být obrázek nad textem. Pokud je to hlavní článek, může být obrázek na straně.
HTML
Název článku
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
CSS
.article-container {
container-type: inline-size;
}
.article {
display: flex;
flex-direction: column;
}
.article-image {
width: 100%;
margin-bottom: 10px;
}
.article-content {
width: 100%;
}
@container (min-width: 768px) {
.article {
flex-direction: row;
}
.article-image {
width: 40%;
margin-right: 20px;
margin-bottom: 0;
}
.article-content {
width: 60%;
}
}
Podpora prohlížečů pro container queries je nyní vynikající ve všech moderních prohlížečích, včetně Chrome, Firefox, Safari a Edge. Je důležité zkontrolovat Can I Use pro nejnovější informace o podpoře prohlížečů, protože funkce a podrobnosti implementace se mohou vyvíjet.
Zatímco container queries nabízejí výkonnou alternativu k media queries, je důležité pochopit, kdy je který přístup nejvhodnější.
V mnoha případech pravděpodobně použijete kombinaci media queries a container queries. Použijte media queries k vytvoření celkového rozvržení vaší aplikace a poté použijte container queries k doladění vzhledu a chování jednotlivých komponent v rámci tohoto rozvržení.
CSS Container Queries představují významný krok vpřed v evoluci responzivního designu. Tím, že umožňují responzivitu založenou na elementech, umožňují vývojářům vytvářet flexibilnější, znovu použitelné a udržovatelnější komponenty. Jak se podpora prohlížečů neustále zlepšuje, container queries jsou připraveny stát se základním nástrojem v arzenálu každého webového vývojáře.
inline-start a inline-end místo fyzických vlastností jako left a right.em, rem), abyste zajistili správné škálování textu.CSS Container Queries jsou výkonný nástroj pro vytváření skutečně responzivních a adaptabilních webových aplikací. Přijetím responzivního designu založeného na elementech můžete vytvářet komponenty, které se hladce přizpůsobí různým kontextům, zjednodušit svůj kód a zlepšit celkový uživatelský zážitek. Jak se podpora prohlížečů neustále rozšiřuje, container queries se stanou základní součástí moderního webového vývoje. Osvojte si tuto technologii, experimentujte s jejími možnostmi a odemkněte novou úroveň flexibility ve svých responzivních návrzích. Tento přístup umožňuje lepší znovupoužitelnost komponent, udržovatelnost a intuitivnější proces návrhu, což z něj činí neocenitelný přínos pro front-end vývojáře po celém světě. Přechod na container queries podporuje návrhový přístup více zaměřený na komponenty, což vede k robustnějším a adaptabilnějším webovým zážitkům pro uživatele po celém světě.