停留在div上的CSS将显示或隐藏其他div

时间:2014-12-11 09:22:05

标签: html css hover hide show

我确定这是可行的,但我无法让它工作,我想创建一个横幅,下面有4张幻灯片和4个按钮。

首先显示第一张幻灯片,直到您将鼠标悬停在“按下按钮2”上。它隐藏了幻灯片1,3和& 4并显示幻灯片2并保持滑动(鼠标关闭),直到另一个按钮悬停在上面,然后它将显示相应的幻灯片并隐藏其余部分。

我想尝试在HTML / CSS中完成所有这些,如果可能的话,不需要jQuery。

我的代码:

<style type="text/css">
.banners {width:100%; max-width:1004px; height:100%; max-height:546px; overflow: hidden;}
#slide1 {width:100%; height:100%; background:yellow; display:block;}
#slide2 {width:100%; height:100%; background:blue; display:none;}
#slide3 {width:100%; height:100%; background:green; display:none;}
#slide4 {width:100%; height:100%; background:red; display:none;}
#bannerbutton1 {width:100%; max-width: 251px; height:100%; max-height: 40px; float:left; background:yellow;}
#bannerbutton2 {width:100%; max-width: 251px; height:100%; max-height: 40px; float:left; background:blue;}
#bannerbutton3 {width:100%; max-width: 251px; height:100%; max-height: 40px; float:left; background:green;}
#bannerbutton4 {width:100%; max-width: 251px; height:100%; max-height: 40px; float:left; background:red;}
</style>


<div class="banners">
    <div id="slide1">
    </div>
    <div id="slide2">
    </div>
    <div id="slide3">
    </div>
    <div id="slide4">
    </div>
</div>

<a id="bannerbutton1" href="">
BANNER 1
</a>
<a id="bannerbutton2" href="">
BANNER 2
</a>
<a id="bannerbutton3" href="">
BANNER 3
</a>
<a id="bannerbutton4" href="">
BANNER 4
</a>

这可能很简单,我可能会遗漏一些东西,但非常感谢帮助。

3 个答案:

答案 0 :(得分:1)

这些事情必须使用JavaScript完成。只有当应该显示/隐藏的元素是那些用鼠标悬停的子元素时,才能使用纯CSS悬停和隐藏元素。例如:

<div class="hover-to-hide-sub-div">
  <div class="hide-me"></div>
</div>

并在CSS中:

div.hover-to-hide-sub-div:hover div.hide-me { display: none; }

如果没有给出这个层次结构,则需要JS。

答案 1 :(得分:0)

使用CSS,您可以使用子选择器和兄弟选择器隐藏/显示,这是真的。但即使是兄弟选择器,:hover元素也必须位于受影响的元素之前。

如果您更改了结构,则可以使用:hover伪类和一般同级选择器~为按钮的悬停状态实现悬停开关。这是一个例子:

http://jsfiddle.net/xxgLzgax/

现在使用智能定位你可以根据需要重新定位,但是当你想要保持最后一个悬停元素的状态时就会出现问题。 CSS纯粹用于样式化,即使它确实满足元素的伪状态(因为它们的风格),它也无法做到这样的事情。 :hover用于悬停其他任何内容的样式。

正如其他海报所述,你需要使用JS / JQuery来做到这一点。可能有以下几点:

$( "button" ).on("mouseenter", function() {
       $('class/ID to show').addClass( "hover" ).siblings().removeClass( "hover" );
});

但是无论JS解决方案保持状态相同并使这个特定的设置工作,你将不得不使用JS。此外,如果您使用JS来执行此操作,我建议使用类来切换它,保持CSS和JS分开。

答案 2 :(得分:0)

是的,你可以在没有JavaScript或JQuery的情况下完成,但只能使用hover。如果你想在没有悬停的情况下留在图像上,那么你需要使用JavaScript或JQuery。这是因为当你的鼠标没有按钮时,css选择器不活动。

无论如何,这是我的代码,纯css3。当你悬停在按钮上时,它适用于悬停并显示图像。

HTML

<div class="slider"> 
        <input type="radio" id="control1" name="controls" checked="checked"/>
        <label for="control1"></label>
        <input type="radio" id="control2" name="controls"/>
        <label for="control2"></label>
        <input type="radio" id="control3" name="controls"/>
        <label for="control3"></label>
        <input type="radio" id="control4" name="controls"/>
        <label for="control4"></label>
        <input type="radio" id="control5" name="controls"/>
        <label for="control5"></label>
        <div class="sliderinner">
            <ul>
                <li>
                    <img src="bea.jpg" />
                    <div class="description">
                        <div class="description-text">
                            <h2>Title 1</h2>
                            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut</p>
                        </div>
                    </div>
                </li>
                <li>
                    <img src="bea.jpg" />
                    <div class="description">
                        <div class="description-text">
                            <h2>Title 2</h2>
                            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut</p>
                        </div>
                    </div>
                </li>
                <li>
                    <img src="bea.jpg" />
                    <div class="description">
                        <div class="description-text">
                            <h2>Title 3</h2>
                            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut</p>
                        </div>
                    </div>
                </li>
                <li>
                    <img src="bea.jpg" />
                    <div class="description">
                        <div class="description-text">
                            <h2>Title 4</h2>
                            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut</p>
                        </div>
                    </div>
                </li>
                <li>
                    <img src="bea.jpg" />
                    <div class="description">
                        <div class="description-text">
                            <h2>Title 5</h2>
                            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut</p>
                        </div>
                    </div>
                </li>
            </ul>
        </div>
    </div>

CSS

h1 {color:#333; text-shadow:1px 1px #999; font-size:40px; font-family:Archivo Narrow; margin:40px; text-align:center;}
.slider {
    display: block;
    height: 320px;
    min-width: 260px;
    max-width: 640px;
    margin: auto;
    margin-top: 20px;
    position: relative;
}

.sliderinner {
    width: 100%;
    height: 100%;
    overflow: hidden;
    position: relative;
}

.sliderinner>ul {
    list-style: none;
    height: 100%;
    width: 500%;
    overflow: hidden;
    position: relative;
    left: 0px;
    -webkit-transition: left .8s cubic-bezier(0.77, 0, 0.175, 1);
    -moz-transition: left .8s cubic-bezier(0.77, 0, 0.175, 1);
    -o-transition: left .8s cubic-bezier(0.77, 0, 0.175, 1);
    transition: left .8s cubic-bezier(0.77, 0, 0.175, 1);
}

.sliderinner>ul>li {
    width: 20%;
    height: 320px;
    float: left;
    position: relative;
}

.sliderinner>ul>li>img {
    margin: auto;
    height: 100%;
}

.slider input[type=radio] {
    position: absolute;
    left: 50%;
    bottom: 15px;
    z-index: 100;
    visibility: hidden;
}

.slider label {
    position: absolute;
    left: 50%;
    bottom: -45px;
    z-index: 100;
    width: 12px;
    height: 12px;
    background-color:#ccc;
    -webkit-border-radius: 50%;
    -moz-border-radius: 50%;
    border-radius: 50%;
    cursor: pointer;
    -webkit-box-shadow: 0px 0px 3px rgba(0,0,0,.8);
    -moz-box-shadow: 0px 0px 3px rgba(0,0,0,.8);
    box-shadow: 0px 0px 3px rgba(0,0,0,.8);
    -webkit-transition: background-color .2s;
    -moz-transition: background-color .2s;
    -o-transition: background-color .2s;
    transition: background-color .2s;
}

.slider input[type=radio]#control1:hover~label[for=control1] { background-color: #333; }
.slider input[type=radio]#control2:hover~label[for=control2] { background-color: #333; }
.slider input[type=radio]#control3:hover~label[for=control3] { background-color: #333; }
.slider input[type=radio]#control4:hover~label[for=control4] { background-color: #333; }
.slider input[type=radio]#control5:hover~label[for=control5] { background-color: #333; }
.slider label[for=control1] { margin-left: -36px }
.slider label[for=control2] { margin-left: -18px }
.slider label[for=control4] { margin-left: 18px }
.slider label[for=control5] { margin-left: 36px }
.slider input[type=radio]#control1:hover~.sliderinner>ul { left: 0 }
.slider input[type=radio]#control2:hover~.sliderinner>ul { left: -100% }
.slider input[type=radio]#control3:hover~.sliderinner>ul { left: -200% }
.slider input[type=radio]#control4:hover~.sliderinner>ul { left: -300% }
.slider input[type=radio]#control5:hover~.sliderinner>ul { left: -400% }

.description {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    font-family:Archivo Narrow;
    z-index: 1000;
}
.description-text {
    background-color: rgba(0,0,0,.8);
    padding:10px;
    top: 0;
    z-index: 4;
    -webkit-transition: opacity .2s;
    -moz-transition: opacity .2s;
    -o-transition: opacity .2s;
    transition: opacity .2s;
    color: #fff;
}