A container hidden behind another container

I'm sure this is a positioning problem, but unfortunately positioning is my weakness.

I have a container with a slideshow in jquery image. The images in the slideshow must be {position: absolute;}

, otherwise they will be displayed one by one on the page.

Of course, the containers that appear after the slideshow container appear behind the slideshow container, not below it. I think this is because of the absolute positioning of the slideshow images, but I don't know how to fix it.

    @charset "UTF-8";
    /* CSS Document */
    #main {
      position: relative;
      width: 100%;
    }
    #slideshow {
      position: relative;
      width: auto;
    }
    #slideshow IMG {
      position: absolute;
      top: 0;
      left: 0;
      z-index: 8;
      opacity: 0.0;
    }
    #slideshow IMG.active {
      z-index: 10;
      opacity: 1.0;
    }
    #slideshow IMG.last-active {
      z-index: 9;
    }
      

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>Untitled Document</title>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
  <script type="text/javascript">
    /*** 
        Simple jQuery Slideshow Script
        Released by Jon Raasch (jonraasch.com) under FreeBSD license: free to use or modify, not responsible for anything, etc.  Please link out to me if you like it :)
        ***/

    function slideSwitch() {
      var $active = $('#slideshow IMG.active');

      if ($active.length == 0) $active = $('#slideshow IMG:last');

      // use this to pull the images in the order they appear in the markup
      var $next = $active.next().length ? $active.next() : $('#slideshow IMG:first');

      // uncomment the 3 lines below to pull the images in random order

      // var $sibs  = $active.siblings();
      // var rndNum = Math.floor(Math.random() * $sibs.length );
      // var $next  = $( $sibs[ rndNum ] );


      $active.addClass('last-active');

      $next.css({
          opacity: 0.0
        })
        .addClass('active')
        .animate({
          opacity: 1.0
        }, 500, function() {
          $active.removeClass('active last-active');
        });
    }

    $(function() {
      setInterval("slideSwitch()", 3000);
    });
  </script>

  <link href="../../Assignment5-Portfolio/HTML/style.css" rel="stylesheet" type="text/css" />
</head>

<body>

  <div id="main">


    <div id="slideshow">
      <img src="../Images/bike.png" width="100%" height="auto" class="active" />
      <img src="../Images/fish.png" width="100%" height="auto" />
      <img src="../Images/stairs.png" width="100%" height="auto" />
      <img src="../Images/gage.png" width="100%" height="auto" />
    </div>

    <div id="aboutme">About me</div>

    <div id="videography">Video
      <div id="text">text goes here</div>
      <div id="video">video goes here</div>
    </div>

    <div id="photography">
      <div id="photos">photos go here</div>
      <div id="photography"></div>
    </div>

  </div>

</body>

</html>
      

Run code


So, #slideshow

this is a container. Images in it block the containers below it. I want the images to stretch across the full width of the screen.

As I said, I'm pretty sure this is a positioning issue, but I feel like I might also be missing something important from the container #slideshow

, but I can't seem to find what it is.

Thanks in advance for any help you can provide!

+3


source to share


2 answers


You have to put a wrapper div around the whole slideshow and give it position:relative;

this way it will contain the slideshow and create the spacing needed.

If you consider a little more javascript you can add this tidbit of code



$(document).ready(function() 
{
 var objHeight = 0;
 $.each($('#slideshow').children(), function(){
        objHeight = $(this).height();
 });
 $('#slideshow').height(objHeight);
});

      

DEMO

+3


source


absolute as well as relative positioned elements must have a specific height and width (however, block elements have width: 100% initially). Otherwise, the following elements will overlap with them. Therefore, if you have a specific height for your images, eg. 400px then:



#slideshow {
position:relative;
width:auto;
height:400px;
}

      

+2


source







All Articles