首先这里涉及到虚拟像素和物理像素,不管是移动设备还是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. 烂泥:【解决】修改LVM卷组名重启系统后,无法进入进入系统

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 一台服务器系统已经安装完毕,但是LVM的卷组vg使用的是默认的VolGroup名称,使用起来感觉不舒服,打算把这个卷组名称修改为vg. 先来查看系统中有 ...

  2. iNeedle系统之国舜项目

    一.简介 本周公司接了一个小项目,是给北京国舜科技股份有限公司做一个HTTP相关的小功能产品.大概实现功能是将交换机的源数据通过解析,分析出HTTP包配对的request和response头,并把每对 ...

  3. 高性能MySQL笔记 第6章 查询性能优化

    6.1 为什么查询速度会慢   查询的生命周期大致可按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段. ...

  4. Centos和Redhat的区别和联系

    网上看到的,转载给大家 CentOS与RedHat的关系: RedHat在发行的时候,有两种方式:二进制的发行方式以及源代码的发行方式.无论是哪一种发行方式,你都可以免费获得(例如从网上下载),并再次 ...

  5. PCI在linux系统中注册与注销示例

    1. pci_driver结构struct pci_driver {    struct list_head node;    const char *name;    const struct pc ...

  6. Can't load AMD 64-bit .dll on a IA 32-bit platform

    主要谈谈在win8.1(64bit)下搭建环境的经历. 安装win8.1(64bit)后,配置java环境是费了我一番心思的,所以想记录下来,成为经验.64位系统下比较理想的配置应该是 64位jdk ...

  7. hdu 5057 Argestes and Sequence(分块算法)

    Argestes and Sequence Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  8. namenode metadata 备份与恢复实验

    https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html#dfsadmin -me ...

  9. Use getopt() & getopt_long() to Parse Arguments

    Today I came across a function [getopt] by accident. It is very useful to parse command-line argumen ...

  10. OpenCV 之 边缘检测

    上一篇 <OpenCV 之 图像平滑> 中,提到的图像平滑,从信号处理的角度来看,实际上是一种“低通滤波器”. 本篇中,数字图像的边缘,因为通常都是像素值变化剧烈的区域 (“高频”),故可 ...