Оновлення вересня 2020 року
FireFox та edge реалізували поведінку за специфікаціями, а margin + padding для елементів flex розраховуються відповідно до ширини блоку, що містить.
Так само, як елементи блоку.
Оновлення лютого 2018 року
Firefox та edge домовились змінити свою поведінку на верхньому, нижньому полі та відступі для елементів flex (та сітки):
[...], наприклад, відсотки ліворуч / праворуч / зверху / знизу всі роздільні за розмірами, що містять ширину блоку, у горизонтальних режимах запису. [ джерело ]
Це ще не реалізовано (протестовано на FF 58.0.2).
Оновлення квітня 2016 р
( продовжує діяти у травні 2017 року )
Характеристики оновлено до:
Відсотки полів та відступів для гнучких елементів можна вирішити щодо:
- власну вісь (відсотки ліворуч / праворуч вирішуються щодо ширини, верхнє / нижнє - щодо висоти), або,
- вбудована вісь (відсотки ліворуч / праворуч / зверху / знизу - усі роздільні за шириною)
джерело: CSS Модуль гнучкого розміщення коробки Рівень 1
Це означає, що chrome IE FF та Edge (навіть якщо вони не мають однакової поведінки) відповідають рекомендаціям специфікацій.
Технічні характеристики також говорять:
Авторам слід уникати використання відсотків у відступах або полях для елементів flex, оскільки вони матимуть різну поведінку в різних браузерах. [ джерело ]
Попрацюйте:
Ви можете обернути першу дочірню частину флекс-контейнера іншим елементом і надіти padding-bottom
другу:
#flexBox {
border: 1px solid red;
width: 50%;
margin: 0 auto;
padding: 1em;
display: flex;
flex-direction: column;
}
#text {
border: 1px solid green;
padding: .5em;
}
#padding {
margin: 1em 0;
border: 1px solid blue;
}
#padding > div {
padding-bottom: 56.25%;
}
<div id='flexBox'>
<div id='padding'><div></div></div>
<div id='text'>Some text</div>
</div>
Я перевірив це в сучасних браузерах (IE, chrome, FF та Edge), і всі вони мають однакову поведінку. Оскільки конфігурація другої дочірньої дитини є "такою ж, як зазвичай", я припускаю, що старіші браузери (які також підтримують модуль макета flexbox ) відображатимуть той самий макет.
Попередня відповідь:
Відповідно до специфікацій , Firefox має правильну поведінку
Пояснення:
На відміну від елементів блоку, які обчислюють свій% поля / заповнення відповідно до ширини контейнерів, для елементів flex:
Відсоткові поля та відступи на гнучких елементах завжди визначаються відповідно до їх відповідних розмірів; на відміну від блоків, вони не завжди вирішують проти вбудованої розмірності їх блоку, що містить.
джерело dev.w3.org
Це означає, що padding-bottom / top та margin-bottom / top обчислюються відповідно до висоти контейнера, а не ширини, як у макетах non-flexbox.
Оскільки ви не вказали жодної висоти для елемента батьківського гнучкого елемента, нижнє заповнення дочірнього елемента має становити 0px.
Ось скрипка з фіксованою висотою на батьківщині, яка показує, що дно прокладки обчислюється відповідно до висоти display:flex;
контейнера.