Лучшая практика для позиционирования абсолютно позиционированных элементов при изменении размера окна - PullRequest
1 голос
/ 09 марта 2010

У меня есть много элементов абсолютно на моей странице. Каков наилучший метод повторной настройки его положения при изменении размера окна (все они)?

Ответы [ 2 ]

3 голосов
/ 09 марта 2010

Я бы посоветовал сделать это с помощью CSS и избегать JavaScript, если это возможно. Поэтому избегайте абсолютного позиционирования, когда это возможно, и при позиционировании абсолютно используйте процентные значения, а не значения пикселей, где это возможно, используйте right вместо left, когда при позиционировании элементов вы хотите закрепить право, используйте bottom вместо top при позиционировании элементов. вы хотите привязать его к нижней части и т. д. и т. д. Например: пусть браузер справится с этим за вас.

Пример:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Resize Demo Page</title>
<style type='text/css'>
body {
    font-family: sans-serif;
}
#anchorRight {
    position: absolute;
    right: 0px;
    top: 20%;
    border: 1px solid black;
}
#anchorBottom {
    position: absolute;
    bottom: 0px;
    left:  20%;
    border: 1px solid black;
}
#anchorBoth {
    position: absolute;
    right: 0px;
    bottom: 0px;
    border: 1px solid black;
}
</style>
</head>
<body>
<p>Look, Ma, no JavaScript required.</p>
<div id='anchorRight'>Anchor right, 20% from top</div>
<div id='anchorBottom'>Anchor bottom, 20% from left</div>
<div id='anchorBoth'>Anchor bottom and right</div>
</body>
</html>

Чистое решение CSS не всегда возможно. При работе с JavaScript вам придется следить не только за событиями изменения размера окна, но и за изменением размера текста, что является более болезненным (Google Closure библиотека включает в себя утилиты для этого). Также убедитесь, что встроен гистерезис , чтобы избежать слишком частого перемещения элементов во время фактической операции изменения размера. (Простой способ сделать это - отреагировать на изменение размера, установив функцию, которая будет вызываться setTimeout через четверть секунды, и запомнив дескриптор таймера; если вы получили другое событие изменения размера до вызова функции, отмените более ранний таймер и установите новый. Вы можете установить максимальное количество раз, которое вы откладываете изменение размера, прежде чем идти вперед [чтобы показать промежуточные обновления], но, поскольку перемещение этих вещей с помощью JavaScript может быть немного медленным, вы не хотите делать это каждое промежуточное событие , которое вы получаете во время операции.)

0 голосов
/ 14 января 2011

Используя jQuery, вы можете сделать следующее:

jQuery(window).resize(function() {
    jQuery('#ContainerDiv').html( jQuery('#ContainerDiv').html() );
});

Хотя это, вероятно, не лучшая практика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...