如何在16:9比例视频上实现自适应窗口的响应式div精准定位
解决方案
核心思路是让包裹视频和定位元素的父容器#video-container始终保持16:9宽高比,且尺寸和实际渲染的视频区域完全重合,此时子元素的百分比定位会自动跟随视频同步缩放,位置始终精准。
修改后的完整CSS代码
/* 首先修正原有CSS的错误:#video-obj本身就是video元素,不需要再加后代选择器video */ #video-container { position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto; /* 固定16:9宽高比 */ aspect-ratio: 16/9; /* 最大宽高不超过窗口,保证始终完整显示在视口中 */ max-width: 100vw; max-height: 100vh; overflow: hidden; } #video-obj { width: 100%; height: 100%; /* 保证视频不变形,填满容器 */ object-fit: cover; } /* 两个定位div的原有百分比参数不用修改,现在百分比是相对于16:9的父容器,和视频完全匹配 */ #positioned-div1 { position: absolute; left: 55%; top: 53%; width: 24%; height: 24%; background-color: rgba(38, 0, 255, 0.5); z-index: 1; } #positioned-div2 { position: absolute; left: 38%; top: 45%; width: 16%; height: 25%; background-color: rgba(0, 0, 0, 0.5); z-index: 1; }
低版本浏览器兼容方案
如果需要兼容不支持aspect-ratio属性的旧浏览器,可以把#video-container的aspect-ratio: 16/9替换为padding实现方案:
#video-container { position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto; max-width: 100vw; /* padding-top百分比是相对于宽度的,9/16=56.25%,刚好对应16:9比例 */ height: 0; padding-top: 56.25%; overflow: hidden; } /* 同时给video加绝对定位,保证视频占满容器 */ #video-obj { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }
修改后不管窗口是过宽还是过窄,#video-container都会保持16:9居中显示,和视频的实际渲染区域完全重合,两个定位div不会再出现偏移、拉伸错位的问题。
内容的提问来源于stack exchange,提问作者Erlend K.H.
相关产品推荐
相关产品推荐

