У меня есть основная форма для моего сайта, и я хочу состыковать div в верхней части области содержимого внутри основной формы. Этот div всегда должен быть видимым, несмотря на положение прокрутки. Возможно ли это?
Изображение лучше объяснит это.
У меня есть основная форма для моего сайта, и я хочу состыковать div в верхней части области содержимого внутри основной формы. Этот div всегда должен быть видимым, несмотря на положение прокрутки. Возможно ли это?
Изображение лучше объяснит это.
Я отправил образец в качестве комментария, поэтому, полагаю, я напишу полный ответ на этот вопрос.
Разметка довольно проста, но для каждого раздела есть важные заметки.
<div id="page">
<div id="header">
<div id="header-inner"> <!-- Note #1 -->
<img src="http://placehold.it/300x100" />
</div>
</div>
<div id="content">
<!-- Some Content Here -->
</div>
</div>
#page {
padding: 100px;
width: 300px;
}
#header,
#header-inner { /* Note #1 */
height: 100px;
width: 300px;
}
.scrolling { /* Note #2 */
position: fixed;
top: 0;
}
//jQuery used for simplicity
$(window).scroll(function(){
$('#header-inner').toggleClass('scrolling', $(window).scrollTop() > $('#header').offset().top);
//can be rewritten long form as:
var scrollPosition, headerOffset, isScrolling;
scrollPosition = $(window).scrollTop();
headerOffset = $('#header').offset().top;
isScrolling = scrollPosition > headerOffset;
$('#header-inner').toggleClass('scrolling', isScrolling);
});
Заголовок прокрутки будет прикреплен к верхней части страницы с помощью position: fixed
, но этот стиль удалит контент из потока содержимого, что приведет к скачку содержимого, если его контейнер не сохранит исходную высоту.
Стили принадлежат CSS, однако может быть сложно правильно выровнять некоторые элементы с их исходной позицией. Возможно, вам потребуется динамически установить свойство left
или right
css с помощью JavaScript.
Вам понадобится jQuery или тому подобное, см. мою скрипку здесь
Edit
Функция jQuery, где .form
- это содержимое div, а .banner
- это div, который состыкован
$(window).scroll(function() {
t = $('.form').offset();
t = t.top;
s = $(window).scrollTop();
d = t-s;
if (d < 0) {
$('.banner').addClass('fixed');
$('.banner').addClass('paddingTop');
} else {
$('.banner').removeClass('fixed');
$('.banner').removeClass('paddingTop');
}
});
.fixed {
position:fixed;
top:0px;
}
.paddingTop{
padding-top:110px;
}
Я создал новую скрипку, которая, надеюсь, может быть полезна. DIV может быть произвольно позиционирован на странице и остается видимым при прокрутке.
<div id="mydiv">
fixed div
</div>
<div class="ghost">
fixed div
</div>
CSS
#mydiv { position: fixed; background-color:Green; float:left; width:100%}
.ghost{opacity: 0}
возможно, есть лучшее решение, чем использование "призрака", но я не знаю, какой из них.
Предположим, что верхняя позиция (в верхней части экрана) заголовка div составляет 100 пикселей в начале, вы можете сделать следующее: если верхняя часть окна прокрутки превышает 100 пикселей, установите div заголовка в положение фиксации с верхним 0px; если верхняя часть прокрутки окна меньше 100 пикселей, установите положение заголовка div с макетом по умолчанию. С jquery это выглядит следующим образом:
$(document).scroll(function() {
if ($(this).scrollTop() > 100) {
$('div#header').css({
"position" : 'fixed',
"top" : 0 });
} else {
$('div#header').css({ "position" : 'relative', "top" : 0 });
}
});
он реализуется с помощью события прокрутки.
Используйте CSS, чтобы зафиксировать его положение.
Предполагая, что ваш <div>
имеет идентификатор "topdiv":
#topdiv {
position: fixed;
top: 0;
left: 0
}
Обратите внимание, что вам нужно будет установить верхний край для содержимого, поскольку фиксированный div отобразит "поверх" содержимого:
#contentarea { margin-top: 35px; }
Отметьте fiddle.
Похоже на то, что вы ищете, это div заголовка с двумя свойствами:
Короче говоря, что-то вроде "max-top" (который не существует как свойство css).
Если вы хотите все это сделать, самый быстрый способ может включать некоторый JavaScript. Попробуйте this; если я получу некоторое время спустя, я обновлю это с помощью еще одного кода.
Я считаю, что вы ищете div, который следует, когда вы прокручиваете вниз. Эта реализация может быть замечена для корзин покупок по количеству сайтов. Вы можете посмотреть http://kitchen.net-perspective.com/open-source/scroll-follow/
Еще одна хорошая ссылка: http://jqueryfordesigners.com/fixed-floating-elements/
Некоторая связанная коллекция примеров прокрутки: http://webdesign14.com/30-tutorials-and-plugins-jquery-scroll/
Вы можете попробовать этот CSS. Возможно, это то, что вы ищете:
html, body{
text-align:center;
margin:0px;
background:#ABCFFF;
height:100%;
}
.header-cont {
width:100%;
position:fixed;
top:0px;
}
#header {
height:50px;
background:#F0F0F0;
border:1px solid #CCC;
width: 100%;
margin:auto;
}
.content-cont {
width:100%;
position:absolute; /* to place it somewhere on the screen */
top:60px;
bottom:60px; /* makes it lock to the bottom */
overflow:auto;
}
#content {
background:#F0F0F0;
border:1px solid #CCC;
width:960px;
position:relative;
min-height:99.6%;
height:auto;
overflow: hidden;
margin:auto;
}
.footer-cont {
width:100%;
position:fixed;
bottom:0px;
}
#footer {
height:50px;
background:#F0F0F0;
border:1px solid #CCC;
width: 100%;
margin:auto;
}
в этом модифицированном примере banner div остается на экране при прокрутке и также остается в контейнере div. когда контейнер divs bottom достигает вершины экрана, div баннера возвращается в относительное положение и прокручивается вверх с контейнером http://jsfiddle.net/SeeTS/198/
JQuery
$(window).scroll(function() {
t = $('.form').offset();
t = t.top;
s = $(window).scrollTop();
d = t-s;
b = $('.banner').height();
f = $('.form').height();
if (d < 5) {
if(d < -(f-b)-15)
{
$('.banner').addClass('bottom');
$('.banner').removeClass('fixed');
}
else {
$('.banner').addClass('fixed');
$('.banner').removeClass('bottom');
}
}
else {
$('.banner').removeClass('fixed');
}
});
CSS
.form {
position:relative;
width:480px;
margin: 100px auto;
padding:10px;
}
p {
border:2px dotted #000;
}
.banner {
border-radius:8px;
background:#660000;
height:100px;
width:60px;
}
.fixed{
position:fixed;
top:5px;
}
.bottom {
position:absolute;
bottom:0px;
}
HTML
<table class="form" id="form">
<tr>
<td valign="top" width="70px">
<div class="banner"></div>
</td>
<td>
<p>Cum sociis natoque penatibus...</p>
</td>
</tr>
</table>
<div style="position:relative;height:500px;">
</div>