如何消除缩放至65%的iframe与后续元素之间的空白间距?
问题原因
CSS的transform: scale()属于视觉渲染层的变换,仅改变元素的显示效果,不会修改元素在正常文档流中占据的实际尺寸,所以外层div还是保留了缩放前的占位大小,就出现了多余空白。另外你原有代码里还存在两个隐性问题:一是.container-iframe未设置相对定位,内部绝对定位的iframe会以根元素为基准定位,导致外层容器尺寸计算异常;二是缩放原点设为center,缩放后元素上下都会产生额外留白。
修复方案
调整外层容器的定位属性、缩放原点,同时按缩放比例手动设置容器的实际占位高度即可,修复后的代码如下:
@media only screen and (min-width:768px){ .container-iframe{ /* 新增:让内部绝对定位的iframe以当前容器为基准 */ position: relative; width: 100%; /* 新增:16:9视频标准比例,缩放65%后按比例计算实际占位高度 */ height: calc(56.25vw * 0.65); -moz-transform: scale(0.65, 0.65); -webkit-transform: scale(0.65, 0.65); -o-transform: scale(0.65, 0.65); -ms-transform: scale(0.65, 0.65); transform: scale(0.65, 0.65); /* 改为从顶部居中开始缩放,避免顶部出现留白 */ -moz-transform-origin: top center; -webkit-transform-origin: top center; -o-transform-origin: top center; -ms-transform-origin: top center; transform-origin: top center; overflow: hidden; } .iframe-responsive{ bottom: 0; height: 100%; left: 0; position:absolute; right: 0; top: 0; width: 100%; /* 新增:去掉iframe默认边框 */ border: none; } } /* 小屏不需要缩放的话可以加这段适配 */ @media only screen and (max-width:767px){ .container-iframe{ position: relative; width: 100%; height: 56.25vw; } }
HTML代码无需改动,即可实现后续元素紧贴在iframe下方的效果。
内容的提问来源于stack exchange,提问作者tellme Oberlin
相关产品推荐
相关产品推荐

