Відповіді:
align-items
Властивість гнучкою коробки вирівнює елементи всередині гнучкої контейнера вздовж поперечної осі так само , як це justify-content
робить уздовж головної осі. (За замовчуванням flex-direction: row
поперечна вісь відповідає вертикальній, а головна вісь відповідає горизонтальній. З flex-direction: column
цими двома змінюються відповідно).
Ось приклад того, як align-items:center
виглядає:
Але align-content
призначений для гнучких коробок для ліній. Це не впливає, коли елементи знаходяться в одному рядку. Він вирівнює всю структуру відповідно до її значення. Ось приклад для align-content: space-around;
:
А ось як align-content: space-around;
з align-items:center
зовнішністю:
Зверніть увагу, що 3-е поле та всі інші поля в першому рядку змінюються вертикально по центру в цьому рядку.
Ось декілька посилань на кодек для гри:
http://codepen.io/asim-coder/pen/MKQWbb
http://codepen.io/asim-coder/pen/WrMNWR
Ось надзвичайно крута ручка, яка показує та дозволяє грати майже з усім, що знаходиться у флексі.
align-*
властивості також можуть зміщувати гнучкі елементи горизонтально. Це залежить від flex-direction
. stackoverflow.com/q/32551291/3597276
Я вважаю приклад http://flexboxfroggy.com/ дуже корисним.
Це займе у вас 10-20 хвилин, і на рівні 21 ви знайдете відповідь на своє запитання. У ньому згадувалося:
Вирівнювання вмісту визначає інтервал між рядками, тоді як елементи вирівнювання визначають, як елементи в цілому вирівнюються в контейнері. Коли є лише один рядок, вирівнювання вмісту не впливає
По-перше, align-items
це для предметів в одному ряду. Таким чином , для одного ряду елементів на головній осі , align-items
буде погоджувати ці елементи відповідних один від одного , і вона буде починатися з новою точкою зору з наступного ряду.
Тепер align-content
не заважає елементам підряд, а самим рядкам . Отже, align-content
спробуємо вирівняти рядки відносно один одного і розгорнути контейнер.
Перевірте цю загадку: https://jsfiddle.net/htym5zkn/8/
У мене була така ж плутанина. Після деякого роздумування, заснованого на багатьох відповідях вище, я нарешті бачу відмінності. На мою скромну думку, відмінність найкраще демонструється з гнучким контейнером, який задовольняє наступним двом умовам:
min-height: 60rem
) і тому може стати занадто високим для свого вмістуУмова 1 допомагає зрозуміти, що content
означає його батьківський контейнер. Коли вміст буде наповнений контейнером, ми не зможемо побачити жодних ефектів позиціонування, що надходять від цього align-content
. Лише коли у нас є додатковий простір уздовж поперечної осі, ми починаємо бачити його ефект: він вирівнює вміст відносно меж батьківського контейнера.
Умова 2 допомагає мені візуалізувати ефекти align-items
: вона вирівнює елементи відносно один одного.
Ось приклад коду. Сировина надходить з підручника CSS Grid Wes Bos (21. Flexbox vs. CSS Grid)
<div class="flex-container">
<div class="item">Short</div>
<div class="item">Longerrrrrrrrrrrrrr</div>
<div class="item">💩</div>
<div class="item" id="tall">This is Many Words</div>
<div class="item">Lorem, ipsum.</div>
<div class="item">10</div>
<div class="item">Snickers</div>
<div class="item">Wes Is Cool</div>
<div class="item">Short</div>
</div>
.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;
}
Приклад 1 : Давайте звузимо вікно перегляду, щоб вміст переповнювався контейнером. Це коли align-content: flex-start;
не має ефектів, оскільки весь блок вмісту щільно помістився всередині контейнера (немає зайвого місця для перестановки!)
Також зверніть увагу на 2-й ряд - подивіться, як елементи розташовуються по центру між собою.
Приклад 2 : Коли ми розширюємо область перегляду, у нас більше не вистачає вмісту, щоб заповнити весь контейнер. Тепер ми починаємо бачити ефекти align-content: flex-start;
- він вирівнює вміст відносно верхнього краю контейнера.
Ці приклади засновані на flexbox, але ті ж принципи застосовні і до CSS-мережі. Сподіваюся, це допомагає :)
Ну я їх оглядав у своєму браузері.
align-content
може змінити висоту лінії в напрямку рядка для ширини або для стовпця , коли це значення дорівнює розтягнути, або додати порожній простір між або навколо ліній space-between
, space-around
, flex-start
, flex-end values
.
align-items
може змінювати висоту або розташування елементів у межах лінії. Якщо елементи не загорнуті, у них є лише один рядок, його область завжди розтягується до області гнучких вікон (навіть якщо елементи переповнюються) і align-content
не впливає на один рядок. Таким чином, це не впливає на елементи, які не загорнуті, і лише вони align-items
можуть змінювати положення предметів або розтягувати їх, коли всі вони знаходяться в одному рядку.
Однак якщо вони загорнуті, у вас є кілька рядків та елементів у кожному рядку. І якщо всі елементи кожного рядка мають однакову висоту (для напрямку рядка), то висота рядка буде дорівнює висоті цих елементів, і ви не помітите жодного ефекту, змінивши align-items
значення.
Тож якщо ви хочете впливати на елементи, align-items
коли ваші предмети загорнуті та мають однакову висоту (для напрямку рядка), спочатку вам слід скористатися align-content
значенням розтягування, щоб розширити область рядків.
вирівняти зміст
align-content
керує поперечною віссю (тобто вертикальним напрямком, якщо flex-direction
є row
, і горизонтальним, якщо flex-direction
є column
) розташуванням декількох ліній відносно один одного.
(Подумайте, що рядки абзацу розташовані вертикально, складені до верху, складені донизу. Це під flex-direction
парадигмою рядків).
вирівнювати-елементи
align-items
керує поперечною віссю окремої лінії згинальних елементів.
(Подумайте, як вирівнюється окремий рядок абзацу, якщо він містить якийсь звичайний текст та якийсь більш високий текст, як математичні рівняння. У цьому випадку це буде нижній, верхній чи центр кожного типу тексту в рядку, який буде вирівняти?)
Що я дізнався з кожної відповіді та відвідавши блог
що таке поперечна вісь і головна вісь
flex-direction: row
flex-direction: column
Тепер вирівнюйте вміст і вирівнюйте елементи
align-content призначений для рядка, він працює, якщо контейнер має (більш ніж один рядок) властивості align-content
.container {
align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch | start | end | baseline | first baseline | last baseline + ... safe | unsafe;
}
align-items - це для елементів у рядку Властивості елементів вирівнювання
.container {
align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end + ... safe | unsafe;
}
Для більш довідкового візиту до флексу
відповідно до того, що я зрозумів звідси :
коли ви використовуєте елемент вирівнювання або елемент виправдання, ви коригуєте "вміст всередині елемента сітки відповідно до осі стовпця або осі рядка.
Але: якщо ви використовуєте вирівнювання вмісту або виправдання, ви встановлюєте розташування сітки уздовж осі стовпця або осі рядка. це відбувається, коли у вас є сітка в більшому контейнері, а ширина або висота негнучкі (використовуючи px).