如何做好移动端的响应式设计:Viewport控制
新人翻译,欢迎转载~
英文原文地址:http://bitsofco.de/2015/respove-design-viewport/
原文例程地址:https://github.com/ireade/viewports
(可下载例程参照阅读)
当我们在做响应式设计时,关注最多的是CSS的@media
查询。不可否认,@media
查询完成了很多工作,但一个网站的响应能力还是取决于对Viewport的控制。当我们想根据屏幕尺寸来自动变化页面布局时,我们会像这样做:
@media screen and (min-width: 960px) {
body { background-color: green; }
}
@media screen and (max-width: 960px) and (min-width: 500px) {
body { background-color: pink; }
}
@media screen and (max-width: 500px) {
body { background-color: yellow; }
}
在浏览器上调整窗口大小,可以看到网页的响应能力是乎没有任何问题的。
那么问题来了
在移动端浏览页面时就出现异常了。
(没有进行Viewport控制的iPhone6上的显示效果)
页面虽然可以看到,但不能自适应手机的屏幕。之所以会有这样的问题,是设备尺寸和Viewport尺寸不一致导致的。为了更好的理解这两个尺寸之间的不同点,下面就简单说说:
- 设备像素:这个是物理层面的像素数量,比如一台iPhone6,是375x667像素。(注:这里所说的设备像素有两种类型,硬件像素和设备独立像素,不过这个区别与此文无关);
- CSS像素:这个是我们在CSS使用过程中的一个抽象的单位,它并没有一个绝对的尺寸,页面上单个CSS像素的大小完全取决于Viewport的大小;
- Viewport:Viewport决定了页面的像素密度。比如一个宽750px的Viewport,表示屏幕上横向排布了750个CSS像素(Viewport在未缩放的情况下)。
Viewport是"无关设备"的,它不知道也不关心我们的设备到底有多大的屏幕。
大多数显示器的Viewport尺寸默认在800px到1024px之间,这就解释了为什么之前我们的例程可以在电脑上正常显示而不用管当前屏幕的尺寸。
通过meta标签来控制Viewport
可以设置meta
标签中的viewport
信息,以解决Viewport尺寸不匹配的问题。meta
标签的用法如下:
<meta name="viewport" content="key=value, key=value">
标签内容中有6个关键字:
- width
- height
- initial-scale
- minimum-scale
- maximum-scale
- user-scalable
WIDTH
可以用width
来设置viewport
的宽度,以替代那些不合适的默认宽度。我们可以给其设定一个固定大小,但设定成device-width
更加明智一些,这样我们可以兼容不同大小的屏幕。
<meta name="viewport" content="width=device-width">
加了这句话之后,我们的例程看起来就正常多了。
(在iPhone6上设置width=device-width之后的显示效果)
INITIAL-SCALE
在移动设备上,用户有时会需要缩放页面,当页面缩放时,Viewport的像素尺寸也会相应的改变,但CSS尺寸不会变。
比如,在一个400px宽的Viewport中有一个元素,设定
width: 100px;
,这时该元素就横跨了1/4的屏幕。如果用户把页面放大到两倍大小,这时Viewport宽度变成了200px,但元素仍然宽100个CSS像素。这时这个元素就占了半个屏幕了。
我们可以通过initial-scale来设置CSS像素和Viewport像素之间的比例,通常情况下是1:1。这个参数的设置可以很好的解决width=device-width
设置所带来的问题。有些移动设备浏览器会在纵向模式时默认使用设备宽度,当切换到横向模式时页面显示就会不正常。
(在没有设置initial-scale的横向iPhone6上的显示效果)
如图所示,当iPhone处于横向模式时,我们看到的还是宽度小余500px时的页面状态。不过不要慌张,我们可以通过设置initial-scale
为1来解决这个问题。
<meta name="viewport" content="width=device-width, initial-scale=1">
(在设置了initial-scale的横向iPhone6上的显示效果)
USER-SCALABLE,MAXIMUM-SCALE以及MINIMUM-SCALE
这几个参数用来控制页面的缩放能力。
- Maximum-scale:这个是用户可以缩放页面的最大比例。比如说设置为1,用户就无法缩放页面。假如设置为2,用户就可以把页面放大到1个CSS像素等于2个Viewport像素的大小;
- Minimum-scale:这个是用户可以缩放页面的最小比例。假如设置为2,页面的最小比例就是原比例的两倍,并且无法缩小到原始比例;
- User-scalable:如果设置了
user-scalable=no
,用户将无法对页面进行缩放。
由于这几个参数限制了用户对页面的操作,通常不建议使用它们。
用CSS来控制Viewport
虽然现在很多人都在用viewport
,但其实viewport
并不是HTML5标准中的正式成员。W3C目前正在研究将viewport
以@viewport
规则的形式加入到CSS当中,@viewport
规则与viewport
标签有异曲同工之妙,只是将用于布局的viewport
归还给CSS,现在已经有部分开发者在尝试@viewport了。
@viewport {
zoom: 1.0; /* same as initial-scale=1 */
width: device-width;
}
/* Vendor specific prefixes */
@-ms-viewport
@-webkit-viewport
@-moz-viewport
@-o-viewport
在@viewport
正式发布之前,还是先继续使用viewport
标签吧,如果有兴趣的话可以尝试一下测试版的@viewport
。
总结
为了保证你的响应式页面能够在移动端正常运行,把下面这句话加到你的<head>
元素里面吧~
<meta name="viewport" content="width=device-width, initial-scale=1">
如何做好移动端的响应式设计:Viewport控制的更多相关文章
- 移动端和pc端,响应式设计布局
1.什么是响应式 Web 设计? 响应式 Web 设计让你的网页能在所有设备上有好显示. 响应式 Web 设计只使用 HTML 和 CSS. 响应式 Web 设计不是一个程序或Javascript脚本 ...
- paip.自适应网页设计 跟 响应式 设计的区别跟原理and实践总结
paip.自适应网页设计 跟 响应式 设计的区别跟原理and实践总结 响应式Web设计(Responsive Web design)的理念是: 1 #-----------自适应布局VS响应式布局 2 ...
- web设计经验<一> 提升移动设备响应式设计的8个建议
今天看到一些关于web设计的一些建议和设计经验,拿出来分享分享. 第一篇: 提升移动设备响应式设计的8个建议 一.直观性和易用性 在使用移动设备时,对于杂乱.复杂或者不直观的设计造成的混乱不佳的用户体 ...
- 企业级的响应式设计(Responsive design at enterprise level)译
导言 响应式设计是现在人们谈论的热点,但如何部署,特别是在有多种设备的大型项目中如何组织响应式设计,响应式设计和可伸缩性(Scalable)有什么区别?这都是需要解决的难题. 优化用户经验——Opti ...
- 前端响应式设计中@media等的相关运用
现在做前端响应式网站特别,响应式成为现在前端设计一个热点,它成为热点的最主要的原因就是,移动端设备屏幕的种类多样,那么如何设置响应式屏幕. /*打印样式*/ @mediaprint{color:red ...
- CSS 响应式设计
响应式设计是指在不同分辨率的设备中,网页布局可以自适应的调整.这种弹性化的布局使网站在不同设备中的布局都比较合理,可以为不同终端的用户提供更加舒适的界面和更好的用户体验,其根本理念是使原本 PC 上的 ...
- Web移动端页面 --响应式和动态REM
响应式 什么是响应式页面呢? 顾名思义响应式页面就是能做出响应的页面,它的页面效果不是定死的,会随着用户的改变而改变. 如何着手响应式有以下几个思考的方向 找一份设计图 使用Media Query 隐 ...
- 一款由css3和jquery实现的响应式设计导航
2014年响应式设计成为设计主流.今天要给大家带来一款由css3和jquery实现的响应式设计导航.当显示器为pc时,导航为横条.当客户端为移动端时,呈现坚形导航.我们一起看下效果图: 在线预览 ...
- css响应式设计
响应式设计是指在不同分辨率的设备中,网页布局可以自适应的调整.这种弹性化的布局使网站在不同设备中的布局都比较合理,可以为不同终端的用户提供更加舒适的界面和更好的用户体验,其根本理念是使原本 PC 上的 ...
随机推荐
- WPS:编号
独立编号 只想用于表示顺序的编号,不想与标题级别挂钩 样式--编号--选择编号种类后--自定义--按照图片设置 要得到类似这样的编号格式 假设 第一章 系统介绍 为 样式 标题二 1.1 监控管理系统 ...
- Leaflet:LatLng、LatLngBounds、Point、Bounds、Icon
LatLng 代表一个有着确定经纬度坐标的地理点. 1.用例 var latlng = L.latlng(50.5,30.5); 所有Leaflet的方法中接收的LatLng参数均可以用数组[ ]或者 ...
- Leaflet:Event与Layer类属性、方法
Event 之所以要说Event,是因为很多类都是继承自Layer--Marker.Popup.Tooltip.Path以及继承自Path的Circle.Polyline.Polygon...:而La ...
- LeetCode-103-二叉树的锯齿形层序遍历
二叉树的锯齿形层序遍历 题目描述:给定一个二叉树,返回其节点值的锯齿形层序遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 示例说明请见LeetCode官网. 来源:力 ...
- Kubernetes上安装Metrics-Server
操作场景 metrics-server 可实现 Kubernetes 的 Resource Metrics API(metrics.k8s.io),通过此 API 可以查询 Pod 与 Node 的部 ...
- 5. Java方法
5.Java方法 1.何谓方法 Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 设计方法的原则:方法 ...
- LGP2522题解
双倍经验题. 柯以看成是P3455的扩展. 首先这个范围内是数我们柯以用类似二维前缀和的思想,看成: \(ans(a,b,c,d)=ans(1,b,1,d)+ans(1,a-1,1,c-1)-ans( ...
- CF1228E题解
设 \(f_{i,j}\) 为恰好 \(i\) 行 \(j\) 列不满足条件的矩阵个数, \(g_{i,j}\) 为钦定 \(i\) 行 \(j\) 列不满足条件的矩阵个数. 容易得到: \[g_{x ...
- 如何使用Java AWT 创建一个简易计算器
摘要:手把手教你使用 Java AWT 创建一个简易计算器. 本文分享自华为云社区<手把手教你使用 Java AWT 创建一个简易计算器>,作者:海拥 . 关于AWT AWT (抽象窗口工 ...
- ansible 三配置和命令集
一.Ansible配置 Ansible安装好之后的配置文件有如下两种: 1.yum安装,配置文件默认路径为: /etc/ansible/ansible.cfg 2.源码包安装,配置文件路径需要从软件包 ...