CSS grid-template-rows 在悬停时自动将滚动位置重置到底部

标签 css grid overflow css-grid

每当您将鼠标悬停在具有 overflowauto heightgrid-template-rows 部分中的任何元素上时,这是否是预期的行为> 将 scroll 位置移动到溢出容器的底部(在本例中为 body)?

最明显的滚动破坏效果是当您在 2 个 li 元素之间画圈并尝试在代码段 #1 上向上或向下滚动时。

当我删除 li 上的 :hover 时,滚动不会中断。

.container{
  display: grid;
  grid-template-rows: 10vh auto 8vh;
  width: 400px;
  height: 300px;
  background: rgba(0,0,0.2);
}

.header{
  background: lightblue;
}

.body{
  background: white;
  overflow: auto;
}

.footer{
  background: lightgreen;
}

li{
  height: 30px;
  background: rgba(0,0,0,.5);
  opacity: 1;
}
li:nth-child(even){
  background: rgba(0,0,0,.2);
}

li:hover{
  opacity: .1;
}
<div class="container">
  <div class="header">header</div>
  <div class="body">body
  <ul>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
  </ul>
  </div>
  <div class="footer">footer</div>
</div>

另一方面,如果您将中间值硬编码为 40vh 而不是 auto 滚动将按预期工作。

.container{
  display: grid;
  grid-template-rows: 10vh 40vh 8vh;
  width: 400px;
  height: 300px;
  background: rgba(0,0,0.2);
}

.header{
  background: lightblue;
}

.body{
  background: white;
  overflow: auto;
}

.footer{
  background: lightgreen;
}

li{
  height: 30px;
  background: rgba(0,0,0,.5);
  opacity: 1;
}
li:nth-child(even){
  background: rgba(0,0,0,.2);
}

li:hover{
  opacity: .1;
}
<div class="container">
  <div class="header">header</div>
  <div class="body">body
  <ul>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
    <li>foo</li>
  </ul>
  </div>
  <div class="footer">footer</div>
</div>

最佳答案

grid-template-* 属性 ( example ) 上使用 auto 值时,我注意到 CSS Grid 中出现了一些奇怪的行为。对我来说一直有效的方法是从 auto 切换到 1fr

关于CSS grid-template-rows 在悬停时自动将滚动位置重置到底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44201372/

相关文章:

asp.net - 在 MVC 中单击图像中的链接

wpf - 如何阻止 WPF Grid 在子元素上自动插入边距

rust - 插入排序算法给出溢出错误

css - 使用 Jquery 和 CSS 方向属性动画滚动条

javascript - 滚动时的 jQuery 导航栏过渡。如何调整特定的过渡点

html - Safari 10 溢出 + 倾斜错误

graphics - 在 Mathematica 中排列和显示网格的各个部分

javascript - 根据溢出隐藏和显示一些div

javascript - 响应式 YouTube 嵌入未在 Firefox 中显示

wpf - ColumnDefinition 在调整大小之前不会扩展