The meta viewport tag contains instructions to the browser in the matter of viewports and zooming. In particular, it allows web developers to set the width of the layout viewport relative to which CSS declarations such as width: 20%are calculated.

viewport 标签告诉浏览器 viewports 的设置和缩放,并且 web 开发者可以通过这个标签设置和 css 相关的 layout viewport。

标签语法如下:

<meta name="viewport" content="name=value,name=value">

指令

Every name/value pair is a directive. (The word is my own invention.) There are six of them in total:

每一个键值对都是一个指令,一共有6个键值对

  • width: 设置 layout viewport 的宽度
  • initial-scale : 设置页面初始化是的缩放比,并且可以设置 layout viewport 的宽度
  • minimum-scale :设置用户可以缩小页面的最小值,
  • maximum-scale :设置用户可以放大页面的最大值
  • height :设置 layout viewport 的高度,但是并不是哪都可以用
  • user-scalable : 用户是否可以缩放页面

device-width

width 里有一个特殊的值:device-width,他可以把 layout viewport 的 width 设置为 idea viewport width。

理论上有一个和 device-width 相似的值 device-height,但是它并没有什么用

三种 viewport

之前作者有提到过在移动端浏览器里有2种 viewport,visual viewport 和 layout viewport,下面我假设你知道这2中 viewport。

The ideal viewport

原来还有一种 viewport,我们叫他 ideal viewport,它给出了设备上网页的理想大小,因此,理想视口的尺寸每个器件不同。

在一些老旧并没有retina 屏幕的设备上, ideal viewport 和物理像素的值是一样的,在最新的高物理分辨率的设备上,还继续保留着以前的 idea viewport 的定义,因为它的定义真的很合适。

直到并包括4S,iPhone的理想视口是320x480,无论是否是一个retine屏幕。 这是因为320x480是这些iPhone上的网页的理想尺寸。

关于 idea viewport 有2个重要的东西需要提到

  • layout viewport 可以设置为 idea viewport 值。 width = device-width和initial-scale = 1指令这样做。
  • 所有的缩放指令都是相对于 idea viewport,而不是 layout viewport 的宽度。 所以maximum-scale = 3表示最大缩放是理想视口的300%。

找到 ideal viewport 的大小

initial-scale

设置 initial-scale 做了2件事

  • 它将页面的初始缩放系数设置为相对于 ideal viewport 计算的定义值。 因此它生成 visual viewport 宽度。
  • 它将 layout viewport 置为刚刚计算的 visual viewport 宽度。

我们举一个例子:我在竖屏模式下的 iPhone 4s 设置 initial-scale=2,然后其他指令都不设置,不出意外,visual viewport 的宽度是 160px(320px / 2)

但是,它也将 layout viewport 的宽度设置为160px。 所以我们现在有一个160px宽的最小缩放页面。 (visual viewport 不能大于 layout viewport,因此不能缩小)。

已知bug

Android WebKit allows initial-scale to set the layout viewport width only if the value is 1 AND there is no width directive. So only initial-scale=1 without any other directives works.

IE 下 initial-scale 是无效的

Conflicting width directives

一旦 initial-scale 可以设置 layout viewport 宽度,那么你可以创造一些冲突的指令

<meta name="viewport" content="initial-scale=1,width=400">

这种情况下会怎么样?我们继续用 iPhone 4s 来打比方,

  • initial-scale=1 告诉浏览器设置 layout viewport 的宽度在竖屏下为 320px,在横屏下为 480px
  • width=400 告诉浏览器设置 layout viewport 为 400px,无论在横屏还是竖屏下。

浏览器处理这种情况是取最大值,这种情况下竖屏的 layout viewport 为 400px,横屏下 layout viewport 为480px

已知bug

Android WebKit不遵循这些规则。 如果宽度等于设备宽度或小于320,Android WebKit总是将 ideal viewport 宽度应用于 layout viewport。 在320以上它总是遵守width指令。

Meta viewport 学习整理的更多相关文章

  1. meta的学习记录

    meta的学习记录 最近再学响应式的布局,就先来总结一下我们的viewport. 什么是viewport呢? 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(v ...

  2. Spring IOC设计原理解析:本文乃学习整理参考而来

    Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. I ...

  3. JavaScript学习整理(转载)

    JavaScript的学习整理(一) 目录: 1.换皮肤功能2.显示/隐藏(点击切换)3.显示/隐藏(onmouseover/onmouseout)4.选项卡5.全选/不选/反选(checkbox)6 ...

  4. js数组学习整理

    原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...

  5. TweenMax学习整理--特有属性

    TweenMax学习整理--特有属性   构造函数:TweenMax(target:Object, duration:Number, vars:Object) target:Object -- 需要缓 ...

  6. HttpClient学习整理

    HttpClient简介HttpClient 功能介绍    1. 读取网页(HTTP/HTTPS)内容    2.使用POST方式提交数据(httpClient3)    3. 处理页面重定向    ...

  7. HTML meta viewport属性详细说明

    viewport并非只是ios上的独有属性,在android.winphone上同样也有viewport,下面为大家详细介绍下HTML meta viewport 什么是Viewport 手机浏览器是 ...

  8. !!对python列表学习整理列表及数组详细介绍

    1.Python的数组分三种类型:(详细见 http://blog.sina.com.cn/s/blog_6b783cbd0100q2ba.html) (1) list 普通的链表,初始化后可以通过特 ...

  9. Java设计模式(学习整理)---命令模式

    设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...

随机推荐

  1. 【Excle数据透视表】如何移动数据透视表的位置

    数据透视表创建完成了,现在需要将它移动到D5位置,如何移动呢? 解决办法 通过"移动数据透视表"功能实现数据透视表的位置移动 步骤1 单击数据透视表任意单元格→数据透视表工具→分析 ...

  2. 【电子签章】HTML格式合同转化成PDF文件

    代码地址如下:http://www.demodashi.com/demo/12476.html 一.主要思路 通过itextpdf 生成想要的pdf 文件 通过itextpdf 中 XMLWorker ...

  3. Python数据结构:列表、元组和字典

    在Python中有三种内建的数据结构——列表list.元组tuple和字典dict 列表中的项目包括在方括号中,项目之间用逗号分割 元组和列表十分类似,只不过元组和字符串一样是不可变的 即你不能修改元 ...

  4. 自定义带下划线文本的UIButton

    转载自 http://mobile.51cto.com/hot-404798.htm,略有改动 UnderLineButton.h代码 @interface UnderLineButton : UIB ...

  5. (五)解决jQuery和其它库的冲突

    在jQuery库中,几乎所有的插件都被限制在它的命名空间里.全局的对象都很好地存储在jQuery命名空间里,因此当把jQuery和其它javascript类库一起使用时,不会引起冲突.(注意:默认情况 ...

  6. Time倒计时

    commitTimeDate = new Date("2016/11/9 10:02:40").getTime() + 24*60*60*1000;//截止时间 myDate = ...

  7. H5和CSS3新增内容总结

    CSS3选择器有哪些?答:属性选择器.伪类选择器.伪元素选择器.CSS3新特性有哪些?答:1.颜色:新增RGBA,HSLA模式 文字阴影(text-shadow.) 边框: 圆角(border-rad ...

  8. 线性表的链式实现(C++)

    相关内容: 线性表的顺序实现 链式实现(C语言) (推荐在GitHub上查看,下面代码只是最初实现,后续如果有修改,由于太麻烦,不会再更改下文,仅仅更新Github上的代码文件) 结点以及链表类的定义 ...

  9. Spark源码分析之三:Stage划分

    继上篇<Spark源码分析之Job的调度模型与运行反馈>之后,我们继续来看第二阶段--Stage划分. Stage划分的大体流程如下图所示: 前面提到,对于JobSubmitted事件,我 ...

  10. a标签javascript传参不正确的解决办法!

    代码部分: <a href="javascript:void(0);" onClick="findList(${goodsClassify.id})"&g ...