Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ПРоблема с clientHeight в Сафари (https://javascript.ru/forum/misc/3389-problema-s-clientheight-v-safari.html)

art-danilov 15.04.2009 10:46

ПРоблема с clientHeight в Сафари
 
Дано: document.getElementById('center').clientHeight = 885пикс - во всех браузерах, кроме сафари, в сафари - 1226 пикс.

Собственно, вопрос - почему так и как такое можно исправить??

(забыл сказать - это <div id="center">)

(за 30 сек решение в инете не нашел :-D)

Riim 15.04.2009 11:09

А clientHeight у всего документа правильный?

Если так, то используя clientHeight документа, scrollTop документа и offsetHeight вашего элемента можно вычислить его реальный clientHeight.

art-danilov 15.04.2009 11:14

Цитата:

Сообщение от Riim (Сообщение 16639)
А clientHeight у всего документа правильный?

Если так, то используя clientHeight документа, scrollTop документа и offsetHeight вашего элемента можно вычислить его реальный clientHeight.

у всего документа не проверял, но заметил вот что - если ID таблицы писать, то все браузеры показывают одну и ту же "правильную" высоту, для дива почему-то криво, в гугле вчера было всё норм, сегодня уже он показывает то же, что и сафари :D глюки что ли?:))

art-danilov 15.04.2009 11:20

черт, наверное, проще объяснить проблему: если три колонки(div) - они флоат лефт, задача: узнать какая из колонок длиннее и выровнять остальные 2 по ней... во всех браузерах кроме сафари и хрома всё ок...

текущий скрипт:

<script type="text/javascript">
	divHeight = new Array(3);
	divHeight[0] = document.getElementById('left').clientHeight;
	divHeight[1] = document.getElementById('center').clientHeight;
	divHeight[2] = document.getElementById('right').clientHeight;
	var max_num = divHeight[0];
	for (i=0; i<3; i++) {
		if (divHeight[i] > max_num) { max_num = divHeight[i]; }
		alert(i + '->' + divHeight[i]);
	}
	alert(max_num); 
	for (i=0; i<3; i++) {
		if(divHeight[i] <= max_num) divHeight[i] = max_num - divHeight[i];
		alert(i + '->' + divHeight[i]);
	}
	document.getElementById('left').style.height = document.getElementById('left').clientHeight + divHeight[0] + 'px';
	document.getElementById('center').style.height = document.getElementById('center').clientHeight + divHeight[1] + 'px';
	document.getElementById('right').style.height = document.getElementById('right').clientHeight + divHeight[2] + 'px'; 
</script>


лефт, сентер, райт - это эти дивы.


P.S. Алерты как раз и показывают разницу в вычислениях.
Есть соображения?

Riim 15.04.2009 11:28

У вас решение явно усложненное. Много лишнего. Посмотрите здесь: http://tvarb.habrahabr.ru/blog/56772/

art-danilov 15.04.2009 11:36

у меня написано в принципе то же, только другими словами... но у него OffsetHeight - оно везде нормально работает?


Проверил с оффсетхеит - показания те же :(

art-danilov 15.04.2009 15:23

Проблема решилась сама собой совершенно случайно, когда я хотел подключить файл с другим скриптом.
написал
<script type="text/javascript" src=""></script>

(с пустым СРЦ) и clientHeightстал считаться правильно и в сафари и в хроме... собственно, теперь возник вопрос - в чем косяк в этих браузерах?


Часовой пояс GMT +3, время: 11:21.