то прекрасно работает везде, кроме Сафари, в котором отсутствует скролл и меню разворачивается за пределы экрана.
Гугол показал, что проблема overflow в Сафари присутствует давно, не работает без position: relative; и обнаруживает себя в зависимости от других свойств в окружении.
Могу заставить правильно обрабатывать overflow, обернув меню в доп. див relative и задав ему в стилях жёсткую высоту в пикселях. Но жалко красотой жертвовать.
Скорее всего нормального хака не существует. Я вообще не припоминаю для вебкит хотя бы одного хака (хитрые css3 селекторы — это не хаки). А каким образом вам поможет хак, если проблема решается всякими лишними дивами? К слову, в нашей стране доля браузеров, не поддерживающих calc сильно больше доли сафари.
Ну дык ИЕ 8 и ниже я уже давно не учитываю в большинстве проектов. В ИЕ 9 и выше calc работает при соблюдении определённых несложных условий. В старых Андроидах тоже обходится.
А для Сафари пришлось писать спец. скрипт