【问题标题】:Hover changes all my li tags悬停改变了我所有的 li 标签
【发布时间】:2016-06-30 19:25:35
【问题描述】:

我有这个代码,只是一个简单的列表来制作菜单

ul li {
  position: relative;
  top: 55px;
  height: 30px;
  background: #212;
  display: inline-block;
  width: 29%;
  margin: 1%;
  margin-bottom: 0;
  padding: 5px;
  -webkit-border-top-right-radius: 30px;
  -moz-border-top-right-radius: 30px;
  -ms-border-top-right-radius: 30px;
  -o-border-top-right-radius: 30px;
  border-top-right-radius: 30px;
  -webkit-border-top-left-radius: 30px;
  -moz-border-top-left-radius: 30px;
  -ms-border-top-left-radius: 30px;
  -o-border-top-left-radius: 30px;
  border-top-left-radius: 30px;
}
ul li:hover {
  box-shadow: 1px 1px 10px white;
  position: relative;
  top: 20px;
  height: 60px;
  padding-top: 1.5em;
  font-size: 20px;
}
<ul>
  <a href="#">
    <li>MENU</li>
  </a>
  <a href="#">
    <li>CARDS</li>
  </a>
  <a href="#">
    <li>CONTACT</li>
  </a>
</ul>

这会在我的菜单按钮上创建我想要的效果,但由于某种原因,padding-topfont-size 部分适用于所有 li,而不仅仅是我 hover 上的那个。

如果我删除这两个,box-shadow 和相对定位只会影响悬停的对象。

我怎样才能让它只影响我悬停的按钮?

我知道我可以给每个按钮一个 ID 并使用ID:hover,但是没有更短的代码解决方案吗?

【问题讨论】:

  • 你也能显示你的html吗?或者更好的是,一个小提琴。
  • 给出你的html代码

标签: html css hover html-lists


【解决方案1】:

您的 HTML 无效,您只能将 li 作为 ul 的直接子代

更改它并从:hover 规则中删除除font-sizebox-shadow 之外的所有内容(正是您仅删除的那些),并将padding 中的li 应用到a

ul li {
  list-style: none;
  position: relative;
  top: 55px;
  height: 30px;
  background: #212;
  float: left;
  width: 29%;
  margin: 1% 1% 0;
  border-radius: 30px 30px 0 0
}
ul li a {
  padding: 5px;
  display: block;
  color: white;
  text-align: center
}
ul li:hover a {
  box-shadow: 1px 1px 10px red;
  font-size: 20px;
}
<ul>
  <li>
    <a href="#">MENU</a>
  </li>
  <li>
    <a href="#">CARDS</a>
  </li>
  <li>
    <a href="#">CONTACT</a>
  </li>
</ul>

【讨论】:

  • 你测试过我的sn-p吗?只需将li 悬停在每个地方,它甚至可以在黑色背景下工作......这就是为什么将您的box-shadow 更改为红色,以加强这一点。您的 HTML 无效
  • 是的,它有效,但哪一行使整个 li,整个按钮成为链接?当我尝试没有你的 CSS 时,只有里面的文本是链接
  • 在我的回答中...在a 加上display: block 中填充
  • 再问一个问题,为什么我的 HTML 无效?这意味着什么?我的浏览器可以管理我的代码,但我猜它只是自动修复了它。
  • 【解决方案2】:

    将你的 ul li 包装在一个 div 中,并给那个 div 一个类。然后定位那个 div 的 ul li。

    HTML

    <div class="menu">
        <ul>
            <a href="#"><li>MENU</li></a>
            <a href="#"><li>CARDS</li></a>
            <a href="#"><li>CONTACT</li></a>
        </ul>
    </div>
    

    CSS

    .menu ul li:hover {
        position: relative;
        top: 55px;
        height: 30px;
        background: #212;
        display: inline-block;
        width: 29%;
        margin: 1%;
        margin-bottom: 0;
        padding: 5px;
        -webkit-border-top-right-radius: 30px;
        -moz-border-top-right-radius: 30px;
        -ms-border-top-right-radius: 30px;
        -o-border-top-right-radius: 30px;
        border-top-right-radius: 30px;
        -webkit-border-top-left-radius: 30px;
        -moz-border-top-left-radius: 30px;
        -ms-border-top-left-radius: 30px;
        -o-border-top-left-radius: 30px;
        border-top-left-radius: 30px;
    }
    

    或者针对a

    .menu ul a li:hover {/* your css */}
    

    【讨论】:

    • 问题在于悬停,我有那个 ul li:hover 代码,并且由于某种原因,字体大小也适用于“非活动”li。有趣的是,盒子阴影或定位部分只适用于我悬停的li。
    • html仍然无效
    【解决方案3】:

    首先你的 HTML 是错误的。 &lt;li&gt; 应该是 &lt;ul&gt; or &lt;ol&gt; 的直接子代,但你有 &lt;a href="#"&gt;&lt;li&gt;MENU&lt;/li&gt;&lt;/a&gt; 这个。第二,你可以像ul &gt; li:hover{enter your styles here}这样定位悬停元素,这里ul li {}使用这种风格ul li { vertical-align: top;},因为你使用的是inline-block所以你需要使用vertical-align

    这是小提琴https://jsfiddle.net/vwvsz291/

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签