首先这里涉及到虚拟像素和物理像素,不管是移动设备还是pc都存在这个概念
1、在显示器精度还不是很高的年代,一个物理像素就等于一个虚拟像素,1000px的网页就占据了1000的物理像素(如果你玩过小霸王,对这个应该有很直观的影响,上面的人物都是一个格子一个格子组成的)
2、随着显示器精度的不断提高,同等面积上能容纳多个物理像素点,如果还按照一个物理像素显示一个虚拟像素的话,1000px的网页看上去就会缩成一团
3、这样的网页显然没法看,为了解决这个问题,显示器生厂商把一个虚拟像素等同于了多个物理像素(这就相当于创建了一个虚拟的中间层,这个中间层向上对接网站中的像素,向下对接显示器的像素),这样网页就不会缩成一团了

理解了上面几点才能理解为什么会有viewport(viewport也就相当于创建了一个虚拟的中间层)
1、移动设备出来之前,网站都是针对电脑设置的,宽度起码都在七八百像素以上
2、移动设备的显示屏幕要比电脑小很多,如果要在上面浏览网站肯定会出现横向竖向的滚动条
3、为了让之前做的网站能在手机上正常显示(指不出现横向竖向滚动条),就需要创建一个中间层,于是苹果首先在Safari上创建了一个viewport属性
4、这个viewport就是虚拟的中间层,称为Layout Viewport(苹果设置这个中间层的宽度为980px,也可以是其他值,这由设备自己决定,根据项目经验个人认为这个值不固定,实际多大要看网页尺寸,当设置100%时就是980px,如果某一行元素超过了980px,超出的部分依然会缩到屏幕里去,但是设置100%的那行就不会撑满整行,980px以外的地方会显示空白),手机浏览器让这个中间层填满手机屏幕,不出现滚动条,最后再把网页渲染在这个中间层上,这样pc站就以缩小的形式完整的呈现在手机上了,带来的副作用就是字看不清了,必须通过手工放大才能看清
5、后来出现了针对移动端制作的网站,问题随之出现,网页被渲染到这个中间层上了,而这个中间层是专门为pc站而生的,于是就出现了这样一种情况,1000px的网页以缩小的方式完整的显示在屏幕上了,300px的移动网站同样以缩小的方式显示在屏幕上,剩下的700px就是空白了,太丑了
6、为了解决这个问题viewport中加入了几个属性,专门用来处理为手机做的移动站,width=device-width, initial-scale=1.0, user-scalable=no,意思就是让这个中间层的宽度等同于设备的宽度,而不是那个中间层的宽度,这样移动站就能完美显示了

通过上述分析,可以得出以下结论:
当pc站不加viewport时,在电脑上能看到一个完整清晰的网站,在手机上会显示一个缩小的版本,字体图片等都会相应缩小,没有滚动条
当pc站加了viewport时,在电脑上依然能看到一个完整清晰的网站,但在手机上就会出现一个有滚动条的网站,字体图片也都很清楚,一般情况下是不要这样做的
做移动站时一定要加上viewport,否则显示会出现问题,因为手机默认是以那个980px的中间层作为渲染基础的

简易版viewport的更多相关文章

  1. Layui框架+PHP打造个人简易版网盘系统

    网盘系统   大家应该都会注册过致命的一些网盘~如百度云.百科介绍:网盘,又称网络U盘.网络硬盘,是由互联网公司推出的在线存储服务,服务器机房为用户划分一定的磁盘空间,为用户免费或收费提供文件的存储. ...

  2. 前端学习 node 快速入门 系列 —— 简易版 Apache

    其他章节请看: 前端学习 node 快速入门 系列 简易版 Apache 我们用 node 来实现一个简易版的 Apache:提供静态资源访问的能力. 实现 直接上代码. - demo - stati ...

  3. .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”

    FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...

  4. MVC 验证码实现( 简易版)

    现在网站上越来越多的验证码,使用场景也是越来越多,登陆.注册.上传.下载...等等地方,都有可能大量使用到验证码,那么制作验证码到底有多简单呢?我们一起来看下最简易版的验证码实现过程- 验证码的基本步 ...

  5. 简易版自定义BaseServlet

    这几天在学Java Web,一直在思考Servlet重用的问题,就用java的反射机制实现自定义的简易版BaseServlet; 该方式有点像struts2 利用映射获取前端的参数.有兴趣的同学可以自 ...

  6. 简易版的TimSort排序算法

    欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. 简易版本TimSort排序算法原理与实现 TimSort排序算法是Python和Ja ...

  7. html5 canvas简易版捕鱼达人游戏源码

    插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...

  8. Python写地铁的到站的原理简易版

    Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...

  9. MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

随机推荐

  1. 无穷滚动(Infinite scroll)的实现原理

    1 无穷滚动(无限加载)与分页的比较 现在越来越多的网站或者博客的列表页开始抛弃传统的分页技术,大致的原因在于,分页明显地增加了用户的操作行为以及页面加载等待的时间,而网页浏览者往往没什么耐心. 而无 ...

  2. shell 面试题

      1. 用sed修改test.txt的23行test为tset:     sed –i ‘23s/test/tset/g’ test.txt 2. 查看/web.log第25行第三列的内容.     ...

  3. eclipse 启动报错\workspace\.metadata\.log

    eclipse启动报错,让查看.metadata\.log日志 eclipse启动不了,让查看.metadata\.log日志,上面为日志中的错误提示. 解决办法:删除 .metadata\.plug ...

  4. subversion 1.8.5好像不是很成熟

    加:--enable-all-static1. 没找到libneon库支持,不得不用libserf。2. libserf编译要用到scons.py,所有要有python工具支持。3. 当遇到链接少ss ...

  5. Windows 2008 R2 Powershell 3.0

    下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=34595&WT.mc_id=rss_alldownloads_all

  6. FTP上传与下载

    1.连接 先假设一个ftp地址 用户名 密码       FTP Server: 192.168.1.125 User: administrator Password: abc123 2. 打开win ...

  7. Medusa引擎开源了

    首先贴出 Github地址 然后博客地址 相比于市面上其他的著名游戏引擎,例如Unity,cocos2dx,Unreal,Medusa游戏引擎目前还非常的简陋,目前实现的功能还集中在2D部分,3D的虽 ...

  8. PCA原理与实践

    在对数据进行预处理时,我们经常会遇到数据的维数非常之大,如果不进行相应的特征处理,那么算法的资源开销会很大,这在很多场景下是我们不能接受的.而对于数据的若干维度之间往往会存在较大的相关性,如果能将数据 ...

  9. stanford coursera 机器学习编程作业 exercise4--使用BP算法训练神经网络以识别阿拉伯数字(0-9)

    在这篇文章中,会实现一个BP(backpropagation)算法,并将之应用到手写的阿拉伯数字(0-9)的自动识别上. 训练数据集(training set)如下:一共有5000个训练实例(trai ...

  10. 基于tiny6410的madplay播放器的移植

    在移植madplay之前需要先将所需要的库移植到开发板的文件系统中. 现在每个解压后的文件夹中创建一个文件夹 zlib-1.1.4.tar.gz 解压:tar xvzf  zlib-1.1.4.tar ...