Henry Zhu
Henry Zhu

Reputation: 2618

HTML Onclick doesn't work with negative z-index

I placed a negative z-index property on my image section to prevent it from overlapping the navigation bar, which caused the hyperlinks to not function properly. After I fixed that problem, I realized that my left and right buttons for my slideshow would not work. Any help enabling the buttons to work even with a negative z-index? All the code that I have pasted below is necessary.

HTML

<div id="container">
    <header>
        <h1><b>Seattle</b>&Metropolitan</h1>
        <nav>
            <ul>
                <li><a href="about.html">About</a></li>
                <li>Buildings</li>
                <li id="contact">Contact Us</li>
            </ul>
        </nav>
    </header>
</div>
<div class="image-section">
    <img src="img/seattleskyline.jpg" alt="Seattle Skyline" id="center-image" />
    <div id="caption"><div id="caption-text">A panoramic view of 1201 Third Avenue at night</div></div>
    <button id="sliderLeft" onclick="left();"></button>
    <button id="sliderRight" onclick="right();"></button>
</div>
<br><br>
<div class="content">
    Seattle's history can be traced back to the 1850s, when pioneers and natives started building a great city filled with a diverse culure, beautiful scenery, and a vibrant enviornment. The metropolitan area of Seattle now is a high-tech hub, in which four Fortune 500 companies reside: <a href="http://www.amazon.com/" alt="Amazon Website"><b>Amazon.com (#49)</b></a>, <a href="http://www.starbucks.com" alt="Starbucks Website"><b>Starbucks (#208)</b></a>, <a href="http://shop.nordstrom.com" alt="Nordstrom Website"><b>Nordstrom (#227)</b></a>, and <a href="http://www.expeditors.com" alt="Expeditors Website"><b>Expeditors International (#428)</b></a>. 
</div>

CSS

@charset "utf-8";

#container
{
    width: 75%;
    margin-left: auto;
    margin-right: auto;
}

header h1
{
    font-size: 38px;
    float: left;
    font-weight: 100;
}

header nav ul
{
    list-style-type: none;
    margin: 0;
    vertical-align: middle;
    line-height: normal;
    float: right;
    z-index: 999;
}

header nav ul li
{
    line-height: 105px;
    display: inline;
    padding: 45px;
    font-size: 22px;
    font-weight: 100;
}

header nav ul li a
{
    color: black;
    text-decoration: none;
}

#center-image
{
    width: 100%;
    height: 480px;
}

#contact
{
    padding-right: 0;
}

.image-section
{
    margin-left: auto;
    margin-right: auto;
    width: 75%;
    position: relative;
    text-align: center;

}

.image-section #caption
{
    position: absolute;
    display: none;
    bottom: 4px;
    width: 100%;
    text-align: center;
    color: white;
    background: #474747;
    height: 50px;
    line-height: 50px;
    opacity: 0.8;
    font-size: 20px;
}

.image-section button
{
    outline: 0;
}

.image-section #sliderLeft
{
    position: absolute;
    display: none;
    width: 25px;
    height: 100px;
    top: 50%;
    margin-bottom: 50px;
    left: 0;
    opacity: 0.7;
    filter: alpha(opacity=70);
    border: 0;
}

.image-section #sliderRight
{
    position: absolute;
    display: none;
    width: 25px;
    height: 100px;
    top: 50%;
    margin-bottom: 50px;
    right: 0;
    opacity: 0.7;
    filter: alpha(opacity=70);
    border: 0;
}

JS

var images = ["img/seattleskyline.jpg", "img/spaceneedle.jpg", "img/ferriswheel.jpg"]
var captions = ["A panoramic view of 1201 Third Avenue at night", "The Seattle's landmark Space Needle", "The Iconic Great Wheel"]
var index = 0;

function left() {
    index -= 2;

    if (index < 0) {
        index = images.length;
    }

    changeImage();
}

function right() {
    changeImage();
}

function changeImage() {
    index++;
    if (index > images.length - 1) {
        index = 0;
    }
    var targetImage = document.getElementById("center-image");
    var caption = document.getElementById("caption-text");

    $("#center-image").fadeOut(1000, function() {
        targetImage.src = images[index];
        $("#center-image").fadeIn(1000);
    });

    $("#caption-text").fadeOut(1000, function() {
        caption.innerHTML = captions[index];
        $("#caption-text").fadeIn(1000);
    });
}

$(document).ready(function() {
    $("#sliderRight").fadeIn(1000);
    $("#sliderLeft").fadeIn(1000);
    $("#caption").fadeIn(1000);
    setInterval(changeImage, 7000);
});

Upvotes: 2

Views: 2167

Answers (2)

Mohamed H. Hegazy
Mohamed H. Hegazy

Reputation: 154

z-index take effect when position is relative or absolute so if you want use it with your css

add position: relative; as following so z-indexs take effect

header nav ul
{
    position: relative;
    z-index: 9999;
}

.image-section
{
    position: relative;
}
.image-section #sliderLeft
{
    z-index: 999;
}

.image-section #sliderRight
    z-index: 999;
}

Correct CodePen

Upvotes: 4

Wesley Smith
Wesley Smith

Reputation: 19571

Change your CSS for header nav ul to :

header nav ul
{
    list-style-type: none;
    margin: 0;
    vertical-align: middle;
    line-height: normal;
    float: right;
    z-index: 999;
    position: relative; /* add this */
}

Working jSfiddle

Upvotes: 1

Related Questions