Прежде всего ... это работает, только не так как вы ожидали. CSS top:calc(50% - 2.5em)
, относится к первому элементу предка POSITIONED. В вашем случае это относительный (родительский) элемент с id="menu"
. Высота этого элемента равна 0. Поэтому он работает так, как должен, но не так, как вы ожидали.
Возможно, вы ожидали, что меню имеет определенную высоту. Это не так, потому что его единственный дочерний элемент (div-menu-div) позиционируется как абсолютный. Абсолютные позиционированные элементы не растут родителями.
Скорее всего, вы ожидали, что заголовок будет располагаться относительно высоты окна просмотра, а не относительно его родителя.
Есть три способа позиционируют в меню заголовок относительно высоты видового экрана:
Решения 1. Удалите относительное позиционирование от родительского
Это делают родитель положение статическое (не позиционируется), а первый позиционированный элемент предка становится окном просмотра. Видовой порт имеет прирост по 100%. Поэтому это решение работает.Рабочий пример этого решения можно найти здесь: http://codepen.io/anon/pen/bBLZva
Решения 2. Дайте родительские 100% высоты
При удалении относительного позиционирования от предка (ов) не вариант, вы можете дать родительская высота 100%. Это, однако, не является прямой задачей. Просто добавить CSS height: 100%
к родительскому недостаточно. Высота меню div зависит от высоты его родительского элемента, а не от высоты окна просмотра. Поэтому вам нужно явно установить родительские настройки на 100% (высота видового экрана). Этого можно добиться, добавив: body,html {height: 100%;}
в CSS. Рабочий пример этого решения можно найти здесь: http://codepen.io/anon/pen/XNZGOv
Решения 3. Используйте положение фиксированного
Знайте, что position: fixed
принципиально отличается от position: absolute
и имеет проблемы совместимости на старых прошивке и Android версии (акции браузер) , Однако это МОЖЕТ привести к ожидаемому поведению. Это можно объяснить тем, что «position: fixed» подразумевает позиционирование относительно окна просмотра (а не для родителя). Вы должны использовать позицию, зафиксированную на самом титуле. Рабочий пример этого решения можно найти здесь: http://codepen.io/anon/pen/PbQgpB
A) Ваше объявление 'top:' дважды, чтобы первая была перезаписана. B) С помощью функции 'calc()' вы также перемещаете элемент вверх на 2,5 метра (с вертикального центра) .... так что он отключен от видового экрана. Кажется, все работает так, как вы его написали. – Scott
Проблема в том, что css не знает, какова высота родителя. Итак ... 50% чего? –
@Scott Два равных свойства в строке, вторая из которых имеет значение «calc» для значения, на самом деле вполне нормально; на самом деле это рекомендуется для обратной совместимости. –