利用css @viewport 做设备适配

标签: css @viewport css 设备适配 | 发表时间:2013-11-09 01:17 | 作者:Jace
出处:http://www.topcss.org

在需要调整设备浏览器的viewport时,我们通常在HTML中使用来解决。但是令人意想不到的是,viewport meta标签并不具有“规范性”,即它不是W3C的正式标准,也非Web标准。

Apple公司率先在其iPhone中的Safari浏览器中实现了viewport meta标签,其他浏览器厂商也快速采纳了它。由于IOS、Android及类似平台在平板电脑和智能手机设备中的流行度和市场占有率,使得viewport meta标签被广泛使用。

viewport meta标签是用做布局的,这种活本应属于CSS的职能。这也是为什么W3C正在尝试规范一种新的设备适配方法的原因,将HTML对viewport的控制转交给CSS。

@viewport CSS 规则

使用@viewport规则控制viewport,与使用meta标签的效果相同,只是我们完全使用CSS来控制。与使用meta标签一样,仍然建议使用设备无关的值(device-width)来设置viewport宽度。

@viewport {
   width: device-width;
}

如今,也有很多开发者已经在使用@viewport了,因为在IE10的捕捉模式(snap mode)下,Windows 8 Metro模式下的一个特性,可以将浏览器拖至屏幕的左端或右端,同时使用两个窗口。奇怪的是, 要解决这个问题,开发者就要使用上面介绍的device-width方法,或者在media query里面使用@viewport规则。

@viewport 与 Media Queries配合使用

我们可以在media query里面使用@viewport,已达到更加精准的优化。比如,下面的media query将viewport小于400px(IE10 的 捕捉模式)缩放至320px宽。

@media screen and (max-width: 400px) {
   @-ms-viewport { width: 320px; }
   ...
}

@viewport 描述符(Descriptors)

zoom描述符等同于viewport meta 标签的initial-sacale属性。

@viewport {
   width: device-width;
   zoom: 2;
}

与minimum-scale, maximum-scale对应的描述符是max-zoom, min-zoom。

@viewport {
   width: device-width; 
   max-zoom: 3; 
   min-zoom: 0.50; 
}

user-zoom与user-scalable属性等效。

@viewport {
   width: device-width;
   user-zoom: fixed;
}

浏览器支持情况

IE10/11 , opera, webkit, moz 都已支持,,且需要厂商前缀。

@-webkit-viewport {
   width: device-width;
}
@-moz-viewport {
   width: device-width;
}
@-ms-viewport {
   width: device-width;
}
@-o-viewport { 
   width: device-width;
}
@viewport {
   width: device-width; 
}

所以,目前我们还是需要viewport meta 标签。

后记

用此方法可以解决 Windows Phone IE浏览下, 定位在底部(bottom:0)的元素与底部有间距的问题。

参考:

  1. Thinking Ahead: CSS Device Adaptation With @viewport
  2. http://getbootstrap.com/getting-started/#browsers
  3. Windows Phone 8 and Device-Width

相关 [利用 css viewport] 推荐:

利用css @viewport 做设备适配

- - 进步博客
在需要调整设备浏览器的viewport时,我们通常在HTML中使用来解决. 但是令人意想不到的是,viewport meta标签并不具有“规范性”,即它不是W3C的正式标准,也非Web标准. Apple公司率先在其iPhone中的Safari浏览器中实现了viewport meta标签,其他浏览器厂商也快速采纳了它.

理解SVG的viewport,viewBox,preserveAspectRatio

- - Web前端 - ITeye博客
        一个svg,设置了viewBox之后,viewBox的长宽值如果都小于svg的viewport的长宽值,那么结果一定是放大;但是viewBox的长宽值一旦有一个值大于vewport之后,最后的实际效果就不是放大,而是缩小了.         因为viewBox的目的是要自己设置的长宽范围填满viewport.

非响应式设计的viewport

- - 前端观察
整理自: Viewport Meta Tag For Non-Responsive Design. 中文原文: 非响应式设计的viewport. 请尊重版权,转载请注明来源,多谢~~. 大家已经非常熟悉 响应式网页设计了吧,但是我们通常会忽略很多旧的没有采用响应式设计的网站,其实这类网站在移动终端的用户体验更为关键——因为它们没有对移动设备做任何优化.

WebAPP ViewPort iPhone5 黑边解决方案

- - 大猫の意淫筆記
最好先仔细看一遍苹果官方文档  Configuring the Viewport. 容易被忽略的就是即使 width=640的时候,scale=1是按照device-width而不是按照640的大小. iPhone 的 device-width 等于320,如果我设置 width=640,scale=1.

iPhone/android的viewport 解决网页自动缩放的问题

- - 快乐无极的博客
viewport有如下几个属性:. width设置viewport的宽度,即iphone最初模拟PC浏览器的宽度,之后iphone会这个宽度展现的页面同比缩放到iphone屏幕上. 设置width=device-width后就不会再进行缩放了,因为宽度正好和iphone的宽度相同(前提是没有设置缩放比例).

分享5个viewport相关的jQuery插件

- - ITeye博客
日期:2012-11-16  来源: GBin1.com. 在web和网站开发中我们常常需要处理viewport相关的功能,在前面的文章中我们曾经介绍过 javascript响应式视图(viewport)切换工具类库 ,今天这里我们再介绍5个和viewport相关的 jQuery插件 ,希望大家喜欢.

[原]WebAPP开发之viewport的深入理解

- - woshiwanxin102213的专栏
平常移动端开发中,页面的head中都会引入下列这句话,那Viewport是什么,理解了这个才能让我们开发的网页更好适配不同的移动设备. Viewport是手机屏幕上能用来显示我们的网页的那一块区域. 但是viewport并不等于浏览器的可视区域. 可以自定义,自定义后,手机按这个尺寸的比例在可视区域缩放.

移动前端开发之viewport的深入理解

- - Web前端 - ITeye博客
转载自:http://www.cnblogs.com/2050/p/3877280.html. 移动前端开发之viewport的深入理解. 在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有明白了viewport的概念以及弄清楚了跟viewport有关的meta标签的使用,才能更好地让我们的网页适配或响应各种不同分辨率的移动设备.

CSS图形

- GLORY - 酷壳 - CoolShell.cn
下面的示例展示了使用纯CSS制作的各种图形,你可以自由地修改文中的CSS代码. 经测试,IE9, Chrome, FF, Safari都可以正常显示. 五角星形 via Kit MacAllister. 心形 via Nicolas Gallagher. 无穷大 via Nicolas Gallagher.

用 Compass 寫 CSS

- Jay - Blog.XDite.net
最近在開發一個新產品,整體來說應該是接近寫完了,不過越接近完工,抓 IE 系列的 bug 就越是挫折. 朋友 @evenwu 就來洗我要不要換成 Compass,說這東西超神奇,超好用,還可以把 IE bug 殺光光. 其實之前就久仰 Compass 大名了,只是文件實在看起來太他媽的眼花繚亂,因為專案進度一直在跑,不太敢貿然換掉寫 CSS 的方式.