css - @media横竖屏

本文探讨了如何使用CSS媒体查询来区分横屏与竖屏显示,并介绍了在屏幕方向改变时,如何保持em和rem单位的正确性。此外,文章还提供了一种使用JavaScript监听屏幕方向变化的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@media screen and (orientation: portrait) {
	/* 竖屏 */
}
@media screen and (orientation: landscape) {
	/* 横屏 */
}

 请注意! 在横竖屏切换的时候, 使用em单位和rem单位的(特别是根据屏幕宽度计算的rem)是不变的,也就是说如果一开始用户是竖屏浏览, 我们计算出屏幕宽度(屏幕短边)=10rem, 那么在用户切换横屏的时候, 仍然是(屏幕短边)=10rem! 这时候需要绑定onorientationchange(屏幕翻转事件)进行重新计算, 并刷新页面


另外, 如果你写在两个css中, 那么引用的时候要这么写

<link rel="stylesheet" media="all and (orientation:portrait)" href="竖屏.css">  /* 伪代码, 写中文一眼就理解 */
<link rel="stylesheet" media="all and (orientation:landscape)" href="横屏.css">

还有一种用js事件判断的(参考 https://www.w3cways.com/1772.html, 侵删)

//判断手机横竖屏状态:
window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", function() {
        if (window.orientation === 180 || window.orientation === 0) { 
            alert('竖屏状态!');
        } 
        if (window.orientation === 90 || window.orientation === -90 ){ 
            alert('横屏状态!');
        }  
    }, false); 
//移动端的浏览器一般都支持window.orientation这个参数,通过这个参数可以判断出手机是处在横屏还是竖屏状态。
注: window.orientation是获取当前用户设备旋转了多少度. 0代表一开始加载时的位置, -90就是向左旋转了, 180就是头朝下, 90度就是向右旋转了

以上!

在UniApp中,当你想要根据横屏(landscape)和竖屏(portrait)模式来切换CSS样式,可以采用媒体查询(Media Queries)配合变量的方式。以下是一个基本示例: 首先,创建两个CSS文件分别针对竖屏(`styles.portrait.css`) 和 横屏(`styles.landscape.css`): 对于竖屏样式: ```css /* styles/portrait.css */ body { /* 你的竖屏专属样式 */ background-color: #f00; /* 示例红色背景 */ } @media (orientation: portrait) { /* 这些规则只在竖屏下生效 */ .specific-class { /* 屏幕宽度小于640px的样式 */ } } ``` 对于横屏样式: ```css /* styles/landscape.css */ body { /* 你的横屏专属样式 */ background-color: #0f0; /* 示例绿色背景 */ } @media (orientation: landscape) { /* 这些规则只在横屏下生效 */ .specific-class { /* 屏幕宽度大于640px的样式 */ } } ``` 然后在你的uni-app项目中,根据屏幕方向动态引入相应的CSS文件: ```javascript import Vue from 'vue'; import App from './App.vue'; // 在入口文件 main.js 中 const isPortrait = uni.getSystemInfoSync().window && uni.getSystemInfoSync().window.screen.orientation === 'portrait'; let styleSheet; if (isPortrait) { styleSheet = require('./styles/portrait.css'); } else { styleSheet = require('./styles/landscape.css'); } // 绑定到全局 Vue 实例上,以便所有组件都能访问 Vue.prototype.$styleSheet = styleSheet; new Vue({ render: h => h(App), }).$mount('#app'); ``` 这样,当屏幕方向发生变化时,样式会自动切换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值