【问题标题】:Show/Hide Different Divs Only仅显示/隐藏不同的 div
【发布时间】:2014-07-30 21:08:53
【问题描述】:

我有两个 div。当我在一个链接上滚动时,我想隐藏一个 div 并显示另一个,这样看起来就好像背景颜色已经改变了。这是一些示例 HTML:

<div id="main-nav">
 <ul>
  <li><a href="">Item 1</a></li>
  <li><a href="">Item 2</a></li>
  <li><a href="">Item 3</a></li>
 </ul>
</div>

<div id="sub-nav">
 <ul>
  <li>SubItem 1</li>
  <li>SubItem 2</li>
  <li>SubItem 3</li>
 </ul>
</div>

sub-nav div 与 main-nav div 完全相同,只是背景颜色不同。

#main-nav {
 width: 500px;
 height: 250px;
 background-color: black;
 display: block;
}

#sub-nav {
 width: 500px;
 height: 250px;
 background-color: white;
 display: none;
}

我只想在#main-div 中的项目悬停时显示#sub-nav div。所以效果将是背景颜色在悬停时似乎从黑色变为白色。

我可以只使用 CSS 吗?

基本上,我想知道是否可以在包含 div 的元素(&lt;a&gt; 标签)悬停时更改包含 div 的 display 属性?也就是说,悬停在链接上应该导致其包含的 div #main-nav 更改为 display: none#sub-nav div 变为 display:block

【问题讨论】:

  • 不,你不能只使用 CSS。
  • 你需要一些javascript来做到这一点,不能单独使用CSS。 css中没有父选择器
  • 这个问题在cmets中回答,不能只用css解决
  • @volumeone 它不起作用,因为悬停在整个容器中的任何位置都会触发显示/隐藏。你甚至不会进入链接,并且显示/隐藏已经发生

标签: html css


【解决方案1】:

不,您不能仅使用 CSS 来做到这一点。您需要 subnav 是您悬停的元素的子元素或与其直接相邻的元素。

你可以使用css选择器

#main-nav li:hover .sub-nav{}

#main-nav li:hover + .sub-nav{}

或者你可以使用 javascript

【讨论】:

    【解决方案2】:

    为什么不直接改变背景颜色呢?像这样:

    <div id="main-nav">
        <ul>
            <li><a href="">Item 1</a></li>
            <li><a href="">Item 2</a></li>
            <li><a href="">Item 3</a></li>
        </ul>
    </div>
    
    #main-nav:hover { background-color: black; }
    

    编辑你可以完全按照你的要求做,但你需要一个包装器:

    <div class="navigation-wrapper">
        <div class="main">
            <ul>
                <li><a href="">Item 1</a></li>
                <li><a href="">Item 2</a></li>
                <li><a href="">Item 3</a></li>
            </ul>
        </div>
        <div class="sub">
            <ul>
                <li><a href="">Item 1</a></li>
                <li><a href="">Item 2</a></li>
                <li><a href="">Item 3</a></li>
            </ul>
        </div>
    </div>
    

    在你的 CSS 中:

    .navigation-wrapper .sub { display: none; }
    .navigation-wrapper:hover .main { display: none; }
    .navigation-wrapper:hover .sub { display: block; }
    

    Fiddle demo

    【讨论】:

    • 因为那样#sub-nav div的内容就不会显示了
    • 我看到你更新的问题,对此发表评论;使用纯 css,当鼠标悬停在孩子上时,不可能触发对父母的影响。不过,您可以使用 javascript 实现此结果
    • 是的,但是,您可以将任何内容悬停在容器中,然后显示/隐藏会发生
    • @Huangism 是的,这正是我的示例所做的(检查小提琴)
    • 对于所有反对者:您能解释一下为什么这是一个错误的答案吗? IMO 它回答了提问者的需求,它是正确的 css 等等。顺便说一句,投票没有错!不过我很好奇;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 2012-04-04
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多