在驾驶舱、大屏项目中,使用 1920 × 1080 + transform scale 适配方案非常常见。
它稳定、高效、还原度高
但上线后经常遇到一个问题:
超宽屏左右留白例如这些屏幕:
2560 × 1080
3440 × 1440
3840 × 1080
拼接屏
因为这些屏幕比例远大于:
16 : 9所以页面按最小比例缩放后,高度刚好撑满,宽度剩余大量空白区域。
本文分享几种真实项目中解决超宽屏留白的方案。
一、为什么会留白?
标准设计稿:
1920 × 1080屏幕:
3440 × 1440计算:
3440 / 1920 = 1.79
1440 / 1080 = 1.33最终取最小值:
scale = 1.33页面宽度变成:
1920 × 1.33 = 2553px而屏幕宽度是:
3440px剩余:
约 887px于是左右留白。
二、方案一:左右增加装饰区域
最实用、最美观的方案。
把空白区域设计成:
背景科技纹理
动态粒子
企业 Logo
时间天气
滚动公告
辅助图表
示意:
| 装饰区 | 主内容区(1920) | 装饰区 |优点
不破坏主页面结构
页面更美观,有主次
实战项目常用
三、方案二:主内容区横向拉伸扩展
让中间区域自适应变宽:
采用 Grid 布局,左右两侧固定宽度,中间自适应,尽量占满宽度
原布局:
420px | 中间1080px | 420px超宽屏改成:
420px | 自适应剩余宽度 | 420px例如:
grid-template-columns: 420px 1fr 420px;优点
利用全部宽度
页面更饱满
缺点
原设计稿会被打破,开发和UI都需要重新设计
四、方案三:检测超宽屏切换专用布局
如果是大型项目建议这种方式
判断比例:
const ratio = window.innerWidth / window.innerHeight如果大于某个值:
ratio > 2启用超宽屏布局。
if (ratio > 2) {
document.body.classList.add('wide-screen')
}然后单独写样式:
.wide-screen .center-box {
width: 1600px;
}优点
精准适配超宽屏
普通屏幕不受影响
企业项目非常常见
缺点
需要维护两套样式。
五、方案四:背景铺满,内容居中
主内容仍保持 1920 宽度,背景全屏。
例如:
body {
background-size: cover;
}主页面居中:
左右空白看起来像背景区,而不是留白优点
实现简单。
缺点
只是视觉优化,不是真适配。
六、方案五:允许局部裁切铺满屏幕
直接取最大值(取最大值会导致屏幕铺满,内容裁切):
scale = Math.max(ww, wh)这样宽度铺满,但高度可能超出。
优点
无留白。
缺点
页面被裁切
底部内容丢失
不建议
七、我的实战建议
驾驶舱项目推荐:
正常屏幕:1920缩放方案
超宽屏:切换宽屏布局
左右区域增加装饰内容组合效果最好。
八、Vue3 实战代码
const setScreenMode = () => {
const ratio = window.innerWidth / window.innerHeight
if (ratio > 2) {
document.body.classList.add('wide-screen')
} else {
document.body.classList.remove('wide-screen')
}
}
window.addEventListener('resize', setScreenMode)
setScreenMode().wide-screen .layout {
grid-template-columns: 460px 1fr 460px;
}九、最终推荐方案
十、总结
超宽屏留白不是 Bug,而是比例差异导致的正常现象。
真正优秀的驾驶舱项目,不是消灭留白,而是合理利用留白。
我的建议:
把留白区域做成设计的一部分。
这才是最好的实现方案。