Показать сообщение отдельно
  #1 (permalink)  
Старый 29.06.2010, 16:03
Аспирант
Отправить личное сообщение для uonax Посмотреть профиль Найти все сообщения от uonax
 
Регистрация: 13.07.2009
Сообщений: 38

Chrome, Safari и размер view-порта с абсолютно позиционируемыми элементами
Пытаюсь найти кроссбраузерное решение, позвояющее определить размеры view-порта.
Определил, что нужный результат дают значения
var Width=document.documentElement.scrollWidth;
var Height=document.documentElement.scrollHeight;

Этот способ всегда даёт корректный результат.

Но этот способ даёт сбой в браузерах GoogleChrome и Safari, когда на странице есть элементы со свойством position:absolute; Если задать для элемента свойство position:absolute; и с помощью top и left расположить элемент далеко влево или вправо (например, задав большие значения top=3000 и left=2000), то в этих браузерах view-порт не увеличивается. В других же браузерах, таких как IE, Firefox, Opera view-порт увеличится таким образом, что будет содержать в себе этот элемент.

Помогите найти кроссбраузерное решение, учитывающее этот случай. В разметке может возникнуть ситуация, когда элементы имеют позиционирование position:absolute;, а тогда в браузерах GoogleChrome и Safari мы получим совсем не тот размер view-порта.

Для примера я привожу html-код, с помощью которого я тестирую различные значения.

Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   <meta http-equiv="Content-Language" content="ru" />
   <meta http-equiv="Content-Style-Type" content="text/css" />
   <title></title>
   <style type="text/css" media="all">

      * {padding:0; margin:0;}
      html, body, div, p, span, a, table, tbody, tr, td, label, img, ul, li, ol {border:0;}
	html {background-color:blue;}
	body {background-color:olive;}

     #the_image1
     {
          margin:5px;
          position:absolute;
          top:10px;
          left:950px;
     }

     #the_image2
     {
          margin:5px;
          position:absolute;
          top:1500px;
          left:1250px;
     }

     #the_image3
     {
          position:absolute;
          top:1400px;
          left:850px;
     }

   </style>

     <script type="text/javascript">

          function tipShow()
          {

				var cX1=document.documentElement.scrollWidth;
				var cY1=document.documentElement.scrollHeight;
				var cX2=document.body.clientWidth;
				var cY2=document.body.clientHeight;
				var cX3=document.body.offsetWidth;
				var cY3=document.body.offsetHeight;
				var cX4=window.offsetHeight;
				var cY4=window.offsetWidth;
				alert("document.documentElement.scrollWidth/Height = " + cX1 + "x" + cY1 + " document.body.clientWidth/Height = " + cX2+ "x" + cY2 + " document.body.offsetWidth/Height = " + cX3 + "x" + cY3 + " window.offsetHeight/Width= " + cX4+ "x" + cY4 );

		}


     </script>
</head>
<body>

<br />
text
<br />
text
<br />
text


<img id="the_image1" onclick="tipShow();" width="100" src="1.gif" />

<img id="the_image2" onclick="tipShow();" width="100" src="1.gif" />

<img id="the_image3" onclick="tipShow();" width="100" src="1.gif" />

<br />
text
<br />
text
<br />
text
<br />
text
<br />
text
<br />
text
<br />
text
<br />
text
<br />
text
<br />
text
<br />
text
<br />
text
<br />
text
<br />
text
<br />
text
<br />
text
<br />
text
</body>
</html>
Здесь элементы #the_image2 и #the_image3 абсолютно спозиционированы и визуально находятся вне тега body. В браузерах GoogleChrome и Safari view-порт с помощью document.documentElement.scrollWidth; и document.documentElement.scrollHeight; определяется неправильно.
Нормальное зачение view-порта в остальных браузерах составляет 1355х1588.
Ответить с цитированием