【发布时间】:2014-06-27 14:53:32
【问题描述】:
在使用 Chrome 开发网站时注意到以下行为:当我在页面完全滚动到底部时刷新页面时,我可以观察到垂直跳跃。
请参阅以下Bootply。
要重现,请打开全屏预览(右侧的监视器图标),然后尝试以下操作:
- 刷新页面(确认表单重新提交)-->不跳转
- 滚动到中间,刷新(确认表单重新提交)-->不跳转
- 滚动到最底部,刷新(确认表单重新提交)-->垂直跳转
跳转实际上是由于当页面包含.align-center类的图形时,这个试图保持垂直节奏的Javascript引起的:
$(document).ready(function() {
$(window).resize(function() {
var baseline = parseInt($('body').css('line-height'), 10)
$('.align-center').each(function() {
var height = $(this).outerHeight();
console.log(height)
var bottom = baseline - (height % baseline);
if (bottom != 0)
{
bottom += parseInt($(this).css('padding-bottom'), 10)
$(this).css('padding-bottom', bottom);
}
});
}).trigger("resize");
});
当然,删除此 Javascript 也会删除观察到的垂直跳跃。 我不明白的是,当 DOM 准备好时会应用填充,因此它不应该导致可见的垂直跳跃。我认为跳转与当页面滚动到最底部时 Chrome 处理视口的方式有关,但我真的不知道如何确认/确认这一点。
在 Firefox 或 Safari 中尝试此操作时,我没有观察到任何跳跃。
有什么想法吗?
【问题讨论】:
-
我不知道我的 chrome 安装是否存在某种问题,但即使我完全删除 js 并添加 * { margin: 0 !important; 也会看到跳转填充:0!重要;高度:自动!重要;最小高度:0!重要; }
-
我认为您正在尝试将图像容器高度转换为 20 的倍数(行高)。如果这是正确的,那么你的计算是错误的。 300 是 20 的倍数,在这种情况下不需要填充。
-
一种可能的解决方法是附加到 onscroll 事件并确保页面始终位于最底部上方至少一个像素。
标签: google-chrome scroll padding vertical-rhythm