当我处理ul / li元素时遇到一个奇怪的问题。

像这样非常简单的html / css



li {
  cursor: pointer;
}

li:hover {
  background-color: yellow;
}

li:focus {
  background-color: red;
  margin: 30px -20px;
}

<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.7/css/materialize.min.css" rel="stylesheet"/>
<ul class="collection">
  <li class="collection-item" onclick="window.alert('Click on li collection')" tabindex="0">Item 1</li>
  <li class="collection-item"  onclick="window.alert('Click on li collection')" tabindex="0">Item 2</li>
  <li class="collection-item"  onclick="window.alert('Click on li collection')" tabindex="0">Item 3</li>
</ul>





附言尝试代码:https://jsfiddle.net/vcbmbjx0/,似乎片段的css不能正常工作。

我想要的是在聚焦li元素时更改边距,但是似乎此更改打破了click事件的发出。 (当我在项目1和项目2的中间单击时,不会触发单击,但是会触发项目2的焦点效果...)

有人有想法么?

最佳答案

在点击发生之前,焦点的边缘似乎正在使您的元素移开。

如果删除边距,则可以使用:

.collection-item {
  cursor: pointer;
  &:hover {
    background-color: yellow;
  }
  &:focus {
    background-color: red;
    //margin: 30px -20px;  --> offending line
  }
}


https://jsfiddle.net/vcbmbjx0/2/

或按下鼠标的方式如上所述:

https://jsfiddle.net/vcbmbjx0/3/

09-16 12:57