Można zrezygnować z floatów do rozmieszczania i układania elementów w CSS ):
Dzięki Flex można łatwiej przygotować responsywny układ strony bez konieczności używania float i position.
Przede wszystkim należy zdefiniować flex pojemnik (container), i elementy, które znajdą się wewnątrz (flex items),
Struktura
Konieczne są: pojemnik zewnętrzny i wewnętrzne elementy, które będą układane flexem.
Pojemnik musi mieć display wybrane na flex i wtedy każdy element, który się w nim znajdzie automatycznie będzie podlegał ustawieniom flex.
Dodatkowe opcje to:
flex-direction
flex-wrap
flex-flow
justify-content
align-items
align-content
Układy pionowe i poziome, kolejność elementów
flex-direction
flex-direction: column
Elementy wewnętrzne układają się pionowo, tak jak elementy blokowe, w takiej kolejności jak są wpisane w html.
flex-direction: column-rewerse
Elementy wewnętrzne układają się pionowo, tak jak elementy blokowe, ale w odwrotnej kolejności
flex-direction row i row-reverse
Elementy wewnętrzne układają się poziomo (in-line), odpowiednio w 1 rzędzie po kolei row, a w drugim, w odwrotnej kolejności: row-rewerse.
Flex-wrap
Flex-wrap: wrap
Elementy wewnętrzne przy zmianie rozmiaru strony zawijają się wrap czyli tworzą się kolejne wiersze w układzie: row, na ekranie standardowym 3 kolumnyElementy wewnętrzne przy zmianie rozmiaru strony zawijają się wrap czyli tworzą się kolejne wiersze w układzie: row, na mniejszym 2Elementy wewnętrzne przy zmianie rozmiaru strony zawijają się wrap czyli tworzą się kolejne wiersze w układzie: row, na urządzeniach mobilnych 1 element w wierszu
flex-wrap: nowrap (ustawienie domyślne)
Elementy wewnętrzne przy zmianie rozmiaru strony nie zawijają się nowrap czyli nie tworzą kolejnych wierszy i wyświetlają się tylko te, które mieszczą się w oknie.
Flex-flow
Jest to jednowierszowa, krótsza forma zapisu dla obu parametrów, tzn. flex-direction i flex-wrap.
flex-flow: row wrap
Elementy wewnętrzne ustawiają się w wierszu in-line i w mniejszych rozmiarach okna zawijają się tworząc kolejne wiersze i redukując liczbę kolumnElementy wewnętrzne ustawiają się w wierszu in-line i w mniejszych rozmiarach okna zawijają się tworząc kolejne wiersze i redukując liczbę kolumnElementy wewnętrzne ustawiają się w wierszu in-line i w mniejszych rozmiarach okna zawijają się tworząc kolejne wiersze i redukując liczbę kolumn
Wyrównanie wszystkich elementów w pojemniku
Justify-content (wyrównanie w poziomie)
justify-content: center
Środek w poziomie
justify-content: flex-start (domyślne)
Wyrównanie elementów od początku pojemnika
justify-content: flex-end
Wyrównanie elementów od końca pojemnika
justify-content: space-between
Pojemniki układają się od początku pojemnika i odpowiednio zwiększają się (lub zmniejszają) odstęp pomiędzy poszczególnymi elementami pojemnika, nie ma odstępu przy brzegach.
justify-content: space-around
Odstępy pomiędzy pojemnikami + odstęp od lewej i prawej krawędzi pojemnika (połowa wartości odstępu między pojemnikami, zwiększają się (są równe) i uzupełniają szerokość pojemnika
justify-content: space-evenly
Odstępy pomiędzy pojemnikami + odstęp od lewej i prawej takie same
Align-items (wyrównanie w pionie)
align-items:center
Pojemniki układają się od początku pojemnika (jeżeli nie mają żadnych ustawień justify-content, a pionowo są na środku.
align-items:flex-start
Pojemniki układają się od początku pojemnika w pionie
align-items:flex-end
Pojemniki układają się od końca pojemnika w pionie
align-items:flex-stretch
Pojemniki są rozciągane, tak aby wypełnić cały pojemnik w pionie.
align-items:baseline
Pojemniki są wyrównane do linii bazowej teksu.
Align-content (wyrównanie całego wiersza w pionie)
align-content: space-between
Pionowe odstępy między poziomymi rzędami pojemników są takie same.
align-content: space-around
Pionowe odstępy między poziomymi rzędami pojemników są takie same i dodatkowo jest odstęp od górnej i dolnej krawędzi pojemnika (jego wartość to połowa wartości odstępu między kolejnymi rzędami.
align-content: space-evenly
Pionowe odstępy między poziomymi rzędami pojemników są takie same i dodatkowo jest odstęp od górnej i dolnej krawędzi pojemnika (taki sam jak pomiędzy rzędami)
align-content: stretch
Pojemniki wewnętrzne zwiększają swój rozmiar w pionie, tak aby wypełnić kontener.
align-content: center
Wszystkie rzędy (wiersze z pojemnikami) są wyśrodkowane w pionie.
align-content: flex-start
Wszystkie rzędy (wiersze z pojemnikami) są wyrównane w pionie do góry (do początku).
align-content: flex-end
Wszystkie rzędy (wiersze z pojemnikami) są wyrównane w pionie do dołu (do końca).
align-content: center i align-items: center
Pojemnik (pojemniki) są idealnie wyśrodkowane w pionie i w poziomie.
Zmiana rozmiarów pojemników wewnętrznych
flex-grow zwększanie procentowe szerokości wybranego pojemnika
flex-grow:2”
Jeden z pojemników ma w stylu parametr flex-grow:2, co powoduje, że otrzymuje szerokość 2 razy większą od pozostałych, jeżeli pozostałe pojemniki mają parametr style=”flex-grow:1”, wtedy zachowują wyjściową szerokość, jeżeli nie, mogą być zwężone po to aby ten, który ma ustawienie flex-grow:2 rzeczywiście miał 2 razy większą szerokość od pozostałych i żeby wszyscy zmieścili się w pojemniku kontenerze.
flex-shrink zmniejszanie procentowe szerokości wszystkich pojemników, tak, żeby zmieściły się w pojemniku
align-items: stretch i flex-shrink:0
Atrybut align-items:stretch, powoduje dopasowanie rozmiarów pojemników wewnętrznych, odpowiednio zwężając je tak aby wszyscy zmieścili się w rzędzie, jeżeli jedne z nich ma ustawienie: style=”flex-shrink:0”, to ten pojemnik nie zostaje zwężony i zachowuje wyjściową szerokość.
flex-basis konretny rozmiar
flex-basis, pozwala podać rozmiar, dla wybranego pojemnika
Poleceniem style=”flex-basis:300px;” podajesz taka szerokość jaka Cię interesuje.
jedno-liniowy zapis dla flex-grow, flex-shrink, flex-basis
flex: 0 0 200px
Polecenie style=”flex: 0 0 300px;” dla drugiego pojemnika, oznacza pierwsze 0, odwołuje się do flex-grow:0, czyli ma nie być zwiększany, drugie 0 do flex-shrink, czyli ma nie być zmniejszany, a 300px do flex-basis czyli podaje jego konkretną szerokość. Możemy również spotkać się z zapisem flex:25%co oznacza, że flex-growi flex-shrink mają wartość: 1
Pojemniki 1, 2 3 mają atrybut align-self odpowiednio ustawiony na : flex-start, center i flex-end powoduje, że ich wysokość, nie zostaje rozciągnięta do rozmiaru pojemnika tylko zachowuje automatyczną wysokość zależną od zawartości i jest wyrównana w pionie do góry, środka i dołu w stosunku do pozostałych.