css3媒体查询中device-width和width的区别详解


Posted in HTML / CSS onMarch 27, 2020

1.device-width

定义:定义输出设备的屏幕可见宽度。

不管你的网页是在safari打开还是嵌在某个webview中,device-width都只跟你的设备有关,如果是同一个设备,那么他的值就不会变。

比如iphone6的device-width*device-height为375*667,而跟他的dpr等无关。

2.width

定义:定义输出设备中的页面可见区域宽度。

输出的是你的网页可见区域的宽高,假设你的网页是移动端网页嵌套在某个webview中,width实际上就是webview的宽高,如果在不同的浏览器中,width和height也有可能不一样,又假如,你的页面用的rem布局,并且对于retina屏来说dpr>1,meta标签中设置了content="width=device-width, initial-scale=0.5, minimum-scale=0.5, maximum-scale=0.5, user-scalable=no,viewport-fit=cover",你的iphone6上的width大小就为750px了。

我这里用得比较用得多的是device-width和device-height,因为不用考虑横屏的情况

比如说适配iphoneX,你已经明确知道了iphoneX(375*812)的尺寸就可以用下面语句:

/*iphone x*/
@media only screen and (device-width:375px) and (device-height:812px) and (-webkit-device-pixel-ratio:3) {
    .foriphoneX()
}

又比如最新的三星折叠屏

@media screen and (device-width: 586px) and (device-height: 820px){
    html{
        font-size: 110px !important;
    }
}

总之,device-width在一个设备中是不会变的,他的值跟设备宽度有关,width在不同的布局方案或者不同的容器中展示都有可能不一样,这里我觉得device-width就相当于js的window.screen.width,width相当于js的document.body.clientWidth了。

另外记录一下我这里适配华为折叠屏的情况,由于此时还没真机,我只知道华为展开情况下的分辨率为2200*2480,dpr什么的还不清楚,因此不知道device-width和device-height(我这边不能用width来做查询,原因关系到业务逻辑),因此选了device-aspect-ratio,

最开始我在我的less中是这样写的

@media (device-aspect-ratio: 55/62) {
    /*适配*/
}

然后css中device-aspect-ratio被计算成小数了

@media (device-aspect-ratio: 0.887097) {
    /*适配*/
}

device-aspect-ratio是不支持小数的,因此匹配不上

所以查了一下怎么让less不执行55/62的结果,发现将属性用引号包起来,并且前面加上波浪号就可以了,像这样:

@media (device-aspect-ratio: ~"55/62") {
    /*适配部分*/
}

问题解决!

不过MDN上已经不推荐使用device-aspect-ratio了,这个属性将会被逐废弃,如果找到了更好的解决方案我也会用替代方案。

到此这篇关于css3媒体查询中device-width和width的区别详解的文章就介绍到这了,更多相关css3 device-width width内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

HTML / CSS 相关文章推荐
CSS3中Transform动画属性用法详解
Jul 04 HTML / CSS
CSS3+JavaScript实现炫酷呼吸效果的示例代码
Jun 15 HTML / CSS
html5 学习简单的拾色器
Sep 03 HTML / CSS
调用HTML5的Canvas API绘制图形的快速入门指南
Jun 17 HTML / CSS
a标签下载链接的简单实现
Sep 13 HTML / CSS
HTML5实现可缩放时钟代码
Aug 28 HTML / CSS
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
Oct 26 HTML / CSS
html5 冒号分隔符对齐的实现
Jul 31 HTML / CSS
5分钟实现Canvas鼠标跟随动画背景
Nov 18 HTML / CSS
canvas实现烟花的示例代码
Jan 16 HTML / CSS
聊聊CSS粘性定位sticky案例解析
Jun 01 HTML / CSS
使用CSS自定义属性实现骨架屏效果
Jun 21 HTML / CSS
css3 flex实现div内容水平垂直居中的几种方法
Mar 27 #HTML / CSS
浅析CSS3 中的 transition,transform,translate之间区别和作用
Mar 26 #HTML / CSS
css3 中translate和transition的使用方法
Mar 26 #HTML / CSS
CSS3 不定高宽垂直水平居中的几种方式
Mar 26 #HTML / CSS
使用 CSS3 中@media 实现网页自适应的示例代码
Mar 24 #HTML / CSS
css3通过scale()、rotate()实现放大、旋转
Mar 19 #HTML / CSS
CSS3属性 line-clamp控制文本行数的使用
Mar 19 #HTML / CSS
You might like
德生PL330的评价与改造
2021/03/02 无线电
杏林同学录(五)
2006/10/09 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
php封装的图片(缩略图)处理类完整实例
2016/10/19 PHP
实例讲解PHP表单处理
2019/02/15 PHP
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
jquery Validation表单验证使用详解
2020/09/12 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
解析vue中的$mount
2017/12/21 Javascript
JavaScript实现随机五位数验证码
2019/09/27 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
Python实现注册登录系统
2017/08/08 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
python实现滑雪游戏
2020/02/22 Python
python 对xml解析的示例
2021/02/27 Python
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
简述安装Slackware Linux系统的过程
2012/01/12 面试题
毕业自我鉴定总结
2014/03/24 职场文书
保护野生动物倡议书
2014/05/16 职场文书
廉政承诺书范文
2015/04/28 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
Python中的 Set 与 dict
2022/03/13 Python