Эта проблема описана в спецификации CSS 2.1 :
Указывает процентную высоту.Процент рассчитывается относительно высоты содержащего блока сгенерированного блока.Если высота содержащего блока не указана явно (т. Е. Зависит от высоты содержимого), и этот элемент не является абсолютно позиционированным, значение вычисляется как 'auto'.Процентная высота корневого элемента относительно исходного содержащего блока.Примечание. Для абсолютно позиционированных элементов, чей содержащий блок основан на элементе уровня блока, процент рассчитывается относительно высоты поля заполнения этого элемента.Это изменение по сравнению с CSS1, где процент всегда вычислялся по отношению к блоку содержимого родительского элемента.
Итак, для пояснения, процентная высота будет ссылаться на высоту содержащего его блока (если это не position: absolute
или position: fixed
).Если этот содержащий блок не имеет заданной высоты, то процент будет относиться к auto
, и он не будет на самом деле много.
position: absolute
меняет ссылочный содержащий блок на ближайший позиционированный (*Элемент 1020 *, relative
или fixed
).
position: fixed
заменяет содержащий блок, на который есть ссылка, на область просмотра.
Таким образом, если вы задаете высоту для содержащего блока,укажите положение, отличное от статического, в вашем содержащем блоке, или не возражайте против использования области просмотра в качестве содержащего блока, тогда вы можете эффективно использовать процентную высоту.
Пожалуйста, посмотрите мою демонстрацию на jsFiddle