奇思乎乎乎 iPhone 16e · 17 系列 · Air - 一束网址,折射万屏
100%

输入网址,立刻开始预览

预设:
自定义:

微信小程序的横屏适配

微信小程序默认锁定竖屏。想要横屏显示,必须在 app.json 或页面的 json 配置里显式开启。这是很多开发者第一次做横屏小程序踩的坑。

第一步:开启横屏。

{
  "pageOrientation": "auto"
}

auto 表示跟随系统旋转。landscape 表示强制横屏。可以配置在 app.json 的 window 里,也可以只对某一个页面生效(写在页面 json 里)。

第二步:处理横屏下的布局。

横屏时,屏幕的宽高会互换。原本的 375×667 变成 667×375。你的所有响应式规则都要重新审视:

  • rpx 的基准变了:横屏时 750rpx 对应的是屏幕高度还是宽度?微信的规则是 750rpx 始终对应屏幕宽度,但横屏下屏幕宽度变大了,所以同一元素会显得更宽。
  • 安全区位置变了:竖屏时顶部安全区在灵动岛附近,横屏时安全区跑到了左侧或右侧。
  • flex 布局可能要改方向:竖屏时竖排的卡片,横屏时改成横排更合理。

第三步:用媒体查询区分横竖屏。

@media (orientation: landscape) {
  .card-list {
    flex-direction: row;
  }
}

@media (orientation: portrait) {
  .card-list {
    flex-direction: column;
  }
}

第四步:安全区适配。横屏下 iOS 的 Home Indicator 在屏幕底部(竖屏时也在底部),但刘海/灵动岛跑到了屏幕左侧,会导致左侧内容被遮挡。用 env(safe-area-inset-left) 补齐。

在下方预览器输入小程序 H5 页面地址,同时对比竖屏和横屏,检查切换时的布局稳定性。

常见问题

微信小程序怎么开启横屏?
在 app.json 或页面 json 里加 "pageOrientation": "auto"(跟随系统)或 "landscape"(强制横屏)。默认是 portrait 竖屏。
小程序横屏时 rpx 还是 750 吗?
是的。微信的规则是 750rpx 始终对应屏幕宽度,横屏时屏幕宽度变大,所以同一个 rpx 值对应的物理像素也变大,元素视觉上会更宽。
横屏时刘海会遮挡内容吗?
会。横屏时刘海/灵动岛跑到了屏幕左侧,用 env(safe-area-inset-left) 补左侧内边距,避免内容被遮挡。同理底部用 env(safe-area-inset-bottom)。
横屏和竖屏可以分别用不同的布局吗?
可以。用 @media (orientation: landscape) 和 @media (orientation: portrait) 分别写样式。适合列表、卡片这类有明确横竖排倾向的组件。

相关工具