问题:

为什么在手机上打开一个PC web页面,用手机打开一个宽度为980的固定布局页面,页面会默认缩放到刚好满屏显示,并不会出现横向滚动条?

一:设备像素和CSS像素区别

现代浏览器中实现缩放的方式无怪乎都是「拉伸」像素。所以,元素的宽度并没有从128个像素被修改为256个像素;相反是实际像素被放大了两倍。形式上,元素仍然是128个CSS像素宽,即使它占据了256个设备像素的空间。

换句话说,放大到200%使一个CSS像素变成为一个设备像素的四倍。(宽度2倍,高度2倍,总共4倍)

在缩放比例100%的情况下一个CSS像素完全等于一个设备像素。

二、为桌面设计的网页在手机上如何显示?

先说一下PC web的两种布局,一般的网页如果用固定布局都会定义好整个页面的宽度,常见的宽度是980px,当屏幕分辨率的宽度大于980px的时候,如:1024*768,页面就居中,两边留白;如果屏幕分辨率小于980px的时候,如:800*600,页面就会出现横向的滚动条,这应该是所有前端开发人员都不希望出现的,所幸的是目前大多数显示器的屏幕分辨率都是1024*768以上的,所以宽度为980px的固定布局是安全又放心的。而如果用流动布局做网页的话一般要自应适不同的分辨率满屏显示以让内容区域达到最大化,流动布局的例子有很多,如邮箱、博客园等等。

在显示面积上手机屏幕相对桌面显示器要小很多,在几年前(现在也如此)大部分网站都是为桌面显示器浏览而设计,很少考虑到适应手机屏幕,所以如果用手机浏览大多网站时会出现问题,比如常见固定宽度的网页会出现横向竖向滑动条,当然这不算什么大问题;但如果是浏览流动布局的网页那情况会非常糟糕,设想一个宽度为 30% 的侧边栏对于 320px 手机屏幕而言也就 96px,只能容纳八个 12px 的汉字,可阅读性非常差。

接下来说说手机上打开一个PC web页面,用手机打开一个宽度为980px的固定布局页面,页面会默认缩放到刚好满屏显示,并不会出现横向滚动条,这个现象并不让我感到奇怪,我认为这是手机厂商的一些设定造成的,但关键是做了什么“手脚”,后来网上查阅了很多资料知道这是因为浏览器的两个viewport:layout viewport & visual viewport

三、layout viewport

手机浏览器在显示网页时,会在设备屏幕(设备分辨率)上创建一个980px(css像素)的虚拟窗口,然后使用该虚拟窗口显示网页,所以网站会缩小显示。一般把这个虚拟窗口称为layout viewport。

说白了其实就是把980px的CSS像素装进了320px(假设手机分辨率是320px)的设备像素下。

layout viewport的默认值:

四、为什么要使用viewport?

有了 layout viewport 似乎解决手机浏览网页的难题,但如果遇到专门为手机优化的网页就又有新的问题:

即为 iPhone 的 layout viewport 默认为 980px,导致专为其优化的 320px 宽的页面只能以缩放的方式显示(只占手机的30%),这时就需要对 layout viewport 进行设置:

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>

这一meta标签的功能就是设置layout viewport为device-width的宽度。
即当你的设备宽度为320px时,我的layout viewport的值也为320px,显示网页虚拟窗口和设备宽度一样,不需要再缩放了。也就是也这个设备专门设计的320px宽的网站可以非常正常的使用了。

当然如果这个网站是1000px的话,在手机上使用该viewport在手机上显示还是会缩放的。

关于viewpoint的疑惑的更多相关文章

  1. Atitit 图像处理的心得与疑惑 attilax总结

    Atitit 图像处理的心得与疑惑 attilax总结 1.1. 使用类库好不好??还是自己实现算法1 1.2. 但是,如果遇到类库体积太大,后者没有合适的算法,那就只能自己开发算法了1 1.3. 如 ...

  2. 每日一记-mybatis碰到的疑惑:String类型可以传入多个参数吗

    碰到一个觉得很疑惑的问题,Mybatis的parameterType为String类型的时候,能够接收多个参数的吗? 背景 初学Mybatis的时候,看的教程和书籍上都是在说基本的数据类型如:int. ...

  3. 解决上一篇jquery中on的疑惑

    内容都是来自:http://www.365mini.com/page/jquery-on.htm.这里做一下收藏.文章的最后  疑问和解答可以解决所有的疑惑  看了之后能更好的整篇文章. on()函数 ...

  4. ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?

    前言 事情不太多时,会时不时去看项目中同事写的代码可以作个参考或者学习,个人觉得只有这样才能走的更远,抱着一副老子天下第一的态度最终只能是井底之蛙.前两篇写到关于断点传续的文章,还有一篇还未写出,后续 ...

  5. Python处理json格式的数据文件(一些坑、一些疑惑)

    这里主要说最近遇到的一个问题,不过目前只是换了一种思路先解决了,脑子里仍然有疑惑,只能怪自己太菜. 最近要把以前爬的数据用一下了,先简单的过滤一下,以前用scrapy存数据的时候为了省事也为了用一下它 ...

  6. SQL Server中的索引结构与疑惑

    说实话我从没有在实际项目中使用过索引,仅知道索引是一个相当重要的技术点,因此我也看了不少文章知道了索引的区别.分类.优缺点以及如何使用索引.但关于索引它最本质的是什么笔者一直没明白,本文是笔者带着这些 ...

  7. python的正则表达式 re-------可以在字符串前加上 r 这个前缀来避免部分疑惑,因为 r 开头的python字符串是 raw 字符串,所以里面的所有字符都不会被转义

    正则表达式使用反斜杆(\)来转义特殊字符,使其可以匹配字符本身,而不是指定其他特殊的含义.这可能会和python字面意义上的字符串转义相冲突,这也许有些令人费解.比如,要匹配一个反斜杆本身,你也许要用 ...

  8. jquery 清除动画队列不疑惑

    $(this).siblings().stop().fadeTo(200, 0.3); jquery动画存在一个队列, 会把事件产生的动画 放在一个队列中,当来不及执行这些事件队列的时候,会在事件结束 ...

  9. 对Joint Training of Cascaded CNN for Face Detection一文的几点疑惑

    最近读了Joint Training of Cascaded CNN for Face Detection这篇论文,论文中把之前人脸检测使用到的cascade cnn,从分开训练的模式,改为了联合训练 ...

随机推荐

  1. Linux下autoconf和automake使用

    转载:www.cnblogs.com/itech/archive/2010/11/28/1890220.html

  2. Linux学习笔记(7)Linux常用命令之压缩解压命令

    (1)gzip gzip命令用于压缩文件,英文原意为GNU zip,所在路径/bin/gzip,其语法格式为: gzip [文件] 压缩后的文件格式为.gz. 例:将/etc目录下的services文 ...

  3. flex_高度补全

    一个高度为100px, 另外一个高度自动补全当前界面下剩余的高度: <!DOCTYPE html> <html lang="en"> <head> ...

  4. Maven 项目导入错误解决。

    Description Resource Path Location Type Failure to transfer org.apache.maven:maven-core:jar:2.0.6 fr ...

  5. hdu1213 并查集(不压缩)

    确定比赛名次 Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名 ...

  6. js整理3

    函数 call: fun.call(a), a会转化成相应的对象,函数内的this即指向它; function foo() { console.log(this); } foo.call(null); ...

  7. Codeforces Edu3 E. Minimum spanning tree for each edge

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  8. event 内存泄漏

    组长说用event有内存泄漏的隐患..做个测试. 预留

  9. 使用递推解题:EOJ2999

    题目: Description 给定一个多项式 (ax+by)k,计算多项式展开后 xnym 项的系数. Input 第1行:一个整数T(1≤T≤10)为问题数. 接下来共T行.每行5个整数,分别为a ...

  10. 10.24给TA的话