Układ elastyczny CSS
Co zrobić, aby element na stronie układały się w elastyczny sposób, dopasowując położenie i rozmiary do swojej zawartości?
- Flexbox
Jakie zaawansowane możliwości daje elastyczny układ rozplanowania elementów na stronie?
- Kontener elastyczny {display: flex inline-flex}
Jak przełączyć sposób rozpalnowania elementów na układ elastyczny?
- Przepływ elastyczny {flex-direction, flex-wrap, flex-flow}
W jaki sposób ustawić elastycznie elementy w wierszach lub kolumnach w różnych kierunkach?
- Kolejność {order}
Jak zmienić kolejność wyświetlania elementów na stronie?
- Elastyczność {flex-grow, flex-shrink, flex-basis, flex}
Jak sprawić, aby rozmiary elementów elastycznie dopasowały się do ich zawartości w wolnej przestrzeni na stronie?
- Marginesy automatyczne
Jak elastycznie dopasować margines elementu, tak aby wypełnił wolną przestrzeń?
- Justowanie zawartości {justify-content}
Jak równomiernie wyrównać elementy na stronie?
- Wyrównanie wiersza {align-items, align-self}
Co zrobić, aby wyśrodkować blok w pionie?
- Wyrównanie wierszy {align-content}
Jak ustawić bloki w wierszach na dole, na górze albo równomiernie na całej dostępnej wysokości?
- Powtórka
CSS
Flexbox
Jakie zaawansowane możliwości daje elastyczny układ rozplanowania elementów na stronie?
W zamierzchłych czasach sieci, gdy style CSS nie były jeszcze tak rozwinięte jak dzisiaj, rozplanowanie elementów na stronie realizowano się przy pomocy tabelek. Nie był to jednak najlepszy sposób, gdyż nie spełniał podstawowych zasad semantyki. Tabele zostały stworzone z myślą o prezentacji zbioru danych o powtarzającym się charakterze. Na szczęście style CSS wprowadziły nowe sposoby układania elementów na stronie, bez potrzeby używania w niewłaściwy sposób znaczników tabeli. Paradoksalnie właściwość position (pozycja) nie nadawała się zbytnio do ustalania głównego układu elementów na stronie, ponieważ wymagała, aby rozmiary bloków były z góry znane. W praktyce z taką sytuacją rzadko mamy do czynienia, gdyż nie jesteśmy w stanie od razu dokładnie przewidzieć, ile tekstu będą zawierać artykuły, opublikowane w serwisie.
Rozwiązaniem miało być płynne ustalanie pozycji przy pomocy właściwości float [zobacz: Szablon strony na DIV-ach]. I rzeczywiście w większości typowych zastosowań taki sposób był zupełnie wystarczający. Niestety w pewnych szczególnych przypadkach miał podobne ograniczenia jak pozycja absolutna. Bardzo trudno było zrealizować, zdawać by się mogło, tak trywialne sposoby układania elementów, jak wyśrodkowanie w pionie czy ustawienie kilku kolumn obok siebie przy zachowaniu takiej samej ich wysokości. W niektórych sytuacjach cierpiała na tym dostępność serwisu. Syntezatory mowy, stosowane w przeglądarkach używanych przez osoby niewidome, odczytują treść strony w kolejności jej występowanie w kodzie źródłowym HTML, a nie wizualnego ułożenia bloków na ekranie. Dlatego często korzystniej jest, aby najpierw w kodzie umieścić treść artykułu, a dopiero po niej rozbudowane menu nawigacyjne. Niestety w takiej sytuacji nie można było stworzyć prawdziwie elastycznego układu strony, z kolumną menu po lewej stronie, a treścią artykułu zajmującą całą wolną przestrzeń po prawej.
Na szczęście CSS3 rozwiązuje ten problem. Nie trzeba już stosować tabelek, pozycji absolutnych ani trików z płynnym układaniem elementów. Dzięki koncepcji układu elastycznego (ang. flexible box layout lub w skrócie: flexbox) dostajemy zaawansowane możliwości rozplanowania bloków na stronie, przy jednoczesnym automatycznym dopasowywaniu się całego układu, tak aby dokładnie spełniał nasze oczekiwania, bez względu na ilość treści w poszczególnych blokach na stronie.
Kontener elastyczny {display: flex inline-flex}
Jak przełączyć sposób rozpalnowania elementów na układ elastyczny?
CSS 3
- Układ elastyczny w bloku:
selektor { display: flex }
- Układ elastyczny w linii:
selektor { display: inline-flex }
Tak tworzy się tzw. kontener elastyczny (ang. flex container), w którym dzieci układane są elastycznie. Sam kontener nie jest układany elastycznie na stronie, a jedynie jego dzieci. Wstawienie takiego kontenera przełącza tryb wyświetlania elementów w nim zawartych na układ elastyczny.
Aby jakiekolwiek własności, opisane dalej w tym rozdziale, dały widoczny efekt, konieczne jest dodanie powyższego stylu do elementu, który ma wyznaczać układ elastyczny.
Pytania i odpowiedzi {display: flex}
Do czego służy "display: flex"?
Deklaracja CSS "display: flex
" służy do tworzenia elastycznego kontenera, który umożliwia układanie elementów w jednym wierszu lub kolumnie. Dzięki niej można łatwo zarządzać rozmieszczeniem i odstępami między elementami wewnątrz kontenera, co jest przydatne do budowy responsywnych i dynamicznych układów.
Co jest lepsze: "grid" czy "flex"?
Nie można jednoznacznie stwierdzić, które jest lepsze, ponieważ "grid" (grid layout) i "flex" (flexbox) mają różne zastosowania.
Kiedy stosować "grid", a kiedy "flexbox"?
"Grid" jest idealny do tworzenia układów dwuwymiarowych, gdzie można precyzyjnie kontrolować zarówno poziome, jak i pionowe pozycje elementów. "Flex" jest bardziej odpowiedni do prostych układów w jednym wymiarze, np. wiersza lub kolumny. Wybór zależy od konkretnej potrzeby projektowej i często używa się ich jednocześnie, aby osiągnąć pożądany efekt.
Przeglądarki
Chrome | Firefox | Edge | Opera | Safari | |
---|---|---|---|---|---|
display: flex | 29 2013-08-20 | 20 2013-04-02 | 12 2015-07-29 | 16 2013-08-27 | 9 2015-09-30 |
display: inline-flex | 29 2013-08-20 | 20 2013-04-02 | 12 2015-07-29 | 16 2013-08-27 | 9 2015-09-30 |
Przepływ elastyczny {flex-direction, flex-wrap, flex-flow}
W jaki sposób ustawić elastycznie elementy w wierszach lub kolumnach w różnych kierunkach?
CSS 3
Kierunek elastyczny {flex-direction}
selektor { flex-direction: kierunek }
Kierunek określa sposób układania kolejnych elementów wewnątrz układu elastycznego:
- row - elementy będą układane w wierszach, analogicznie jak wyrazy tekstu w akapitach (domyślnie)
- row-reverse - ułożenie w wierszach w przeciwnym kierunku (w języku polskim będzie to od prawej do lewej krawędzi kontenera)
- column - ułożenie pionowo w kolumnach (w języku polskim - od góry do dołu)
- column-reverse - ułożenie pionowo w kolumnach (w języku polskim - od dołu do góry)
Polecenie pozwala sterować ułożeniem bloków w sposób podobny do wyrazów w tekście akapitu. Wyrazom jednak nie możemy nadawać rozmiarów, a blokom w układzie elastycznym - tak.
Zawijanie elastyczne {flex-wrap}
selektor { flex-wrap: zawijanie }
Zawijanie:
- nowrap - elementy nie zostaną zawinięte do kolejnego wiersza, nawet jeśli nie zmieszczą się w dostępnej szerokości kontenera (domyślnie)
- wrap - elementy, które nie zmieszczą się w dostępnej szerokości, zostaną przeniesione do kolejnego wiesza, jak wyrazy tekstu
- wrap-reverse - niemieszczące się elementy będą przeniesione do wcześniejszego wiersza (w języku polskim wyglądało by to tak, jakbyśmy pisali tekst w wierszach, zaczynając od dołu kartki papieru)
Polecenie pozwala sterować ułożeniem wierszy bloków w sposób podobny do linii w tekście akapitu.
Atrybuty mieszane przepływu elastycznego {flex-flow}
selektor { flex-flow: wartości atrybutów }
Polecenie to pozwala od razu podać kierunek i zawijanie elementów w układzie elastycznym.
Przykład {flex-flow}
"flex-flow: row nowrap
" - zwróć uwagę, że wszystkie elementy są identycznej wysokości:
blok nr 1
"flex-flow: row wrap
" - zwróć uwagę, że wysokość bloków dopasowuje się automatycznie w każdym osobnym wierszu układu:
blok nr 1
flex-flow: row-reverse nowrap
blok nr 1
flex-flow: row-reverse wrap-reverse
Przeglądarki
Chrome | Firefox | Edge | Opera | Safari | |
---|---|---|---|---|---|
flex-direction: wartość | 29 2013-08-20 | 20 2013-04-02 | 12 2015-07-29 | 12.1 2012-11-20 | 9 2015-09-30 |
flex-direction: column | 21 2012-07-31 | ≤72 2020-01-07 | 12 2015-07-29 | 15 2013-07-02 | 7 2013-10-22 |
flex-direction: column-reverse | 21 2012-07-31 | 81 2020-09-22 | 12 2015-07-29 | 15 2013-07-02 | 7 2013-10-22 |
flex-direction: row | 21 2012-07-31 | ≤72 2020-01-07 | 12 2015-07-29 | 15 2013-07-02 | 7 2013-10-22 |
flex-direction: row-reverse | 21 2012-07-31 | 81 2020-09-22 | 12 2015-07-29 | 15 2013-07-02 | 7 2013-10-22 |
flex-wrap: wartość | 29 2013-08-20 | 28 2014-03-18 | 12 2015-07-29 | 16 2013-08-27 | 9 2015-09-30 |
flex-wrap: nowrap | 21 2012-07-31 | 28 2014-03-18 | 12 2015-07-29 | 15 2013-07-02 | 7 2013-10-22 |
flex-wrap: wrap | 21 2012-07-31 | 28 2014-03-18 | 12 2015-07-29 | 15 2013-07-02 | 7 2013-10-22 |
flex-wrap: wrap-reverse | 21 2012-07-31 | 28 2014-03-18 | 12 2015-07-29 | 15 2013-07-02 | 7 2013-10-22 |
flex-flow: wartość | 29 2013-08-20 | 28 2014-03-18 | 12 2015-07-29 | 12.1 2012-11-20 | 9 2015-09-30 |
Kolejność {order}
Jak zmienić kolejność wyświetlania elementów na stronie?
CSS 3
selektor { order: kolejność }
Natomiast kolejność to liczba całkowita, domyślnie równa zero. Elementy z przypisaną niższą wartością, będą wyświetlane w pierwszej kolejności. Wartości ujemne pozwalają przesunąć dowolny element na miejsce przed pierwszym. Elementy z przypisaną taką samą liczbą, wyświetlą się w kolejności ich występowania w kodzie źródłowym HTML.
Możliwość swobodnego ustalania kolejności wyświetlania się elementów to następna duża zaleta układu elastycznego. Przy wstawiania znaczników HTML do kodu źródłowego już nie musimy się martwić, aby były one osadzone w kolejności odpowiedniej do ich poprawnego wyświetlenia - zgodnie z zaprojektowaną grafiką serwisu.
Dzięki temu możemy tworzyć bardziej dostępne dokumenty. Przykładowo dla osoby niewidomej, która używa przeglądarki z syntezatorem mowy, prawdopodobnie korzystniej będzie, jeśli zapoznając się z katalogiem produktów w sklepie internetowym, najpierw usłyszy informacje o nazwie produktu, a potem jego opis. Zdjęcie jest w tym przypadku zupełnie nieważne, dlatego najlepiej jest wstawić je na końcu. Jednak dla użytkowników z dobrym wzrokiem właśnie zdjęcie może okazać się najważniejsze. Umieszczając je w kontenerze elastycznym, a następnie określając dla niego styl "order: -1
", wyświetlimy go na początku, podczas gdy syntezator mowy trafi na niego dopiero na końcu. W ten sposób potrzeby obu grup użytkowników zostaną spełnione.
Przykład {order}
Poniżej przykład fragmentu szablonu strony, który spełnia założenia dostępności - treść znajduje się w kodzie źródłowym przed kolumną menu. Mimo tego szerokość automatycznie dopasowuje się do okna przeglądarki. Dodatkowo warto zwrócić uwagę, że wysokość obu kolumn jest identyczna. Uzyskanie takiego efektu w tradycyjny sposób byłoby bardzo trudne i najczęściej wymagało pójścia na pewne kompromisy.
<div id="top"> <div id="TRESC">Treść strony...</div> <div id="MENU">Menu nawigacyjne</div> </div>
#top { display: flex; } #MENU { width: 150px; min-width: 150px; order: -1; }
[porównaj: Płynny szablon]
Przeglądarki
Chrome | Firefox | Edge | Opera | Safari | |
---|---|---|---|---|---|
order: wartość | 29 2013-08-20 | 20 2013-04-02 | 12 2015-07-29 | 12.1 2012-11-20 | 9 2015-09-30 |
Elastyczność {flex-grow, flex-shrink, flex-basis, flex}
Jak sprawić, aby rozmiary elementów elastycznie dopasowały się do ich zawartości w wolnej przestrzeni na stronie?
CSS 3
Rozciągnięcie elastyczne {flex-grow}
selektor { flex-grow: rozciągnięcie }
Rozciągnięcie jest wyrażone liczbą naturalną (większą lub równą zero), która określa proporcje, w jakich będą rozciągane elementy w kontenerze. Domyślna wartość - zero - odbiera elementom elastyczność.
Może się zdarzyć, że w jednym wierszu kontenera elastycznego mogłoby się zmieścić więcej elementów niż mamy zapewnionych. Wtedy zwykle z prawej strony pozostaje wolna przestrzeń. Możemy jednak sprawić, aby w takiej sytuacji szerokość elementów elastycznie dopasowała się w taki sposób, aby wypełniły całą dostępną przestrzeń kontenera. Jeżeli chcemy, aby wszystkie elementy zostały rozciągnięte równomiernie, wystarczy każdemu przypisać styl "flex-grow: 1
". Możemy też zadecydować, aby np. jeden z nich rozszerzył się dwa razy bardziej niż inne - przypisujemy mu wartość "flex-grow: 2
". Istnieje również możliwość ustalenia, aby tylko jeden element wypełnił całą pozostałą wolną przestrzeń w kontenerze. Wtedy tylko jemu nadajemy styl "flex-grow: 1
".
Ściśnięcie elastyczne {flex-shrink}
selektor { flex-shrink: ściśnięcie }
Ściśnięcie jest wyrażone liczbą naturalną (większą lub równą zero), która określa proporcje, w jakich będą ściskane elementy w kontenerze (domyślnie - "1").
Jeżeli kontener elastyczny jest zbyt wąski, jego dzieci są ściskane. Zwykle odbywa się to poprzez przełamanie do nowej linii tekstu, który zawiera się w tych blokach.
Baza elastyczna {flex-basis}
selektor { flex-basis: baza }
Baza jest wartością określoną w jednostkach długości albo słowem kluczowym "auto" (domyślnie).
Baza określa początkowy rozmiar elementu w kontenerze, zanim wolna przestrzeń zostanie rozłożona pomiędzy dzieci kontenera.
Wartość "0" (zero) spowoduje, że rozmiary elementów będą bezpośrednio proporcjonalne do przypisanych im wartości flex-grow
(albo flex-shrink
- w przypadku ściśnięcia). Jeżeli wszystkie elementy kontenera będą miały przypisany styl "flex-grow: 1
", w efekcie mogą zostać rozciągnięte do dokładnie takiego samego rozmiaru.
Wartość "auto" (domyślnie) spowoduje, że rozmiary absolutne poszczególnych elementów mogą nie być równe, ponieważ wolna przestrzeń rozłoży się proporcjonalnie tylko po bokach wewnątrz elementów.
Źródło: CSS Flexible Box Layout Module
Powyższy diagram przedstawia różnice między "absolutną" (baza zerowa) a "relatywną" (baza zależna od zawartości elementów) elastycznością. Kolejne elementy w poszczególnych kontenerach elastycznych mają przypisaną wartość flex-grow
odpowiednio: 1, 1, 2.
Atrybuty mieszane elastyczności {flex}
selektor { flex: wartości atrybutów }
Polecenie to pozwala od razu podać rozciągnięcie, ściśnięcie i bazę elementów w układzie elastycznym. Każda z wartości jest opcjonalna, przy czym jeśli chcemy podać flex-shrink
, należy obowiązkowo poprzedzić ją wartością flex-grow
. Nie ma możliwości określenia w ten sposób samego ściśnięcia bez ustalania rozciągnięcia. Ponadto jeśli chcemy określić zerową długość flex-basis
, trzeba koniecznie dopisać do niej jednostkę. Choć normalnie jednostka przy wartości zero nie jest wymagana, tutaj zapobiega omyłkowemu uznaniu długości bazy za rozciągnięcie lub ściśnięcie. Jednostkę można pominąć tylko, kiedy w deklaracji występują wszystkie trzy wartości.
Jako wartości atrybutów można wpisać również samo słowo kluczowe "none", co odpowiada: "0 0 auto
" ("flex-grow: 0; flex-shrink: 0; flex-basis: auto
"). Warto zauważyć, że domyślna wartość tych atrybutów jest inna - "0 1 auto
".
Z uwagi na fakt, że składnia tego polecenia przewiduje najczęstsze przypadki użycia, zaleca się stosować zawsze atrybuty mieszane zamiast osobnych poleceń.
Przykład {flex}
Pytania i odpowiedzi {flex-basis, flex-shrink, flex-grow}
Co to jest "flex-basis"?
flex-basis
to właściwość CSS używana w kontekście flexbox, która określa początkową szerokość elementu w kontenerze flex. Może to być wartość procentowa, pikselowa lub auto. flex-basis
pomaga ustalić, ile miejsca element ma początkowo przed podziałem elastycznego miejsca w kontenerze.
Co to jest "flex-shrink"?
flex-shrink
to właściwość CSS używana w kontekście flexbox, która określa, jak elementy mają się zmniejszać, gdy brakuje dostępnej przestrzeni w kontenerze. Domyślnie flex-shrink
ma wartość 1, co oznacza, że elementy zmniejszą się równomiernie. Jeśli element ma wartość 0 (zero), nie będzie się zmniejszać w przypadku braku miejsca.
Co robi "flex-grow"?
flex-grow
to właściwość CSS używana w kontekście flexbox, która określa, jak elementy mają się rozszerzać, gdy istnieje dodatkowa dostępna przestrzeń w kontenerze. Domyślnie flex-grow
ma wartość 0 (zero), co oznacza, że elementy nie będą się rozszerzać. Jeśli element ma wartość większą niż 0, to rozszerzy się proporcjonalnie do innych elementów w kontenerze w zależności od ich wartości flex-grow
.
Przeglądarki
Chrome | Firefox | Edge | Opera | Safari | |
---|---|---|---|---|---|
flex-grow: wartość | 29 2013-08-20 | 20 2013-04-02 | 12 2015-07-29 | 12.1 2012-11-20 | 9 2015-09-30 |
flex-shrink: wartość | 29 2013-08-20 | 20 2013-04-02 | 12 2015-07-29 | 12.1 2012-11-20 | 9 2015-09-30 |
flex-basis: wartość | 29 2013-08-20 | 22 2013-06-25 | 12 2015-07-29 | 12.1 2012-11-20 | 9 2015-09-30 |
flex-basis: auto | 22 2012-09-25 | 22 2013-06-25 | 12 2015-07-29 | 12.1 2012-11-20 | 9 2015-09-30 |
flex: wartość | 29 2013-08-20 | 20 2013-04-02 | 12 2015-07-29 | 12.1 2012-11-20 | 9 2015-09-30 |
flex: none | 21 2012-07-31 | ≤72 2020-01-07 | 12 2015-07-29 | 15 2013-07-02 | 7 2013-10-22 |
Marginesy automatyczne
Jak elastycznie dopasować margines elementu, tak aby wypełnił wolną przestrzeń?
selektor { margin-top: auto } selektor { margin-right: auto } selektor { margin-bottom: auto } selektor { margin-left: auto } selektor { margin: auto }
Ustawiając wybrany margines na wartość automatyczną sprawimy, że wypełni on wolną przestrzeń pozostałą w kontenerze. Dzięki temu w bardzo prosty sposób możemy ustawić kilka bloków w jednej linii - część przy lewej krawędzi, a niektóre przy prawej.
Przykład {display: flex, margin-left: auto}
Pytania i odpowiedzi
Co oznacza "margin: auto"?
W kontekście flexbox, "margin: auto
" oznacza, że element zostanie wyśrodkowany wzdłuż osi głównej (głównego kierunku) kontenera. Działa to poprzez równomierne rozłożenie dostępnego miejsca po obu stronach elementu, co skutkuje wyśrodkowaniem.
Jak ustawić elementy obok siebie CSS?
Aby ustawić elementy obok siebie w kontekście flexbox CSS, można to osiągnąć ustawiając "margin-right: auto
" na pierwszym elemencie lub "margin-left: auto
" na drugim elemencie. To spowoduje, że pierwszy element przylegnie do lewej krawędzi kontenera, a drugi do prawej krawędzi, a dostępna przestrzeń zostanie równomiernie rozłożona między nimi.
Justowanie zawartości {justify-content}
Jak równomiernie wyrównać elementy na stronie?
CSS 3
selektor { justify-content: justowanie }
Justowanie:
- flex-start - do początkowej krawędzi kontenera (domyślnie)
- flex-end - do końcowej krawędzi kontenera
- center - wyśrodkowanie
- space-between - równe odstępy między elementami
- space-around - równa przestrzeń wokół elementów
Polecenie steruje justowaniem elementów kontenera elastycznego, gdy jest on zbyt duży, aby został wypełniony w całości. Działa analogicznie jak justowanie tekstu, ale może operować na blokach.
Przykład {justify-content}
justify-content: flex-start
justify-content: flex-end
justify-content: center
justify-content: space-between
justify-content: space-around
Przeglądarki
Chrome | Firefox | Edge | Opera | Safari | |
---|---|---|---|---|---|
justify-content: wartość | 29 2013-08-20 | 20 2013-04-02 | 12 2015-07-29 | 12.1 2012-11-20 | 9 2015-09-30 |
Wyrównanie wiersza {align-items, align-self}
Co zrobić, aby wyśrodkować blok w pionie?
CSS 3
Wspólne wyrównanie wiersza {align-items}
selektor { align-items: wyrównanie }
Wyrównanie:
- flex-start - wyrównanie wiersza do początkowej krawędzi kontenera
- flex-end - do końcowej krawędzi kontenera
- center - wyśrodkowanie wiersza (dla tekstu w języku polskim - w pionie)
- baseline - zrównanie linii bazowych (poziomych prostych, łączących podstawy liter tekstu)
- stretch - rozciągnięcie do obu krawędzi jednocześnie (domyślnie)
Polecenie steruje wyrównaniem jednego wiersza wewnątrz kontenera elastycznego, kiedy mają one różną wysokość.
Przykład {align-items}
align-items: flex-start
blok nr 1
align-items: flex-end
blok nr 1
"align-items: center
" - ten sposób pozwala wyśrodkować w pionie element, nawet jeżeli z góry nie wiemy, ile treści będzie się w nim znajdować:
blok nr 1
align-items: baseline
align-items: stretch
blok nr 1
Indywidualne wyrównanie wiersza {align-self}
selektor { align-self: wyrównanie }
Jako wyrównanie należy podać jedną z wartości - analogicznie jak w przypadku wspólnego wyrównania. Oprócz tego można ustawić wartość "auto" (domyślnie), która oznacza przejęcie sposobu wyrównania z kontenera.
Wyrównanie indywidualne pozwala ustawić w różny sposób każdy z elementów kontenera elastycznego. Jeżeli jednak wszystkie mają być wyrównane tak samo, korzystniej będzie zrobić to dla nich wspólnie.
Pytania i odpowiedzi {align-items}
Co robi "align-items"?
W kontekście flexbox CSS, właściwość align-items
służy do określenia, jak elementy mają być wyśrodkowane wzdłuż osi poprzecznej (prostopadłej do głównej osi). Możliwe wartości to "flex-start" (domyślne, wyśrodkowanie u góry), "flex-end" (wyśrodkowanie u dołu), "center" (wyśrodkowanie w środku), "stretch" (rozciągnięcie, aby wypełnić całą dostępną przestrzeń) i inne. Dzięki align-items
można kontrolować pozycję elementów w kontenerze flexbox.
Jak wyśrodkować w pionie CSS?
Aby wyśrodkować zawartość w pionie za pomocą CSS, można użyć właściwości align-items
z wartością center w kontenerze flexbox. Oto przykład: .kontener { display: flex; align-items: center; /* Wyśrodkowanie w pionie */ }
.
Przeglądarki
Chrome | Firefox | Edge | Opera | Safari | |
---|---|---|---|---|---|
align-items: wartość | 29 2013-08-20 | 20 2013-04-02 | 12 2015-07-29 | 16 2013-08-27 | 9 2015-09-30 |
align-self: wartość | 29 2013-08-20 | 20 2013-04-02 | 12 2015-07-29 | 12.1 2012-11-20 | 9 2015-09-30 |
Wyrównanie wierszy {align-content}
Jak ustawić bloki w wierszach na dole, na górze albo równomiernie na całej dostępnej wysokości?
CSS 3
selektor { align-content: wyrównanie }
Wyrównanie:
- flex-start - wyrównanie wierszy do początkowej krawędzi kontenera
- flex-end - do końcowej krawędzi kontenera
- center - wyśrodkowanie wierszy (dla tekstu w języku polskim - w pionie)
- space-between - równe odstępy między wierszami
- space-around - równa przestrzeń wokół wierszy
- stretch - rozciągnięcie wierszy do obu krawędzi jednocześnie (domyślnie)
Polecenie steruje wyrównaniem wielu wierszy wewnątrz kontenera elastycznego, kiedy ich sumaryczna wysokość jest za mała, aby wypełnić całą dostępną przestrzeń.
Przykład {align-content}
align-content: flex-start
align-content: flex-end
align-content: center
align-content: space-between
align-content: space-around
align-content: stretch
Przeglądarki
Chrome | Firefox | Edge | Opera | Safari | |
---|---|---|---|---|---|
align-content: wartość | 29 2013-08-20 | 28 2014-03-18 | 12 2015-07-29 | 16 2013-08-27 | 9 2015-09-30 |
Pytania i odpowiedzi
Poniżej znajdziesz wykaz najczęściej zadawanych pytań z tego rozdziału wraz ze zwięzłymi odpowiedziami i gotowymi do użycia przykładami kodu CSS. Aby sprawdzić bardziej szczegółowy opis, kliknij odnośnik "Zobacz więcej..." pod wybraną odpowiedzią.
Jak przełączyć sposób rozpalnowania elementów na układ elastyczny?
Do czego służy "display: flex"?
Deklaracja CSS "display: flex
" służy do tworzenia elastycznego kontenera, który umożliwia układanie elementów w jednym wierszu lub kolumnie. Dzięki niej można łatwo zarządzać rozmieszczeniem i odstępami między elementami wewnątrz kontenera, co jest przydatne do budowy responsywnych i dynamicznych układów.
Co jest lepsze: "grid" czy "flex"?
Nie można jednoznacznie stwierdzić, które jest lepsze, ponieważ "grid" (grid layout) i "flex" (flexbox) mają różne zastosowania.
Kiedy stosować "grid", a kiedy "flexbox"?
"Grid" jest idealny do tworzenia układów dwuwymiarowych, gdzie można precyzyjnie kontrolować zarówno poziome, jak i pionowe pozycje elementów. "Flex" jest bardziej odpowiedni do prostych układów w jednym wymiarze, np. wiersza lub kolumny. Wybór zależy od konkretnej potrzeby projektowej i często używa się ich jednocześnie, aby osiągnąć pożądany efekt.
Jak sprawić, aby rozmiary elementów elastycznie dopasowały się do ich zawartości w wolnej przestrzeni na stronie?
Co to jest "flex-basis"?
flex-basis
to właściwość CSS używana w kontekście flexbox, która określa początkową szerokość elementu w kontenerze flex. Może to być wartość procentowa, pikselowa lub auto. flex-basis
pomaga ustalić, ile miejsca element ma początkowo przed podziałem elastycznego miejsca w kontenerze.
Co to jest "flex-shrink"?
flex-shrink
to właściwość CSS używana w kontekście flexbox, która określa, jak elementy mają się zmniejszać, gdy brakuje dostępnej przestrzeni w kontenerze. Domyślnie flex-shrink
ma wartość 1, co oznacza, że elementy zmniejszą się równomiernie. Jeśli element ma wartość 0 (zero), nie będzie się zmniejszać w przypadku braku miejsca.
Co robi "flex-grow"?
flex-grow
to właściwość CSS używana w kontekście flexbox, która określa, jak elementy mają się rozszerzać, gdy istnieje dodatkowa dostępna przestrzeń w kontenerze. Domyślnie flex-grow
ma wartość 0 (zero), co oznacza, że elementy nie będą się rozszerzać. Jeśli element ma wartość większą niż 0, to rozszerzy się proporcjonalnie do innych elementów w kontenerze w zależności od ich wartości flex-grow
.
Jak elastycznie dopasować margines elementu, tak aby wypełnił wolną przestrzeń?
Co oznacza "margin: auto"?
W kontekście flexbox, "margin: auto
" oznacza, że element zostanie wyśrodkowany wzdłuż osi głównej (głównego kierunku) kontenera. Działa to poprzez równomierne rozłożenie dostępnego miejsca po obu stronach elementu, co skutkuje wyśrodkowaniem.
Jak ustawić elementy obok siebie CSS?
Aby ustawić elementy obok siebie w kontekście flexbox CSS, można to osiągnąć ustawiając "margin-right: auto
" na pierwszym elemencie lub "margin-left: auto
" na drugim elemencie. To spowoduje, że pierwszy element przylegnie do lewej krawędzi kontenera, a drugi do prawej krawędzi, a dostępna przestrzeń zostanie równomiernie rozłożona między nimi.
Co zrobić, aby wyśrodkować blok w pionie?
Co robi "align-items"?
W kontekście flexbox CSS, właściwość align-items
służy do określenia, jak elementy mają być wyśrodkowane wzdłuż osi poprzecznej (prostopadłej do głównej osi). Możliwe wartości to "flex-start" (domyślne, wyśrodkowanie u góry), "flex-end" (wyśrodkowanie u dołu), "center" (wyśrodkowanie w środku), "stretch" (rozciągnięcie, aby wypełnić całą dostępną przestrzeń) i inne. Dzięki align-items
można kontrolować pozycję elementów w kontenerze flexbox.
Jak wyśrodkować w pionie CSS?
Aby wyśrodkować zawartość w pionie za pomocą CSS, można użyć właściwości align-items
z wartością center w kontenerze flexbox. Oto przykład: .kontener { display: flex; align-items: center; /* Wyśrodkowanie w pionie */ }
.
Powtórka
Sprawdź, czy pamiętasz, za co odpowiadają poniższe fragmenty kodu źródłowego CSS. W razie wątpliwości kliknij odnośnik "Zobacz więcej..." pod wybraną grupą przykładów.