在绝对定位的 div 元素后面定位内容

4
我有一个相对定位的div,其中包含另外三个绝对定位的div,我将它们用作滑块。每个绝对定位的div都包含一个带有width:100%的图片。
问题是,当我想要在我的滑块下方定位内容时,内容会与幻灯片重叠(因为div是绝对定位的,我不知道实际高度-它因图片宽度为100%而变化)。
如何在滑块下方定位内容?
目前,我正在使用一个JavaScript函数来检索图像的高度,并将该高度添加为内容下方的填充,但我更喜欢使用纯CSS。
这可能吗?(我不想使用媒体查询,因为需要处理很多分辨率)
以下是代码:(有关实时示例,请查看此fiddle:https://jsfiddle.net/g6ppqxLf/5/
HTML:
<div id="slideshow" class="latime_100">

        <img src="poze/sageata_st.png" class="navigare" id="navigare_st" onclick="go_prev();"></img>

        <div id="slider_1" class="slider" >

            <img src="http://www.freestockphotos.name/wallpaper-original/wallpapers/download-images-of-gentle-dogs-6866.jpg"></img>



        </div>

        <div id="slider_2" class="slider">

            <img src="http://3.bp.blogspot.com/-rZmCIp0C-hQ/Tx6aCFeweoI/AAAAAAAAAnQ/WqIEVBTIzRk/s1600/Cool-Tiger-Wallpaper-1920x1080-HD.jpg"></img>



        </div>

        <div id="slider_3" class="slider">

            <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQwazmPOPcUTK1AmVSPQjH7YLlBywxTpkQi4LEQ40HJOg6_8Qyw"></img>



        </div>

        <img src="poze/sageata_dr.png" class="navigare" id="navigare_dr" onclick="go_next();"></img>
    </div>

CSS(navigare_st和navigare_dr是滑块箭头)

.slider{

    width:100%;
    position:absolute;
}

.slider img{

  display: block;
  margin: 0 auto;
  width:100%;

  min-width: 1024px;

}

#slideshow{


    position: relative;
    background-color: white;
    z-index:100;
}

#navigare_st{

    position: absolute;
    z-index:1000;
    left:0px;
    top:45%;
    cursor: pointer;
    width:2.5%;
}

#navigare_dr {
  z-index: 1000;
  position: absolute;
  right: 0px;
  top: 45%;
  cursor: pointer;
  width:2.5%;
}

如果你想制作一个滑块,最好设置一个固定的高度而不是100%,因为图像的高度变化会使图像滑块看起来不好。我的建议是将图像包装在一个div中(具有固定的宽度和高度),然后将图像属性设置为100%。 - Brian Luna
也许你已经知道,但如果你制作一个具有不同高度图像的滑块,并且希望背后的内容按照流程跟随而不使用position:absolute...那么你的网站用户体验不会很好(至少可以这样说)...所有内容一直上下移动。 - Alvaro Menéndez
@AlvaroMenéndez 这些图像高度相同,fiddle中的仅为示例。 - Hello Lili
4个回答

1
如果您只想使用纯CSS解决方案,请将第一个滑动元素设为position:relative

1
我不完全理解问题所在。 但是,我尝试在图片底部添加额外的内容,而不会重叠。
(忽略javascript,这只是演示)

var curslide = 0;
var elements;

$(document).ready(function() {
  elements = $('.slider');
  elements.hide();
  elements.first().show();

  $('#navigare_st').click(function() {
    if (curslide > 0) {
      curslide--;
      elements.hide();
      elements.eq(curslide).show();
    }
  });
  $('#navigare_dr').click(function() {
    if (curslide < elements.length) {
      curslide++;
      elements.hide();
      elements.eq(curslide).show();
    }
  });
});
.slider {
  width: 100%;
  //position: absolute;
}
.slider img {
  display: block;
  margin: 0 auto;
  width: 100%;
  min-width: 100px;
}
#slideshow {
  position: relative;
  background-color: white;
  z-index: 100;
}
#navigare_st {
  position: absolute;
  width: 50px;
  height: 50px;
  z-index: 1000;
  left: 0px;
  top: 45%;
  cursor: pointer;
  border-radius: 50%;
  background-color: white;
}
#navigare_dr {
  z-index: 1000;
  width: 50px;
  height: 50px;
  position: absolute;
  transform: rotate(180deg);
  right: 0px;
  top: 45%;
  cursor: pointer;
  border-radius: 50%;
  background-color: white;
}
.extra {
  width: 100%;
  height: 50px;
  top: 100%;
  background-color: firebrick;
  border-bottom-left-radius: 15px;
  border-bottom-right-radius: 15px;
  line-height: 24px;
  text-indent: 5px;
  font-size: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="slideshow" class="latime_100">

  <img src="https://cdn4.iconfinder.com/data/icons/miu/22/circle_back_arrow-128.png" class="navigare" id="navigare_st" />

  <div id="slider_1" class="slider">

    <img src="http://lorempixel.com/400/200/" />



  </div>

  <div id="slider_2" class="slider">

    <img src="http://lorempixel.com/400/200/sports" />



  </div>

  <div id="slider_3" class="slider">

    <img src="http://lorempixel.com/400/200/food" />

  </div>

  <img src="https://cdn4.iconfinder.com/data/icons/miu/22/circle_back_arrow-128.png" class="navigare" id="navigare_dr" />

  <div class="extra">
    Here comes the extra content?
  </div>
</div>


0

在这个任务中,你不应该使用position: absolute。为什么呢?因为使用position: absolute会将元素从文档流中移除,所以浏览器会认为它们在页面上不占用任何空间。
相反,你应该使用float:leftfloat:right。这样做可以达到同样的效果,但会导致父级div根据内容自动调整大小。

像这样:

.slider {
    width:100%;
    float: left;
}

我有一个更新的jfiddle版本,可以展示它的运行情况:https://jsfiddle.net/udfjm089/3/

但老实说,除非对你的布局来说绝对必要,否则我不建议这样做。设置一个带有overflow: hidden的固定高度的包装div会更好看,并且不会导致页面内容跳动。


0

让页面上的元素具有动态高度并不是一个好的做法。 要么尝试使您的图像具有相同的高度,要么将幻灯片放映容器的高度设置为“最高”图像的高度。

通常,使用淡入淡出效果的幻灯片放映会为幻灯片使用float: left;,然后在最后一张幻灯片后使用clear:both

但是,如果您坚持保持该配置并只想快速修复,那么这段代码就可以解决问题:

$('#slideshow').css('height', $('#slider_'+i+' img').height());

将其复制到您的slider_init和go_slide函数中。

谨此致以诚挚的问候


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接