align-itemsWłasnością giętkiego polu wyrównuje elementy wewnątrz kontenera flex przekroju wzdłuż osi, tak jak justify-contentrobi się wzdłuż osi głównej. (Domyślnie flex-direction: rowoś poprzeczna odpowiada pionowi, a oś główna odpowiada poziomemu. Z flex-direction: columntymi dwoma są odpowiednio zamienione).
Oto przykład, jak align-items:centerwygląda:
Ale align-contentjest dla elastycznych pudełek z wieloma liniami. Nie działa, gdy przedmioty są w jednej linii. Wyrównuje całą strukturę zgodnie z jej wartością. Oto przykład align-content: space-around;:
A oto jak align-content: space-around;z align-items:centerwyglądem:
Zwróć uwagę na trzecie pole i wszystkie pozostałe pola w pierwszym wierszu zmieniają się na pionowo wyśrodkowane w tym wierszu.
Pamiętaj, że align-*właściwości mogą również przesuwać elementy elastyczne w poziomie. To zależy od flex-direction. stackoverflow.com/q/32551291/3597276
Michael Benjamin
1
To jest łatwo najlepsze wytłumaczenie. Wszyscy inni zawodzą żałośnie.
ortonomy
> „Ale wyrównywanie zawartości jest przeznaczone dla elastycznych pudełek z wieloma liniami. Nie ma to żadnego wpływu, gdy elementy znajdują się w jednej linii” - wydaje się to nieprawdą lub nie należy się zaszczycić w najnowszym Firefoksie (maj 2020). Zamiast tego, jeśli istnieje pojedyncza linia elastyczna (cała treść mieści się w obrębie długości mniejszej niż oś główna), która jest mniejsza niż pełna wysokość (rozmiar osi poprzecznej jest mniejszy niż pełna dostępna), to wyrównaj zawartość, jeśli ustawiona spowoduje zatarcie wyrównania - przedmiotów. Ma to sens: dotyczy KAŻDEJ linii, którą znajdzie?
Zajmie ci to 10–20 minut, a na poziomie 21 znajdziesz odpowiedź na swoje pytanie. Wspomniał:
align-content określa odstępy między liniami, a align-items
określa, w jaki sposób elementy jako całość są wyrównane w kontenerze. Gdy jest tylko jedna linia, wyrównanie zawartości nie ma żadnego efektu
Rzeczywiście uważam, że ten żabki przykład jest naprawdę przydatny. Wiele się z tego nauczyłem.
Spikatrix
63
Po pierwsze, align-itemsdotyczy przedmiotów w jednym rzędzie. Tak więc dla pojedynczego rzędu elementów na głównej osi , align-itemswyrównasz te elementy odpowiednio względem siebie i zacznie się od nowej perspektywy z następnego rzędu.
Teraz align-contentnie koliduje z przedmiotami z rzędu, ale z samymi wierszami . W związku z tym,align-content spróbuje wyrównać rzędy względem siebie i zgiąć pojemnik.
Miałem to samo zamieszanie. Po pewnym majsterkowaniu na podstawie wielu powyższych odpowiedzi, w końcu widzę różnice. Moim skromnym zdaniem to wyróżnienie najlepiej widać w przypadku elastycznego pojemnika, który spełnia następujące dwa warunki:
Sam elastyczny pojemnik ma ograniczenie wysokości (np. min-height: 60rem) I dlatego może stać się zbyt wysoki dla swojej zawartości
Przedmioty dziecięce zamknięte w pojemniku mają nierówne wysokości
Warunek 1 pomaga mi zrozumieć, co contentoznacza w stosunku do kontenera nadrzędnego. Gdy zawartość zrówna się z kontenerem, nie będziemy mogli zobaczyć żadnych efektów pozycjonowania align-content. Dopiero gdy mamy dodatkową przestrzeń wzdłuż osi poprzecznej, zaczynamy widzieć jej efekt: wyrównuje zawartość względem granic kontenera nadrzędnego.
Warunek 2 pomaga mi wizualizować efekty align-items: wyrównuje elementy względem siebie.
<divclass="flex-container"><divclass="item">Short</div><divclass="item">Longerrrrrrrrrrrrrr</div><divclass="item">💩</div><divclass="item"id="tall">This is Many Words</div><divclass="item">Lorem, ipsum.</div><divclass="item">10</div><divclass="item">Snickers</div><divclass="item">Wes Is Cool</div><divclass="item">Short</div></div>
Przykład CSS:
.flex-container {display: flex;/*dictates a min-height*/min-height:60rem;flex-flow: row wrap;border:5px solid white;justify-content: center;align-items: center;align-content: flex-start;}#tall {/*intentionally made tall*/min-height:30rem;}.item {margin:10px;max-height:10rem;}
Przykład 1 : Zawęź obszar wyświetlania, aby zawartość była równo z kontenerem. Dzieje się tak, gdy align-content: flex-start;nie ma żadnych efektów, ponieważ cały blok zawartości jest ściśle dopasowany do pojemnika (brak dodatkowego miejsca na zmianę położenia!)
Zwróć także uwagę na drugi rząd - zobacz, jak elementy są wyśrodkowane względem siebie.
Przykład 2 : Gdy poszerzamy obszar wyświetlania, nie mamy już wystarczającej zawartości, aby wypełnić cały pojemnik. Teraz zaczynamy widzieć efekty align-content: flex-start;--it wyrównuje zawartość względem górnej krawędzi kontenera.
Te przykłady oparte są na Flexboksie, ale te same zasady dotyczą siatki CSS. Mam nadzieję że to pomoże :)
align-content może zmienić wysokość linii dla kierunku wiersza lub szerokość kolumny, gdy jej wartość jest rozciągnięta, lub dodać puste miejsce między liniami lub wokół nich dla space-between , space-around, flex-start, flex-end values.
align-itemsmoże zmienić wysokość lub pozycję elementów w obszarze linii. Gdy przedmioty nie są zawinięte, mają tylko jedną linię, której obszar jest zawsze rozciągnięty do obszaru pola elastycznego (nawet jeśli elementy się przepełniają) i align-contentnie ma wpływu na pojedynczą linię. Nie ma to więc wpływu na przedmioty, które nie są zawinięte i align-itemsmogą jedynie zmieniać ich położenie lub rozciągać je, gdy wszystkie znajdują się w jednej linii.
Jeśli jednak są owinięte, w każdej linii znajduje się wiele wierszy i przedmiotów. A jeśli wszystkie elementy każdej linii mają tę samą wysokość (dla kierunku wiersza), wysokość linii będzie równa wysokości tych elementów i nie zobaczysz żadnego efektu po zmianiealign-items wartości .
Jeśli więc chcesz wpłynąć na elementy, align-itemskiedy elementy są owinięte i mają tę samą wysokość (dla kierunku wiersza), najpierw musisz użyć align-contentwartości rozciągania, aby powiększyć obszar linii.
align-contentkontroluje pozycję osi poprzecznej (tj. kierunek pionowy, jeśli flex-directionjest row, i poziomą, jeśli flex-directionjest column), pozycjonowanie wielokrotności linii względem siebie.
(Pomyśl o liniach akapitu rozłożonego pionowo, ułożonych w górę, ułożonych w dół. Jest to flex-directionparadygmat rzędu).
wyrównaj elementy
align-items kontroluje oś poprzeczną pojedynczej linii elementów giętkich.
(Pomyśl, w jaki sposób wyrównana jest pojedyncza linia akapitu, jeśli zawiera ona trochę normalnego tekstu i jakiś wyższy tekst, taki jak równania matematyczne. W takim przypadku będzie to dolna, górna lub środkowa część każdego rodzaju tekstu w linii, która będzie być wyrównany?)
podczas korzystania z elementu wyrównywania lub justowania element dopasowuje „zawartość wewnątrz elementu siatki odpowiednio wzdłuż osi kolumny lub osi wiersza.
Ale: jeśli używasz align-content lub justify-content, ustawiasz pozycję siatki wzdłuż osi kolumny lub osi wiersza. pojawia się, gdy masz siatkę w większym pojemniku, a szerokość lub wysokość są nieelastyczne (przy użyciu px).
Odpowiedzi:
align-items
Własnością giętkiego polu wyrównuje elementy wewnątrz kontenera flex przekroju wzdłuż osi, tak jakjustify-content
robi się wzdłuż osi głównej. (Domyślnieflex-direction: row
oś poprzeczna odpowiada pionowi, a oś główna odpowiada poziomemu. Zflex-direction: column
tymi dwoma są odpowiednio zamienione).Oto przykład, jak
align-items:center
wygląda:Ale
align-content
jest dla elastycznych pudełek z wieloma liniami. Nie działa, gdy przedmioty są w jednej linii. Wyrównuje całą strukturę zgodnie z jej wartością. Oto przykładalign-content: space-around;
:A oto jak
align-content: space-around;
zalign-items:center
wyglądem:Zwróć uwagę na trzecie pole i wszystkie pozostałe pola w pierwszym wierszu zmieniają się na pionowo wyśrodkowane w tym wierszu.
Oto kilka linków codepen do zabawy:
http://codepen.io/asim-coder/pen/MKQWbb
http://codepen.io/asim-coder/pen/WrMNWR
Oto super fajne pióro, które pokazuje i pozwala grać z prawie wszystkim w Flexbox.
źródło
align-*
właściwości mogą również przesuwać elementy elastyczne w poziomie. To zależy odflex-direction
. stackoverflow.com/q/32551291/3597276Uważam, że przykład http://flexboxfroggy.com/ jest bardzo przydatny.
Zajmie ci to 10–20 minut, a na poziomie 21 znajdziesz odpowiedź na swoje pytanie. Wspomniał:
źródło
Po pierwsze,
align-items
dotyczy przedmiotów w jednym rzędzie. Tak więc dla pojedynczego rzędu elementów na głównej osi ,align-items
wyrównasz te elementy odpowiednio względem siebie i zacznie się od nowej perspektywy z następnego rzędu.Teraz
align-content
nie koliduje z przedmiotami z rzędu, ale z samymi wierszami . W związku z tym,align-content
spróbuje wyrównać rzędy względem siebie i zgiąć pojemnik.Sprawdź to skrzypce: https://jsfiddle.net/htym5zkn/8/
źródło
Miałem to samo zamieszanie. Po pewnym majsterkowaniu na podstawie wielu powyższych odpowiedzi, w końcu widzę różnice. Moim skromnym zdaniem to wyróżnienie najlepiej widać w przypadku elastycznego pojemnika, który spełnia następujące dwa warunki:
min-height: 60rem
) I dlatego może stać się zbyt wysoki dla swojej zawartościWarunek 1 pomaga mi zrozumieć, co
content
oznacza w stosunku do kontenera nadrzędnego. Gdy zawartość zrówna się z kontenerem, nie będziemy mogli zobaczyć żadnych efektów pozycjonowaniaalign-content
. Dopiero gdy mamy dodatkową przestrzeń wzdłuż osi poprzecznej, zaczynamy widzieć jej efekt: wyrównuje zawartość względem granic kontenera nadrzędnego.Warunek 2 pomaga mi wizualizować efekty
align-items
: wyrównuje elementy względem siebie.Oto przykład kodu. Surowce pochodzą z samouczka Wes Bos CSS Grid (21. Flexbox vs. CSS Grid)
Przykład 1 : Zawęź obszar wyświetlania, aby zawartość była równo z kontenerem. Dzieje się tak, gdy
align-content: flex-start;
nie ma żadnych efektów, ponieważ cały blok zawartości jest ściśle dopasowany do pojemnika (brak dodatkowego miejsca na zmianę położenia!)Zwróć także uwagę na drugi rząd - zobacz, jak elementy są wyśrodkowane względem siebie.
Przykład 2 : Gdy poszerzamy obszar wyświetlania, nie mamy już wystarczającej zawartości, aby wypełnić cały pojemnik. Teraz zaczynamy widzieć efekty
align-content: flex-start;
--it wyrównuje zawartość względem górnej krawędzi kontenera.Te przykłady oparte są na Flexboksie, ale te same zasady dotyczą siatki CSS. Mam nadzieję że to pomoże :)
źródło
Sprawdziłem je w przeglądarce.
align-content
może zmienić wysokość linii dla kierunku wiersza lub szerokość kolumny, gdy jej wartość jest rozciągnięta, lub dodać puste miejsce między liniami lub wokół nich dlaspace-between
,space-around
,flex-start
,flex-end values
.align-items
może zmienić wysokość lub pozycję elementów w obszarze linii. Gdy przedmioty nie są zawinięte, mają tylko jedną linię, której obszar jest zawsze rozciągnięty do obszaru pola elastycznego (nawet jeśli elementy się przepełniają) ialign-content
nie ma wpływu na pojedynczą linię. Nie ma to więc wpływu na przedmioty, które nie są zawinięte ialign-items
mogą jedynie zmieniać ich położenie lub rozciągać je, gdy wszystkie znajdują się w jednej linii.Jeśli jednak są owinięte, w każdej linii znajduje się wiele wierszy i przedmiotów. A jeśli wszystkie elementy każdej linii mają tę samą wysokość (dla kierunku wiersza), wysokość linii będzie równa wysokości tych elementów i nie zobaczysz żadnego efektu po zmianie
align-items
wartości .Jeśli więc chcesz wpłynąć na elementy,
align-items
kiedy elementy są owinięte i mają tę samą wysokość (dla kierunku wiersza), najpierw musisz użyćalign-content
wartości rozciągania, aby powiększyć obszar linii.źródło
wyrównaj zawartość
align-content
kontroluje pozycję osi poprzecznej (tj. kierunek pionowy, jeśliflex-direction
jestrow
, i poziomą, jeśliflex-direction
jestcolumn
), pozycjonowanie wielokrotności linii względem siebie.(Pomyśl o liniach akapitu rozłożonego pionowo, ułożonych w górę, ułożonych w dół. Jest to
flex-direction
paradygmat rzędu).wyrównaj elementy
align-items
kontroluje oś poprzeczną pojedynczej linii elementów giętkich.(Pomyśl, w jaki sposób wyrównana jest pojedyncza linia akapitu, jeśli zawiera ona trochę normalnego tekstu i jakiś wyższy tekst, taki jak równania matematyczne. W takim przypadku będzie to dolna, górna lub środkowa część każdego rodzaju tekstu w linii, która będzie być wyrównany?)
źródło
Czego nauczyłem się z każdej odpowiedzi i odwiedzając blog
flex-direction: row
flex-direction: column
align-content jest dla wiersza, działa, jeśli kontener ma (więcej niż jeden wiersz) właściwości align-content
align-items jest dla pozycji w wierszu Właściwości align-pozycji
Więcej informacji na temat wizyty w flex
źródło
Główna różnica polega na tym, że wysokość elementów nie jest taka sama! Następnie możesz zobaczyć, jak w wierszu wszystkie są na środku \ end \ start
źródło
zgodnie z tym, co rozumiałem stąd :
podczas korzystania z elementu wyrównywania lub justowania element dopasowuje „zawartość wewnątrz elementu siatki odpowiednio wzdłuż osi kolumny lub osi wiersza.
Ale: jeśli używasz align-content lub justify-content, ustawiasz pozycję siatki wzdłuż osi kolumny lub osi wiersza. pojawia się, gdy masz siatkę w większym pojemniku, a szerokość lub wysokość są nieelastyczne (przy użyciu px).
źródło