На рисунке показано, что в Mozilla div увеличился и вышел за пределы страницы, полоса прокрутки в нём не появилась. В остальных браузерах элемент отображается правильно. Код страницы выглядит так:
<body>
<table width="100%" height="100%">
<tr>
<td></td>
<td width="300">
<div id="d1" style="width: 100%; height: 100%; overflow: auto; border: solid;">
Большой текст или большой дочерний элемент.
</div>
</td>
</tr>
</table>
</body>
Я долго искал решение в CSS, но не нашёл. Поэтому пришлось решать проблему через JavaScript. В моём случае было несколько div с обозначенной проблемой, поэтому код написан для любого количества элементов:
//Массив с id элементов, размер которых нужно контролировать
var resizes = new Array("d1", "d2", "d3");
//Функция для правильного изменения размеров
function AutoSize()
{
if(IsMozilla())
{
//Два цикла нужны для корректного изменения размеров
//В противном случае элементы растягивают друг друга
for (var i = 0; i < resizes.length; i++)
{
var obj = document.getElementById(resizes[i]);
obj.style.height = '1px';
}
for (var i = 0; i < resizes.length; i++)
{
var obj = document.getElementById(resizes[i]);
obj.style.height = obj.parentNode.offsetHeight;
}
}
}
//Функция для определения того, что сайт запущен в Mozilla
function IsMozilla()
{
var brow = navigator.userAgent.toLowerCase();
return (brow.indexOf("gecko") >= 0 && brow.indexOf("chrome") < 0 && brow.indexOf("safari") < 0);
}
Функцию AutoSize нужно вызвать при загрузке страницы и изменении её размера:
<body onLoad="AutoSize();" onResize="AutoSize();">
Пока с этим кодом у меня никаких проблем не было. Всё исправно работает.

Комментариев нет:
Отправить комментарий