可通过CSS媒体查询orientation特性检测横竖屏:orientation: landscape匹配横屏(宽≥高),portrait匹配竖屏(高>宽),判断基于视口尺寸而非物理传感器;可叠加min-width等条件提升精度;JavaScript可用matchMedia或resize事件动态监听,需配合viewport meta标签确保生效。
可以通过 CSS 媒体查询中的 orientation 特性来检测设备是否处于横屏状态,并针对性地应用样式。
orientation: landscape 媒体查询这是最直接的方式,浏览器会根据视口宽高比自动判断方向:
landscape)portrait)示例:
@media (orientation: landscape) {
.header { font-size: 1.5rem; }
.sidebar { display: block; }
}
@media (orientation: portrait) {
.header { font-size: 1.2rem; }
.sidebar { display: none; }
}
max-width 或 min-height 提升准确性单纯用 orientation 在某些平板或折叠屏上可能不够精准(比如 1200×800 视口在横屏下也可能是“竖屏”比例)。可叠加断点增强控制:
示例:
@media screen and (min-width: 768px) and (orientation: landscape) {
.container { display: grid; grid-template-columns: 2fr 1fr; }
}
若需在运行时响应方向切换(如触发动画、重载数据),可用 JS 监听 resize 或 orientationchange 事件:
window.matchMedia("(orientation: landscape)") 可主动查询当前状态orientationchange 事件在 iOS Safari 中支持较好,但 Android 浏览器兼容性
resize 更通用简易监听示例:
function handleOrientation() {
const isLandscape = window.matchMedia("(orientation: landscape)").matches;
document.body.classList.toggle("is-landscape", isLandscape);
}
window.addEventListener("resize", handleOrientation);
handleOrientation(); // 初始化
确保 HTML 中有正确的 viewport meta 标签,否则媒体查询可能失效:
orientation 判断失准user-scalable=no 或固定 width,以免干扰方向检测