Ответ 1
Итак, сначала у вас есть стандарты W3C, которые представляют собой набор рекомендаций для разработчиков браузеров.
И тогда у вас есть производители браузеров, которые могут делать все, что захотят (о чем свидетельствует история отклонений Internet Explorer).
В частности, с высотой процента CSS, в браузерах есть явные различия в поведении.
Вы отправили один пример. Здесь другое:
Процент высоты в Flexbox: Chrome/Safari против Firefox/IE
При работе с flexbox, Chrome и Safari разрешают проценты высот на элементах flex на основе значения родительского свойства height
. Firefox и IE11/Edge определяют приоритетность родительской высоты.
Похоже, браузеры Webkit придерживаются более традиционной интерпретации спецификации:
процент
Определяет процентную высоту. Процент вычисляется относительно высоты генерируемого блока, содержащего блок. Если высота содержащего блока явно не указана, и этот элемент не является абсолютно позиционированным, значение вычисляется как "авто".auto
Высота зависит от значений других свойств.
Другими словами, для процентной высоты для работы с дочерним потоком родитель должен иметь заданную высоту.
Это традиционная интерпретация спецификации: Термин "высота" означает значение свойства height
. Мое собственное мнение состоит в том, что этот язык является неопределенным и открытым для интерпретации, но требование свойства height
стало преобладающей реализацией. Я никогда не видел min-height
или max-height
работы с родителем при работе с процентными значениями.
Примеры Firefox и IE с использованием родительской высоты гибкости в качестве ссылки для процентной высоты ребенка:
- Chrome игнорирует гибкую основу в макете столбцов
- Chrome/Safari не заполняет 100% высоту гибкого родителя
- Неверная высота в flexbox элементах в Chrome
- Flexbox в Chrome - как ограничить размер вложенных элементов?
Знание того, какие браузеры соответствуют спецификации, немного сложно, потому что, как я уже упоминал ранее, язык спецификации кажется неопределенным и открытым для интерпретации.
С последним обновлением этой части определения в 1998 году (CSS2) и появлением новых форм высоты таких как высота гибкого диска, обновление кажется слишком запоздалым.
Я думаю, справедливо сказать, что когда дело доходит до процентных высот, пока определение спецификации не получит обновление, вы можете ожидать различия рендеринга между браузерами.
Альтернативные решения
Вот две альтернативы, которые следует учитывать, если требуется, чтобы дочерний элемент принял родительскую полную высоту.
-
Применить
display: flex
к родительскому. Это автоматически устанавливаетalign-items: stretch
, в котором дочерний элемент будет раскрывать полную доступную высоту родителя. -
Примените
position: relative
к родительскому иposition: absolute; height: 100%; width: 100%
к дочернему. При абсолютном позиционировании процентная высота будет работать без определенной высоты родительского элемента.