Подтвердить что ты не робот

Определение максимальной возможной высоты DIV

Есть ли рекомендуемый способ определения максимальной высоты, которую может установить DIV и оставаться видимым для каждого браузера? Это, как представляется, не документировано нигде и имеет особую специфику реализации.

Например, см. следующий тест script:

http://jsfiddle.net/NP5Pa/2/

Это простой тест, чтобы найти максимальное значение, которое вы можете установить атрибут высоты стиля DIV до того, как соответствующий элемент clientHeight элемента станет 0. Вы можете подтвердить это, нажав "Найти Макс", а затем увеличив найденную высоту на 1 и нажмите "Установить высоту".

Некоторые примеры (Win7/64):

Chrome (14.0) :    134,217,726 px
Safari (5.1)  :    134,217,726 px
IE (9.0)      :     10,737,418 px
FF (7.0.1)    :     17,895,697 px

Не удивительно, что WebKit дает тот же результат, я думаю - более удивительно, что IE и FF настолько различны.

Есть ли лучший способ? И вы получаете разные результаты в 32-битных системах?

- РЕДАКТИРОВАТЬ: обновить скрипку, чтобы она остановилась на 10 000 000 000 (и быстрее туда) для Opera. Это много пикселей.

4b9b3361

Ответ 1

Это ваш код, измененный для использования бинарного поиска (так что он намного быстрее).

http://jsfiddle.net/thai/zkuGv/4/

Он начинается с 1 пикселя и удваивает его размер до тех пор, пока он не достигнет максимума (я использую 2 53 который является самым большим целым, которое может быть сохранено в JavaScript без потери точности и сделает двоичный search buggy), или div сворачивается в нулевой пиксель.

Предположим, что мы устанавливаем div в размер h, и он исчезает, тогда максимальный размер должен быть между h/2 и h. Мы получаем двоичный поиск оттуда для высоты h, которая не приводит к исчезновению div при установке на высоту h, но исчезает при установке на h + 1.

Тогда мы можем прийти к выводу для Opera: 2147483583 пикселей.

Ответ 2

Мне интересно, действительно ли эта проблема имеет значение, если вы задаете тело, высота html до 100%, чтобы документ по умолчанию был высотой области просмотра, поэтому максимальная высота div будет высотой окна просмотра, если вы установите его на 100% высоты. Просто мысль...

Ответ 4

Здесь попробуйте следующее: http://jsfiddle.net/serkanyersen/yNfuX/

Он будет уважать родительские атрибуты заполнения и поля. Когда вы нажимаете кнопку MAX, DIV будет расширяться до большинства доступных мест. Я уверен, что вы можете преобразовать это в соответствии с вашими потребностями.

На самом деле это должно быть рекурсивным, начиная от самого себя до самого верха, но у меня не было времени реализовать это.

ПРИМЕЧАНИЕ. Попробуйте изменить размер страницы и раскомментируйте родительский DIV, чтобы увидеть, как он полностью работает.