Принуждение слайдов оставаться в верхней части контейнера
Это немного сложно объяснить, но я дам ему шанс. Я использую этот учебник слайдера (http://css-tricks.com/slider-with-sliding-backgrounds/), чтобы создать форму шага.
Он работает отлично, и у меня есть небольшая проблема, у меня есть раздел для загрузки изображений (большие фоновые изображения), и я не изменяю размер.
Поскольку этот загрузочный раздел находится поверх первого слайда, когда я загружаю изображение, он сдвигает второе и третье слайды вниз. Есть ли способ сделать другие слайды (2 и 3) оставаться на вершине, независимо от того, что сделано для первого слайда?
Быстрая диаграмма, которая поможет объяснить, о чем я говорю.
Ps: Я следую той же семантике, что и в учебнике. например, id, классы и т.д.
Ответы
Ответ 1
Вы можете сделать это, сохранив исходный . offset(), используя .data() так:
Рабочий пример
$('#slide-1').data('offset-top', $('#slide-1').offset().top); //store the initial offset top
$('#add').click(function () { // click the button to add an image
$('div.image-holder').html('<img src="http://farm8.staticflickr.com/7382/8732044638_9337082fc6_z.jpg" /> ');
$('#slide-1, #slide-2').offset({ // keep slides 1 and 2 in their original positions
top: $('#slide-1').data('offset-top')
});
});
Ответ 2
Сделал следующее изменение вашего html, которое заставило его работать DEMO
<nav class="slider-nav">
<a href="#slide-0" class="active">Slide 0</a>
<a href="#slide-1">Slide 1</a>
<a href="#slide-2">Slide 2</a>
</nav>
<div class="slider-wrap">
<div class="image-holder">
<img src="http://farm8.staticflickr.com/7382/8732044638_9337082fc6_z.jpg"/>
</div>
<div class="slider" id="slider">
<div class="holder">
<div class="slide" id="slide-0">
</div>
<div class="slide" id="slide-1">
</div>
<div class="slide" id="slide-2">
</div>
</div>
</div>
</div>
Ответ 3
Вы должны использовать <div class="slide" />
в качестве обертки вокруг всего, что вы хотите в первом слайде. Таким образом, загрузчик файлов в первом слайде не будет влиять на другие два.
Здесь исправлено JSFiddle!
Ответ 4
Проблема заключается в том, что divs автоматически занимают всю ширину своего контейнера, и они являются элементами уровня блока, поэтому они складываются.
Чтобы сделать эту работу, вам нужно будет обернуть загрузчик и первый слайд в свой собственный отдельный div, чтобы ширина была ограничена, и они не влияют на другие слайды.
<div class="holder">
<div class="first-slide-wrap">
<div class="image-holder"></div>
<div id="#slide-0"></div>
</div>
<div id="#slide-1"></div>
<div id="#slide-2"></div>
</div>
CSS будет изменен так, чтобы выглядеть так:
.first-slide-wrap {
float:left;
width:300px;
}
.first-slide-wrap .slide {float:none;}
Скрипка: http://jsfiddle.net/PjxzH/