Извините, что вам нужно задать еще один вопрос, связанный с position:fixed
, но чтение через другие вопросы и темы форума не помогло мне с этим.
Следующий код - это упрощенная демонстрация того, как я использовал position:fixed
в проекте на сегодняшний день. Мое первоначальное (неправильное) понимание position:fixed
заключается в том, что он первоначально исправляет относительно первого позиционированного родительского контейнера и после этого остается в этой позиции независимо от положения прокрутки в окне просмотра. Теперь я понимаю, что это неправильно: на самом деле, position:fixed
позиции относительно внешнего контейнера (т.е. Тега html
) и position:absolute
расположены относительно первого родительского контейнера, который имеет позицию, отличную от static
.
Прочитав другие вопросы о SO, я понимаю, что эффект, который я пытался достичь с помощью position:fixed
, - это тот, который многие другие люди пытались сделать, но затем реализовать невозможно только с помощью CSS: То есть, чтобы позиционировать элемент относительно контейнера, но затем он останется там, где он находится относительно окна просмотра, когда страница прокручивается.
Что меня смущает, так это то, что выше было именно то, что я, казалось, достиг - по крайней мере, на FF и IE8. В приведенном ниже примере кода "фиксированное правое содержимое" сначала расположено справа от красного "центра прокручиваемого содержимого" и вертикально выравнивается с верхней частью содержимого центра. Содержимое центра можно прокручивать, но правый контент остается там, где он находится, как если бы он изначально позиционировался статически в обычном потоке документов, но после этого оставался фиксированным в окне просмотра.
Теперь я понимаю, что это похоже на "работу" в IE8 и FF просто потому, что я не указал атрибуты top
/bottom
/left
/right
для элемента fixed
. Если я это сделаю, тогда я понимаю, что элемент fixed
сразу же позиционируется относительно окна просмотра.
Я предположил - возможно, опасно - до сих пор, если относительные позиции не указаны, то position:fixed
по умолчанию помещает этот элемент, где он обычно статически ставится. По крайней мере, FF и IE8, похоже, делают именно это.
Тестирование в Safari, однако, показывает, что Safari, кажется, помещает этот элемент fixed
влево от своего контейнера. Другими словами, без позиционирования, мой элемент position:fixed
не является ни тем, где он был бы статически, либо не был бы расположен на 0,0 относительно окна просмотра.
Я полагался на очень плохо определенное поведение на сегодняшний день, и я лучше всего прибегаю к решению JavaScript для достижения этого фиксированного позиционирования? Или это поведение хорошо определено для IE/FF; и может кто-нибудь объяснить логику размещения Safari, пожалуйста?
<style type="text/css">
#content-centre {
margin: 0 auto;
width: 900px;
}
#header {
height: 55px;
position: fixed;
top: 0;
width: 990px;
}
#left-pane {
position: fixed;
top: 12px;
border: 1px green solid;
}
#main-pane {
left: 200px;
position: relative;
top: 66px;
width: 760px;
border: 1px yellow solid;
}
#container-1 {
border-top: 1px solid #FFFFFF;
float: right;
min-width: 130px;
padding-left: 20px;
border: 1px blue solid;
}
#container-0 {
margin-right: 20px;
min-height: 470px;
overflow: auto;
padding: 10px 0;
position: relative;
border: 1px red solid;
}
.side-info-list-fixer {
position: fixed;
}
</style>
<div id="content-centre">
<div id="header">
</div>
<div id="left-pane">
Fixed left pane content
</div>
<div id="main-pane">
<div id="page-module-containers">
<div id="container-1">
<div class="side-info-list-fixer"> Fixed right pane content </div>
</div>
<div id="container-0">
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
</div>
</div>
</div>
</div>