你如何使用list-style-type:none正确地将hover css应用于<li>元素?

Tho*_*ton 3 css

我有一个列表,每个列表项有两个锚标记,一个向左浮动,另一个向右浮动.当包含元素的list-style-type是disc时,在两个元素之间悬停可以正常工作.但是如果list-style-type更改为none,则当你在元素之间悬停时,li:hover css似乎不适用.

我已在最新版本的Chrome,Firefox和Internet Explorer中确认了此问题.

ul{
    list-style-type: disc;
    /* Replace the previous line with the one below.
        The hover styling no longer applies when the cursor is between anchor tags. */
    /* list-style-type: none; */
}

li{
    clear:both;
}

.left{
    float: left;
}

.right{
    float: right;
    opacity: 0;
}

li:hover > a{
    text-decoration: underline;
    opacity: 1 !important;
}
Run Code Online (Sandbox Code Playgroud)
<ul>
    <li>
        <a class="left">Option 1</a>
        <a class="right">Only</a>
    </li>
    <li>
        <a class="left">Option 2</a>
        <a class="right">Only</a>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/thomaslangston/xh7r9b68/

Mar*_*det 6

问题很有趣.在您的代码段中,浮动两个子元素,以便将它们从常规内容流中取出.

在第一个示例中,如果光盘显示,则li包含内容,因此您可以使用一些高度.

如果你拿出套装list-style-type: none,子弹/圆盘已经消失,li现在没有高度,所以悬停不会做任何事情.

如果您向边框添加边框,则更清晰li.您可以通过添加overflow: autoli包含浮动来修复问题,以便li保留非零高度.

请参阅下面的两个示例,第一个显示光盘,第二个没有.

请注意,如果添加边框,则在边界移动时会激活悬停(鼠标定位需要一些精确度).

ul.ex1 {
list-style-type: disc;
}
ul.ex2 {
list-style-type: none;
}
li {
  clear: both;
  border: 1px dotted gray;
}
ul.ex2 li {
  overflow: auto;
}
.left {
  float: left;
}
.right {
  float: right;
  opacity: 0;
}
li:hover > a {
  text-decoration: underline;
  opacity: 1 !important;
}
Run Code Online (Sandbox Code Playgroud)
<ul class="ex1">
  <li>
    <a class="left">Option 1</a>
    <a class="right">Only</a>
  </li>
  <li>
    <a class="left">Option 2</a>
    <a class="right">Only</a>
  </li>
</ul>

<ul class="ex2">
  <li>
    <a class="left">Option 1</a>
    <a class="right">Only</a>
  </li>
  <li>
    <a class="left">Option 2</a>
    <a class="right">Only</a>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)