问题描述
我正在尝试对元素进行大规模CSS转换动画,以使其显示/消失。转换的大小很大,因为在转换期间,元素可能变得比屏幕大,从而影响滚动条。
我希望它不影响滚动条,同时仍允许页面具有滚动条(因此主体/溢出:隐藏是不可选项)。
我能想到的最好的办法是有一个整页的div,隐藏溢出,并在那里运行效果,但是这意味着将元素移出其正常的DOM,这将中断所有CSS样式,具体取决于其父元素元素/类。
我尝试的另一种方法是使用“位置:固定”从流中删除元素,它消除了滚动条问题,但是这样做会影响页面上其他元素的布局(因为它们将被移动以填充新元素在布局中创建了“孔”。
是否还有另一种选择来表示元素可以溢出其父元素,同时又不影响其父元素的边界框(从而不触发任何滚动条)?
解决方法
解决方案是在动画元素上使用“位置:固定”,并在父元素上使用非静态位置。
尽管该功能在Firefox中有效,但只能在Chromium浏览器中使用(至少86个):您必须强制重排以确保考虑到“位置:固定”,否则滚动条仍将受到影响。
然后是伪代码
elem.style.position = 'fixed';
if ( (elem.parentNode.style.position || 'static') == 'static) {
elem.parentNode.style.position = 'relative';
}
// Force a reflow,so that the position change is taken into account for the animation
window.getComputedStyle(container.firstChild).width;
elem.animate(... your animation here ...);
另外,使用“ position:fixed”将元素从流程中移出,这将影响其他元素的布局。为避免这种情况,有必要插入相同大小的占位符元素。