在悬停另一个元素时更改元素样式

时间:2011-08-06 10:29:56

标签: html css hover

我有三个元素,我需要通过悬停在其他两个元素上来改变一个元素的样式。

HTML

<div class="pagination">
        <span class="step-links">
            {% if page_obj.has_previous %}
                 <div class='not-current'><a href="?page={{ page_obj.previous_page_number }}">{{ page_obj.previous_page_number }}</a></div>
            {% endif %}

            <div id='current'>                
                {{ page_obj.number }}
            </div>


            {% if page_obj.has_next %}
                <div class='not-current' ><a href="?page={{ page_obj.next_page_number }}">{{ page_obj.next_page_number }}</a></div>
            {% endif %}              
        </span>
    </div>

CSS

#current, .not-current:hover {
    width: 30px;
    height: 30px;
    line-height: 30px;
    font-size: 20px;
    font-weight: bold;
    border: orange outset 3px;
    background-color: orange;
    margin: 0 auto 10px auto;
    box-shadow: 1px 1px 3px 0 rgba(0, 0, 0, .5);
}

.not-current {
    width: 15px;
    height: 15px;
    line-height: 15px;
    background-color: #A29F9F;
    border: #A29F9F outset 2px;
    box-shadow: 1px 1px 3px 0 rgba(0, 0, 0, .5);
}

.not-current:hover #current {
    display: none;
}

悬停元素(.not-current)的样式已更改,但#current元素的样式未更改。那里我哪里错了? (仅在Chromium 12.0中测试过。)

3 个答案:

答案 0 :(得分:4)

您可以使用CSS同级选择器~执行此操作,但需要注意您的悬停元素必须位于要在标记中设置样式的元素之前。不过,您可以按照自己喜欢的顺序显示它们。

演示: jsFiddle

CSS:

#one:hover ~ #three,
#six:hover ~ #four {
    background-color: black;
    color: white;
}
#four {
    margin-left: -35px;
}
#six {
    left: 80px;
    position: relative;
}
.box {
    cursor: pointer;
    display: inline-block;
    height: 30px;
    line-height: 30px;
    margin: 5px;
    outline: 1px solid black;
    text-align: center;
    width: 30px;
}

HTML:

<p>Hover over 1 and 3 gets styled.</p>
   <div id="one" class="box">1</div><!--
--><div id="two" class="box">2</div><!--
--><div id="three" class="box">3</div>

<!-- this works because 4 is after 6 in the markup, 
despite its display position -->
<p>Hover over 6 and 4 gets styled.</p>
   <div id="six" class="box">6</div><!--
--><div id="four" class="box">4</div><!--
--><div id="five" class="box">5</div>

答案 1 :(得分:2)

那是因为#current不在.not-current之下。使用JavaScript可以更好地实现此行为。

答案 2 :(得分:2)

.not-current:hover #current声明#current位于.not-current之下,正如@silverstrike所说。

在这个问题上使用JavaScript:http://www.w3schools.com/js/js_events.asp

jQuery:http://api.jquery.com/mouseover/