name="viewport" width="device-width" 到底都是啥

2023-10-27

[TOC]
参考文件:CSS Pixel与绝对像素
参考文件:移动端适配- dpr浅析
参考文件:pixel is not a pixel is not a pixel
参考文件:此像素非彼像素
参考文件:关于HTML5中meta name=”viewport” 的用法
拓展链接:像素是什么

移动端页面渲染过程:

打开一个页面,移动端浏览器会自动寻找,如果指定了视窗口的width,就会把页面放到指定width的viewport里面。如果没有指定,则默认值有的是980,具体根据浏览器来定的。
<meta name=”viewport” content=”width=device-width, initial-scale=1, maximum-scale=1″>

上述代码可以解决这个问题。
width:控制 layout viewport 的大小,可以指定的一个值,如 600,或者特殊的值,如 device-width 为设备的宽度(单位为缩放为 100% 时的 CSS 的像素)。

viewport是什么?

一般来说,在移动浏览器上页面渲染是在一个叫viewport的页面绘制区域内。
手机浏览器把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机浏览器优化的网页的布局),用户可以通过平移和缩放来看网页的不同部分。

  • layout viewport:是网页的所有内容,他可以全部或者部分展示给用户。
  • visual viewport:是当前显示给用户内容的窗口,你可以拖动或者放大缩小网页。

viewport和屏幕的真实尺寸并不是对应的,如在Safari Mobile中viewport默认宽度(320px)是屏幕真实尺寸(640px)的一半,这里不管是用window.innerHeight还是window.screen.width拿到的都是320px。

当然我们可以通过meta设置改变viewport的比例,如initial-scale=.5就可以让viewport和屏幕一致的尺寸,这个比例在不同的手机上并不一定是2倍关系,特别是Android手机。而且改变viewport比例后可能会导致后续制作中出现一系列问题。另外Android系统中可以在viewport设置target-densitydpi=device-dpi让viewport的尺寸和屏幕真实尺寸保持一致,但iOS不起作用,所以这个方法不具有普遍性。不要纠结一定要拿到屏幕真实尺寸,就把viewport的尺寸当成屏幕的尺寸进行页面设计和制作肯定是没有问题的。

例如:当你打开一个960px设计的网页时,手机会根据css中的百分比进行缩放。比如总长960的页面,导航条是20%。(实际解析出来就是192px)但是你不可能每个属性都是百分比吧,比如文字大小。那么我用320px屏幕打开,导航条就成了64px了,但是我的字体大小是12px啊,完了,本来能显示很多汉字的(192/12)现在只能显示64/12个汉字了。

Apple找到了一个办法:在移动版(iOS)的Safari中定义了viewport meta标签①,它的作用就是创建一个虚拟的窗口(viewport),而且这个虚拟窗口的分辨率接近于桌面显示器,Apple将其定位为980px②。

①除此之外不同移动浏览器厂商也有不同的解决方案,例如UCweb就是使用中间件技术。
②不同的浏览器厂商对于layout viewport的大小定义不同

Safari iPhone: 980px
Opera: 850px
Android WebKit: 800px
IE: 974px

涉及显示的几个概念

物理像素与CSS像素

设备像素又称物理像素(physical pixel),设备能控制显示的最小单位,我们可以把这些像素看作成显示器上一个个的点。
CSS像素是Web编程的概念,独立于设备的用于逻辑上衡量像素的单位,也就是说我们在做网页时用到的CSS像素单位,是抽象的,而不是实际存在的。

分辨率(物理像素)

screen.height //screen.width返回显示设备的信息。
除非调整显示设备的分辨率,否则看作是常量。

(显示)分辨率就是屏幕上显示的像素个数,分辨率160×128的意思是水平像素数为160个,垂直像素数128个。

分辨率越高,像素的数目越多,感应到的图像越精密。

而在屏幕尺寸一样的情况下,分辨率越高,显示效果就越精细和细腻。

以分辨率为1024×768的屏幕来说,即每一条水平线上包含有1024个像素点,共有768条线,即扫描列数为1024列,行数为768行。

分辨率不仅与显示尺寸有关,还受显像管点距、视频带宽等因素的影响。其中,它和刷新频率的关系比较密切,严格地说,只有当刷新频率为“无闪烁刷新频率”,显示器能达到最高多少分辨率,才能称这个显示器的最高分辨率为多少。

PPI

pixels per inch所表示的是每英寸所拥有的像素(pixel)数目。

手机屏幕的PPI当达到一定数值时,人眼就分辨不出颗粒感了。

这个数值是多少?按照2010年前苹果公司CEO史蒂夫·乔布斯(Steve Jobs)在iPhone 4发布会上对视网膜技术的介绍:“当你所拿的东西距离你10-12英寸(约25-30厘米)时,它的分辨率只要达到300ppi这个‘神奇数字’(每英寸300个像素点)以上,你的视网膜就无法分辨出像素点了。”(即所谓的retina视网膜屏幕。之所以叫做视网膜屏幕,是因为屏幕的PPI(屏幕像素密度)太高,人的视网膜无法分辨出屏幕上的像素点。)

那么,是不是屏幕PPI超过这个数值就没有意义了?
==>除PPI之外,还看它的饱和度,渲染度。

DPR设备像素比

DPR(devicePixelRatio)是默认缩放为100%的情况下,设备像素和CSS像素的比值:

DPR = 设备像素 / CSS像素(某一方向上)
普通密度桌面显示屏的devicePixelRatio=1
高密度桌面显示屏(Mac Retina)的devicePixelRatio=2
主流手机显示屏的devicePixelRatio=2或3

因为大部分桌面显示器的devicePixelRatio为1,所以在PC端我们感受不出来CSS Pixel 与 物理像素的差别。
举个栗子来说,一张100x100的图片,通过CSS设置它width:100px; height:100px; 。在电脑上打开,没有什么问题,但是在手机上打开,屏幕按照逻辑分辨率来渲染,假设手机的devicePixelRatio=3,那么就相当于拿3个物理像素来描绘1个电子像素。这等于拿一个三倍的放大镜去看你的图片,你的图片可能因此变得模糊,因为细节不够。所以一般明智的做法是把图片换成300x300的,CSS宽高不变,这样在手机上展示时,CSS宽高换算成物理像素是300x300,你的图片也是300x300,就不会变糊了。

常用移动设备的PPI与DPR

IOS设备 PPI DPR
iPhone4 326 2
iPhone4s 326 2
iPhone5 326 2
iPhone5s 326 2
iPhone6 326 2
iPhone6s 326 2
iPhone6 PLUS 441 3
iPhone6s PLUS 441 3
iPad - - 2
iPad - - 3
android 尺寸 dpr
:—-: —–:
低清设备 1
- 1.5
- 1.75
- 2
mx2 800*1280 2.5
小米note 720*1280 2.75
- - 3
三星note4 - 4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

name="viewport" width="device-width" 到底都是啥 的相关文章

  • 线性代数-坐标系变换

    问题描述 已知一个全局坐标系 还有若干局部坐标系 如何将局部坐标系的坐标转成全局坐标系的坐标 反过来又如何进行 这里的坐标系都是直角坐标系 本文通过下面几个方面的研究来回答上面的问题 1 简单示例 2 求解过程 3 nodejs编程验证 简
  • 【数据结构与算法】数据结构知识点总结

    文章目录 前言 一 数组 一 知识点 二 常用操作代码示例 1 声明数组 2 初始化数组 3 访问数组元素 4 修改数组元素 5 遍历数组 6 数组作为函数参数 二 链表 一 知识点 二 常用操作代码示例 1 定义链表节点结构体 2 创建链
  • 从零开始到设计Python+Selenium自动化测试框架-如何开始

    如何开始学习web ui自动化测试 如何选择一门脚本语言 选择什么自动化测试工具 本人已经做测试快5年 很惭愧 感觉积累不够 很多测试都不会 三年多功能测试 最近两年才开始接触和学习自动化测试 打算写一个系列文章 关于如何从零开始到会设计和
  • 服务器修改编码格式,设置服务器编码格式

    设置服务器编码格式 内容精选 换一换 在异构计算架构中 昇腾AI处理器与CPU通过PCIe总线连接在一起来协同工作 Host CPU所在位置称为主机端 Host 是指与昇腾AI处理器所在硬件设备相连接的X86服务器 ARM服务器或者Wind
  • java基础之集合

    集合 基础里的重头戏来喽 一 集合概述 集合和数组的区别 概述 集合是java中用来存放多个 引用数据类型 数据的容器 它是解决了数组的一些弊端的一个多数据容器 他有 的操作集合的方法 比如增加和删除方法 java中集合的体系使用接口和类进
  • RAC重建OCR/Voting disk遇到的一些故障

    author skate time 2010 05 09 我的测试环境 母系统 win2003虚拟软件 vmware3 2 1guest系统 centos4 7oracle db oracle10 2 1 以下是我在重建rac的ocr vo
  • 全球分布式云大会:AntDB超融合流式实时数仓,打造分布式数据库新纪元

    日前 全球分布式云大会北京站在北京金茂万丽酒店举办 亚信科技AntDB数据库受邀参会 会上技术负责人北陌发表以 AntDB超融合流式实时数仓 打造分布式数据库新纪元 为主题的演讲 通过分享AntDB在数据库前沿技术的研发实践 与参会嘉宾一起
  • springboot的安全性

    如何实现 Spring Boot 应用程序的安全性 为了实现 Spring Boot 的安全性 我们使用 spring boot starter security 依赖项 并且必须添加安全配置 它只需要很少的代码 配置类将必须扩展WebSe
  • BM8 链表中倒数最后k个结点

    struct ListNode int val struct ListNode next ListNode int x val x next nullptr class Solution public 代码中的类名 方法名 参数名已经指定
  • 代码块11

    import numpy as np rot matrix 0 5 np asarray 1 1 1 1 1 1 1 1 np sqrt 2 np sqrt 2 0 0 0 0 np sqrt 2 np sqrt 2 判断矩阵是否正交 pr
  • flash开发ipa踩的坑

    1 xcode中找到libclang rt ios a添加到AIRSDK lib aot lib中 2 ios 打包ane 要添加 如果是 tbd则当dylib一样处理 去AIRSDK lib aot stub里面看有没有 dylib需要在
  • C++类和动态内存分配

    1 动态内存和类 静态数据成员在类声明中声明 在包含类方法的文件中初始化 初始化时使用作用域运算符来指出静态成员所属类 如果静态成员是整形或枚举型const 则可以在类声明中初始化 在构造函数中使用new来分配内存时 必须在相应的析构函数中
  • 高阶源码分析:ConcurrentHashMap

    高阶源码分析 ConcurrentHashMap 一 文章导读 这部分内容让大家读懂ConcurrentHashMap源码的底层实现从而在工作中合理去使用他并且在面试中能做到游刃有余 主要内容如下 核心构造方法 核心成员变量 put方法过程
  • html中图片左右切换,超简单的图片左右切换滑动

    网上看过很多图片左右切换滑动的效果 不过大都是使用插件实现 插件虽方便 但是对于新手的学习并不是最好的 本文使用jquery这个由原生的JavaScript封装的库 用最简短的代码实现此功能 效果预览如下图 代码部分 直接复制代码便可使用
  • c++数组长度函数length_数据结构-数组

    数组 在数组末尾插入元素 push let numbers 3 4 7 0 1 6 numbers push 11 14 返回数组长度 在数组开头插入元素 unshift numbers unshift 11 14 返回数组长度 手写一个
  • 带有Spring Boot和Spring Cloud的Java微服务

    朋友不允许朋友写用户身份验证 厌倦了管理自己的用户 立即尝试Okta的API和Java SDK 在几分钟之内即可对任何应用程序中的用户进行身份验证 管理和保护 Java是开发微服务架构时使用的一种很棒的语言 实际上 我们行业中的一些知名人士
  • 解决pip的ImportError: cannot import name ‘PackageFinder‘ from ‘pip._internal.index‘ (xxxx)

    问题描述 使用pip时报错 ImportError cannot import name PackageFinder from pip internal index xxxx 问题解决 直接更新 curl https bootstrap p
  • Kotlin 中初始化块、初始化的顺序、lateinit延迟初始化详解

    前些天发现了一个蛮有意思的人工智能学习网站 8个字形容一下 通俗易懂 风趣幽默 感觉非常有意思 忍不住分享一下给大家 点击跳转教程 1 初始化块 初始化块可以设置变量或值 以及执行有效性检查 如检查传给某构造函数的值是否有效 初始化块代码会
  • linux 回收站

    参考 28条消息 Linux中为其配置 回收站 刘瑜澄的博客 CSDN博客 rm命令将文件移至回收站 可跟多个参数 多个文件 文件夹 被移入回收站 设置了移入回收站不覆盖同名文件 如同名文件a txt按照123的顺序移入回收站 回收站中的文
  • React路由

    路由组件 Switch

随机推荐

  • 激活函数之logistic sigmoid函数介绍及C++实现

    logistic sigmoid函数 logistic sigmoid函数通常用来产生Bernoulli分布中的参数 因为它的范围是 0 1 处在 的有效取值范围内 logisitic sigmoid函数在变量取绝对值非常大的正值或负值时会
  • csharp:Learn how to post JSON string to generic Handler using jQuery in ASP.Net

  • C++:指针:void*指针(跳跃力未定的指针)

    先分享一段代码 觉得很有意思 include
  • Scala中使用SOFA jraft 实现rpc的优化 二

    背景 继第一版实现Processable宏之后 各方面已经满足需求 也正常使用 并引入进bitlap 使得我们能以方法的形式管理所有Processor对象 而不需要创建太多的类文件 但是细心的人会发现 为了实现这个小小的功能 我们在scal
  • leetcode刷题指南

    目录 排序类 Sort 入门题目 进阶题目 链表类 Linked List 基础题目 进阶题目 堆 Heap or Priority Queue 栈 Stack 队列 Queue 哈希表类 Hashmap Hashset Queue题目 S
  • 在MySQL客户端使用Tab健进行命令补全

    在MySQL客户端中 你可以使用Tab键进行命令补全 这将提高我们的效率 这与Linux命令行中的行为类似 例如 如果你输入SEL然后按Tab键 MySQL客户端会自动补全为SELECT 然而 需要注意的是 这个功能可能需要在MySQL客户
  • Linux环境变量

    env 查看所有与终端相关的环境变量 cat proc PID environ 查看所有进程运行时的相关变量 PID可以通过pgrep获得 pgrep gedit 获得进程gedit的进程号 得到的结果以null 0 分隔 如果想一行一条
  • js逆向爬取新榜资讯

    js逆向爬取新榜资讯 网址 https www newrank cn public news html 目标 获取所有的标题信息等 如图 接下来进行抓包 有三个post请求如图 打开第一个get包之后有两个加密的参数 分别是nonce和xy
  • C语言用结构体排序(学号,姓名,成绩)

    1那段代码也可以写成如下 struct Student name int paixu const void a const void b name aa name a name bb name b 2那段代码也可以写成这 return aa
  • Feign源码解析

    首先我要说的是springcloud没有rpc 这就涉及rpc和微服务的区别 springcloud的模块通信工具feign跟httpclient和okhttp是一样的东西 都是对http请求封装的工具 其实feign可以选择httpcli
  • matlab 对数据进行分类,使用深度学习对文本数据进行分类

    导入数据 导入工厂报告数据 该数据包含已标注的工厂事件文本描述 要将文本数据作为字符串导入 请将文本类型指定为 string filename factoryReports csv data readtable filename TextT
  • 解决win10相机无法使用,相机崩溃问题

    win10系统可能因很多原因无法使用 例如权限设置 或者win10系统本身问题 此教程教大家如何解决 1 进入电脑系统设置 在里面找到 隐私 并点击进入 2 进入隐私设置界面后 向下滑动找到 相机 并点击进入相机设置 3 在相机设置界面将
  • Reverse入门[不断记录]

    文章目录 前言 一 SWPUCTF 2021 新生赛 re1 二 SWPUCTF 2021 新生赛 re2 三 GFCTF 2021 wordy 花指令 四 NSSRound 3 Team jump by jump 花指令 五 NSSRou
  • win10家庭版没有组策略怎么办?

    转到知乎 https www zhihu com question 53834660 请将以下4行命令复制并粘贴到记事本中 另存为bat文件 之后右击以管理员身份运行即可 pushd dp0 dir b C Windows servicin
  • maven配置多仓库镜像

    maven配置多仓库镜像 问题场景 1 国内访问maven默认远程中央镜像特别慢 解释 因为maven默认的远程仓库是在国外的 2 用阿里的镜像替代远程中央镜像 3 大部分jar包都可以在阿里镜像中找到 部分jar包在阿里镜像中没有 需要单
  • QT 关于如何生成包含多个自定义类的DLL以及如果调用

    新年新气象 新年第一篇 近期想把几个常用的函数的生成dll 这样方便更新的时候 只更新dll就可以了 否则又是发布又是打包比较麻烦 网上有很多例子 不过大部分是简单调用个函数 我遇到的问题是函数中有多个自定义类 下面用两种方法来解决这一问题
  • S7-300哪些24V数字量输入模块需要电源,与电源如何连接

    西门子S7 300哪些24V数字量输入模块需要电源 与电源如何连接 下表说明了S7 300 PLC的24V数字量输入模块的电源插针连接 L M 不在此表上的S7 300 PLC数字量输入模块不需要外部电源 表1 S7 300 PLC模块电源
  • GBT9706.1中B型BF型和CF型各表示什么意思的啊?

    就拿心电仪为例 根据跟患者接触部件的应用部分的防电击分类 B型 BF型 CF型 F型应用部分具有更高的保护要求 漏电流 B代表身体 C代表心脏 B型设备 对电击有特定防护程度的设备 允许漏电流 保护接地连接 若有 的可靠性 BF型 有F型应
  • AI助力航母大变脸:无人机航母浮出海面

    来源 无人机 作者 魏岳江 2023年4月10日 土耳其打造的首艘 无人机航空母舰 正式入列海军 总统雷杰普 塔伊普 埃尔多安出席了这艘名为 阿纳多卢 号的轻型航母服役仪式 该航母长231米 宽32米 排水量逾2 7万吨 满载时最高航速20
  • name="viewport" width="device-width" 到底都是啥

    TOC 参考文件 CSS Pixel与绝对像素 参考文件 移动端适配 dpr浅析 参考文件 pixel is not a pixel is not a pixel 参考文件 此像素非彼像素 参考文件 关于HTML5中meta name vi