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 按钮样式简单可扩展创建
Mar 18 HTML / CSS
使用CSS3实现圆角,阴影,透明
Dec 23 HTML / CSS
解决CSS3的opacity属性带来的层叠顺序问题
May 09 HTML / CSS
CSS3+JavaScript实现炫酷呼吸效果的示例代码
Jun 15 HTML / CSS
详解css3中dispaly的Grid布局与Flex布局
Sep 11 HTML / CSS
HTML5 canvas绘制的玫瑰花效果
May 29 HTML / CSS
HTML5 video 事件应用示例
Sep 11 HTML / CSS
H5 canvas实现贪吃蛇小游戏
Jul 28 HTML / CSS
h5页面唤起app如果没安装就跳转下载(iOS和Android)
Jun 03 HTML / CSS
canvas版人体时钟的实现示例
Jan 29 HTML / CSS
css3实现的加载动画效果
Apr 07 HTML / CSS
CSS3实现列表无限滚动/轮播效果
Jun 23 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
PHP5+UTF8多文件上传类
2008/10/17 PHP
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
php获取当前时间的毫秒数的方法
2014/01/26 PHP
php实现encode64编码类实例
2015/03/24 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
js 提交和设置表单的值
2008/12/19 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
document.getElementBy("id")与$("#id")有什么区别
2013/09/22 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
Vue登录注册并保持登录状态的方法
2018/08/17 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
Python中的取模运算方法
2018/11/10 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
对Python中 \r, \n, \r\n的彻底理解
2020/03/06 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
经济系大学生求职信
2013/10/01 职场文书
建国大业电影观后感
2015/06/01 职场文书
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js