【发布时间】:2022-06-29 11:46:06
【问题描述】:
我有一个包含可变数量列表项的无序列表。 <ul> 的高度是固定的(实际上是单行文本的高度)并设置为overflow-y: scroll。
当我滚动鼠标滚轮时,会经过一定的垂直距离。我想让它逐行滚动,以确保<li> 始终正确居中在<ul> 的可见部分。
:root {
--default-line-height: 24px;
}
.myUl {
background-color: lightblue;
height: var(--default-line-height);
list-style-type: none;
overflow-y: scroll;
outline: 1px solid black;
}
.myLi {
font-size: var(--default-line-height);
}
<ul class="myUl">
<li class="myLi">Lorem ipsum dolor sit amet</li>
<li class="myLi">Aenean commodo ligula eget dolor.</li>
<li class="myLi">Cum sociis natoque penatibus</li>
<li class="myLi">Donec quam felis, ultricies nec</li>
<li class="myLi">Nulla consequat massa quis enim.</li>
<li class="myLi">Donec pede justo, fringilla vel</li>
<li class="myLi">In enim justo, rhoncus ut</li>
</ul>
<p>Please scroll the blue area.</p>
我玩过scroll-snap,但没有真正成功。动画“感觉”很尴尬,它仍然滚动多行。我可能可以用scroll 构建一些东西,但这似乎不必要地麻烦。
在某些条件下能够逐行滚动似乎是合理的。类似列表的控件(例如下拉菜单)在许多框架中都显示了这种行为。我不会认为这需要的不仅仅是一些聪明的 css...
更新: 下面的Feroz’s answer 仅解决了问题的捕捉方面。仍然可以一次滚动多行。
【问题讨论】:
-
"[It] 感觉很尴尬" 这可能是因为一开始就修改默认滚动行为是糟糕的用户体验,因为你迫使用户放弃控制如何他们希望首先查看您的内容。在没有特别好的理由的情况下偏离这样的既定规范通常不是一个好主意。
-
@esqew 绝对正确!但我尝试输出某种日志。让列表项偏离中心也不是特别好的用户体验。
标签: javascript html css