`
zhanchaojiang
  • 浏览: 112760 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

什么是viewport,为什么需要viewport

阅读更多

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

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

以一代iphone下的Safari来说就是:
在iphone的320px物理屏幕上——视觉窗口(visual viewport),创建出了一个980px的虚拟窗口——布局窗口(layout viewport),在视觉窗口(visual viewport)中我们可以拖动横向竖向滑动条或者放大缩小网页,来达到最佳的浏览效果(类似桌面浏览器);而布局窗口(layout viewport)用来配合CSS渲染布局,例如当我们设置一个容器的宽度为100%时,这个容器的实际值为980px而不是320px。如此一来大部分 网页就能以缩放的形式正常的显示在手机屏幕上了。

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

是的,因为iphone的layout viewport默认为980px,导致专为其优化的320px宽的页面只能以缩放的方式显示,这时就需要对viewport进行设置:

<head>

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

</head>

这个是最常见的一条viewport meta代码,将viewport定义为:宽度为设备宽度,初始缩放比例为1倍,禁止用户缩放。设置好后我们的页面就显示完美了:

viewport全部属性&值如下:

width: viewport宽度
height: viewport高度
initial-scale: 初始缩放比例
maximum-scale: 最大缩放比例
minimum-scale: 最小缩放比例
user-scalable: 是否允许用户缩放

例:

width=960 或 device-width
height=1000 或 device-height
initial-scale=0.5
maximum-scale=2
minimum-scale=1
user-scalable=1 或 0 (yes 或 no)

layout viewport的默认值
在Apple实现viewport后,其他浏览器也加入了对viewport meta的支持,但彼此间还是有些差异,差异最大的是layout viewport的表现:

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

最后关注下width=device-width
其实这个属性&值很有意思,字面意应该是viewport宽度等于设备宽度,但在实际中不同的浏览器都给出了个定值:320px;这个值还是源于 Apple,因为早期iphone的分辨率为320px × 480px,大量为iphone量身定制的网站都设置了viewport:width=device-width,并且按照宽度320px来设计制作,所 以其他浏览器加入viewport支持时为了兼容性也将device-width定义为了320px。

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

参考文章:
http://dev.w3.org/csswg/css-device-adapt/
http://www.quirksmode.org/mobile/viewports2.html
https://developer.mozilla.org/en/Mobile/Viewport_meta_tag
http://blogs.msdn.com/b/iemobile/archive/2010/11/22/the-ie-mobile-viewport-on-windows-phone-7.aspx

 

分享到:
评论

相关推荐

    html meta viewport属性说明

    什么是Viewport 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤 到很小的窗口中(这样会破坏没有针对手机浏览器优化的网页的布局)...

    Viewport Auto-Snap

    "Viewport Auto-Snap" 是一个专门针对3D视图操作的工具或脚本,它旨在提升3D建模和设计过程中的工作效率。在3D建模软件中,视口是用户观察、操作3D模型的主要界面,而"Auto-Snap"功能则是指自动对齐或捕捉,通常用于...

    viewport响应式模板

    viewport响应式模板

    WPF ViewPort3D 展示且平移操作

    5. **刷新视图**:最后,在每次更新相机后,都需要重新绘制ViewPort3D以反映新的视图。 此外,还可以使用MatrixTransform3D来简化平移操作。通过改变矩阵的Translation部分,可以直接对3D模型进行平移。这种方法的...

    WPF的3D显示 ViewPort3D绘图入门参考资料

    `Helix Toolkit`是一个开源的WPF和UWP扩展库,它为开发人员提供了许多方便的3D图形功能,包括3D模型加载、相机控制、光照效果等。在这个案例中,我们使用了`HelixToolkit.wpf`库,它包含了一系列类和方法,帮助我们...

    viewport与android的webview

    - `width`: 设定viewport的宽度,通常设置为`device-width`,表示与设备屏幕宽度相等。 - `initial-scale`: 初始化缩放比例,设置为1.0意味着网页加载时将按1:1的比例显示。 - `maximum-scale`, `minimum-scale` 和 ...

    Ext Designer入门3-Viewport和Border布局

    本节介绍 Ext的Border布局以及如何创建一个Viewport。 1、Viewport介绍: Viewport 是一类特殊的容器。它创建后会自动填充到整个...而Border属性是将内部的组件划分为 东南西北中五个区域。 。。。。 具体请看教程。

    前端开源库-postcss-px-to-viewport

    首先,我们需要理解什么是`postcss`。`PostCSS`是一个JavaScript的CSS转换工具,它通过插件系统来扩展CSS的功能。开发者可以利用这个平台编写自己的插件,实现对CSS的自定义处理,比如添加浏览器前缀、转换单位、...

    前端开源库-viewport-list

    在使用viewport-list库时,首先需要引入该库的JavaScript文件,然后调用提供的API来获取设备视区列表。例如,可能有一个`getViewportList()`函数,它返回一个包含多种设备视口信息的对象数组。每个对象通常会包含...

    图文并茂让你必须弄懂viewport配套示例代码.rar

    【标题】"图文并茂让你必须弄懂viewport配套示例代码.rar"的资源是一份针对网页开发中的关键概念——“视口”(viewport)的详细教程。这份压缩包包含了一个HTML示例页面(视口--viewport.html)、一个链接到相关...

    ember-in-viewport, 在 viewport @ 60FPS,检测Ember视图或者组件是否为.zip

    ember-in-viewport, 在 viewport @ 60FPS,检测Ember视图或者组件是否为 ember-in-viewport检测Ember视图或者组件是否位于 viewport @ 60 FPS 。美国船厂建立和维护收费 ,请与我们联系,咨询专家 Ember.js 。读取 ...

    前端项目-viewport-units-buggyfill.zip

    一般来说,要将viewport-units-buggyfill集成到项目中,开发者需要遵循以下步骤: 1. 安装:使用npm(Node.js包管理器)进行安装,命令通常是 `npm install viewport-units-buggyfill` 或者直接下载zip文件解压。 2....

    一个功能强大的viewport程序实例

    一个功能强大的viewport程序实例,可以满足你多种需要调节。

    OpenGL 四个Viewport分别交互控制

    3. **设置投影矩阵**:为了将3D模型正确地投影到二维视口,我们需要为每个视口设置不同的投影矩阵。常见的投影类型有正交投影和透视投影,可以使用`glOrtho()`或`gluPerspective()`函数来创建。 4. **定义视图矩阵*...

    viewport 视口与窗口 逻辑坐标 设备坐标

    viewport 视口 窗口 GDI 坐标 映射方式定义了Windows如何将GDI函数中指定的逻辑坐标映射为设备坐标。 Windows有关映射模式的一些术语:逻辑坐标所在的坐标系称为"窗口",将设备坐标所在的坐标系称为"视口"。

    前端开源库-postcss-px-to-viewport.zip

    1. 安装:首先,你需要在项目中安装PostCSS和postcss-px-to-viewport插件,可以通过npm或yarn完成。 2. 配置:在项目中创建一个PostCSS配置文件(如postcss.config.js),并设置postcss-px-to-viewport的选项,如...

    windows WinExtent ViewPort

    在Windows操作系统中,"WinExtent ViewPort"涉及的是图形设备接口(Graphics Device Interface,简称GDI)中的一个重要概念,即设备上下文(Device Context,DC)的视口(ViewPort)和窗口(Window)的关系。...

    WPF三维立体动画(一个WPF项目,利用viewport3D呈现)

    在本文中,我们将深入探讨如何...通过熟练运用3D元素、材质、光源、变换和动画,开发者可以构建出复杂的三维立体动画,为用户带来丰富的视觉体验。这个项目就是一个很好的学习资源,帮助开发者深入了解WPF中的3D编程。

    ExtJs_Viewport_Example

    在实现ExtJS Viewport的过程中,开发者需要注意以下几点: 1. **配置Viewport**:通过`Ext.application`方法的`views`配置项或`viewport`配置项指定Viewport类。 2. **自适应布局**:利用ExtJS的布局管理器,如`...

Global site tag (gtag.js) - Google Analytics