Розглянемо головну вісь і поперечну вісь гнучких контейнерів:
Джерело: W3C
Щоб вирівняти гнучкі елементи по головній осі, є одна властивість:
Для вирівнювання гнучких елементів по поперечній осі є три властивості:
На зображенні вище головна вісь горизонтальна, а поперечна вісь - вертикальна. Це типові вказівки flex-контейнера.
Однак ці вказівки можна легко змінити із flex-directionвластивістю.
/* main axis is horizontal, cross axis is vertical */
flex-direction: row;
flex-direction: row-reverse;
/* main axis is vertical, cross axis is horizontal */
flex-direction: column;
flex-direction: column-reverse;
(Поперечна вісь завжди перпендикулярна до головної осі.)
Моя думка в описі того, як працюють осі, полягає в тому, що в жодному напрямку не здається нічого особливого. Основна вісь, поперечна вісь, вони обидві за рівнем важливості і flex-directionполегшують перемикання вперед і назад.
То чому поперечна вісь отримує два додаткові властивості вирівнювання?
Чому align-contentі align-itemsоб'єднані в одну властивість для головної осі?
Чому головна вісь не отримує justify-selfвластивості?
Сценарії, де ці властивості були б корисні:
розміщення гнучких предметів у куті гнучких контейнерів
#box3 { align-self: flex-end; justify-self: flex-end; }зробити групу гнучких елементів вирівняти праворуч (
justify-content: flex-end), але перший елемент вирівняти ліворуч (justify-self: flex-start)Розглянемо розділ заголовка з групою елементів навігації та логотипом. З
justify-selfлоготипом можна вирівняти ліворуч, а елементи навігації залишаються вправо, і вся рівномірне налаштування ("згинається") під різні розміри екрана.в ряд з трьох гнучких елементів прикріпіть середній елемент до центру контейнера (
justify-content: center) і вирівняйте сусідні елементи до країв контейнера (justify-self: flex-startіjustify-self: flex-end).Зверніть увагу , що значення
space-aroundіspace-betweenнаjustify-contentмайно не буде тримати середній елемент в центрі навколо контейнера , якщо сусідні елементи мають різну ширину.
На момент написання статті, немає жодної згадки justify-selfабо justify-itemsв Flexbox специфікації .
Однак у модулі вирівнювання коробки CSS , який є незавершеною пропозицією W3C встановити загальний набір властивостей вирівнювання для використання у всіх моделях коробки, є таке:
Джерело: W3C
Ви помітите, що justify-selfі justify-itemsвас розглядають ... але не для flexbox .
Я закінчу ще раз, повторивши головне питання:
Чому немає властивостей "justify-items" та "justify-self"?
justify-content: flex-start, тому предмети переповнені на початку, як | abcd |. Що б ви очікували від цього, якщо ви поставите там justify-self: [anything]пункт "b"?)
justify-selfпрацювати на флекс-елемент? Я б сказав, не так інакше, ніж autoнадбавки вже працюють на гнучких предметах. У вашому другому прикладі, justify-self: flex-endпункт d перемістить його в крайній край. Це саме по собі було б чудовою особливістю, яку autoможна зробити вже на полях. Я поставив відповідь з демонстрацією.
justify-contentі justify-selfвказано, щоб випадки з конфліктами (як сценарії, про які я запитував) чітко і чітко визначені. Як я зазначив у своїй відповіді тут, йдеться{justify|align}-self про вирівнювання елементів у більшому полі, розміром якого є незалежне від {justify|align}-selfзначення, - а в головній осі немає такого поля, для якого вирівнюватиметься гнучкий елемент.
justify-selfта justify-contentчи взаємодіяли б у випадках, коли вони конфліктують (як сценарії, які я виклав). Автоматичні націнки просто взагалі не взаємодіють justify-content- вони вкрадають увесь пробірний простір, перш ніж justify-contentотримують можливість його використовувати. Отже, автоматичні поля не є дуже хорошим аналогом того, як це буде працювати.



















justify-selfпрацювати на гнучкий предмет? Припустимо, у вас є елементи a, b, c, d з додатковим простором для розповсюдження навколо них, а контейнер flex маєjustify-content: space-between, тому вони закінчуються як | abcd |. Що би означало додати, наприклад,justify-self: centerабо "виправдати себе": "flex-end" просто до пункту "b"? Куди б ви очікували, що це піде? (Я бачу деякі демонстрації в одній з відповідей тут, але я не бачу чіткого способу, як це працювало б взагалі.)