12.9. Właściwość align-self
Indywidualne wyrównanie wzdłuż osi poprzecznej
Właściwość align-items, stosowana do kontenera flex, ustawia domyślne wyrównanie dla **wszystkich** elementów flex wzdłuż osi poprzecznej.
Właściwość align-self pozwala **nadpisać** to domyślne wyrównanie dla **pojedynczego elementu flex**. Stosuje się ją bezpośrednio do **elementu flex**, a nie do kontenera.
Dzięki align-self możemy sprawić, że jeden konkretny element będzie wyrównany inaczej niż pozostałe elementy w tej samej linii flex.
Możliwe wartości align-self
Właściwość align-self przyjmuje te same wartości co align-items, plus dodatkową wartość auto:
auto(wartość domyślna): Element dziedziczy wartość właściwościalign-itemsswojego kontenera nadrzędnego. Jeśli nie ma kontenera nadrzędnego lub nie jest on kontenerem flex, wartość domyślna tostretch.stretch: Element jest rozciągany, aby wypełnić kontener wzdłuż osi poprzecznej (jeśli nie ma zdefiniowanego rozmiaru w tym kierunku).flex-start: Element jest wyrównywany do początku osi poprzecznej.flex-end: Element jest wyrównywany do końca osi poprzecznej.center: Element jest wyśrodkowywany wzdłuż osi poprzecznej.baseline: Element jest wyrównywany do linii bazowej tekstu.
Przykład:
<div class="container">
<div class="item">1</div>
<div class="item special">2 (Specjalny)</div>
<div class="item">3</div>
</div>
.container {
display: flex;
align-items: flex-start; /* Domyślnie wszystkie elementy na górze */
height: 150px;
border: 1px solid black;
}
.item {
width: 50px;
height: 50px;
background-color: lightblue;
margin: 5px;
border: 1px solid navy;
}
.special {
align-self: center; /* Ten konkretny element wyśrodkuj */
background-color: lightcoral;
height: 70px; /* Może mieć inną wysokość */
}
W powyższym przykładzie, mimo że kontener ma ustawione align-items: flex-start, element z klasą .special zostanie wyśrodkowany w pionie dzięki align-self: center.
Wizualizacja:
(Kontener ma align-items: flex-start. Element 2 ma align-self: center, element 4 ma align-self: flex-end, a element 5 (bez zdefiniowanej wysokości) ma align-self: stretch.)
Zadania praktyczne
Zadanie 1 (z rozwiązaniem)
Stwórz kontener flex z trzema elementami. Ustaw domyślne wyrównanie na center za pomocą align-items. Następnie dla drugiego elementu użyj align-self: flex-end;, aby umieścić go na dole kontenera.
Rozwiązanie:
HTML:
<div class="container-task1">
<div class="item">A</div>
<div class="item item-special">B</div>
<div class="item">C</div>
</div>
CSS:
.container-task1 {
display: flex;
align-items: center; /* Domyślnie wyśrodkowane */
height: 150px;
border: 1px solid black;
padding: 10px;
}
.item {
width: 50px;
height: 50px;
background-color: #eee;
border: 1px solid #ccc;
margin: 5px;
text-align: center;
line-height: 50px;
}
.item-special {
align-self: flex-end; /* Nadpisanie dla elementu B */
}
Efekt: Elementy A i C będą wyśrodkowane w pionie, a element B zostanie umieszczony na dole kontenera.
Zadanie 2 (do samodzielnego wykonania)
Stwórz kontener flex z czterema elementami. Ustaw domyślne wyrównanie na flex-start. Dla pierwszego elementu ustaw align-self: flex-end;, a dla ostatniego align-self: center;.
Zadanie 3 (do samodzielnego wykonania)
Stwórz kontener flex z kilkoma elementami bez zdefiniowanej wysokości. Domyślnie (align-items: stretch) powinny się rozciągnąć. Dla jednego z elementów ustaw align-self: flex-start; i nadaj mu konkretną wysokość (np. height: 40px;). Zaobserwuj efekt.
FAQ - Najczęściej zadawane pytania
Jaka jest domyślna wartość align-self?
Domyślną wartością jest auto, co oznacza, że element dziedziczy wartość align-items swojego kontenera flex.
Czy align-self działa w kontenerach wieloliniowych?
Tak, align-self działa również w kontenerach wieloliniowych. Pozwala ono na indywidualne wyrównanie elementu wzdłuż osi poprzecznej **w ramach jego własnej linii flex**.
Czy align-self może nadpisać align-content?
Nie, te właściwości kontrolują różne aspekty. align-content zarządza przestrzenią **między liniami flex**, podczas gdy align-self (i align-items) zarządza pozycją elementów **wewnątrz linii flex**. Nie wpływają one na siebie nawzajem.
Do czego stosuje się align-self?
align-self stosuje się bezpośrednio do **elementu flex** (dziecka kontenera flex), a nie do samego kontenera.