viewport,视口,就是对用户的可见部分, 大小因设备而不同。H5引入。

* 没有它: 整体缩放 ( 老网页是固定的大小,浏览器在手机上只是简单地缩放整个页面,所以用户体验很差)
* 有了它: 浏览器会重新排版。而且,
屏幕大小就是Chrome仿真器提示的size。 所以, mobile页面必须要它

用户习惯:

*
用户都习惯上下滚动网站,而不是横向滚动,因此,如果用户必须横向滚动或缩放页面才能阅读,那么这将给用户带来糟糕的体验。

Best Practice:

* 自适应设计的主要概念基础是流畅性和比例可调节性

自适应网页设计(这一概念最初是由 Ethan Marcotte 在’A
List Apart’中
提出的)回应了用户及其所用设备的需求。版式会因根据设备的大小和功能而变化。例如,手机可能会以单列视图的形式呈现内容,而同样的内容可能会以双列的形式呈现在平板电脑上。

一、视口元素 (viewport meta tag是Apple 的Mobile Safari 引入的,专门对Mobile, 并非标准, 但是多数Mobile浏览器支持)

(Apple官方资料见
https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html)

其HTML文档中必须包含元视口元素(如下),指示浏览器如何对网页尺寸和缩放比例进行控制。

<meta
name="viewport"
content="width=device-width, initial-scale=1.0">

(以上是正式的写法  HTML5的)

or simplified
as:

<meta
viewport="width=device-width, initial-scale=1.0">

其中:
   width=device-width指令浏览器给网页重排内容,使之适合不同的屏幕大小
  initial-scale=1  指示浏览器在不考虑设备方向的情况下,将 CSS 像素与设备无关像素的比例设为 1:1,并允许网页完全占用横向宽度 (特别是  手机旋转模式下)

注意

  • 使用英文逗号分隔属性,确保旧版浏览器可以准确解析相关属性。除了设置 initial-scale 外,您还可以在视口上设置以下属性:
  • minimum-scale
  • maximum-scale
  • user-scalable

但是,设置后,这些属性可以停用用户缩放视口的功能,可能会造成网页访问方面的问题。

实例: 
<meta name="viewport" content="width=device-width,
initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">

视图参数: 
  宽度是Device的宽度, 不缩放 (初始比例1,最小比例1,
最大比例1)

二、不要使用很宽的元素,浏览器无法自动重排它。
如果图片宽度大于视口宽度,那么就会导致视口横向滚动。您应该调整此内容,使其适合视口内的宽度,以便用户无需横向滚动
1)       如果元素的css宽度过大,则它在窄视口的设备上水平超界. ==》用相对单位100%好. (例如,iPhone 等宽度为 320 CSS 像素的设备)

2)       如果元素的css位置过大,则它超界,显示在屏幕外.

。因此,请改为使用相对宽度值,例如 width: 100%。同样请注意,使用较大的绝对定位值可能会使元素脱离小屏幕上的视口

设计元素的最佳效果,不要依赖于viewport的宽度。 因为以css像素单位表达的某些屏幕的分辨率和宽度变化很大。

三、媒体查询(@media)

媒体查询是可应用于 CSS 样式的简单过滤器。有了这些过滤器,我们可以根据设备呈现内容的特点轻松更改样式,包括显示屏类型、宽度、高度、方向甚至是分辨率

您可以将打印必需的所有样式放在打印媒体查询中:

<link
rel="stylesheet" href="print.css"
media="print">

* 在样式表链接中使用 media 属性
* 嵌入 CSS 文件的媒体查询:@media 和 @import。(尽量避免使用 @import,以提高性能)。

例如: 下面的代码片段, 当 设备的宽度介于500px到 600px之间, 而其是 横屏的时候,定义一组样式。

@media (min-width: 500px) and (max-width: 600px)  and (orientation: landscape) {

h1 {

color: blue;

}

.desc:after {

content:" 本设备的宽度介于500px到 600px, 而其是 横屏";

}

}

其中使用了media的min-width, max-width和orientation参数,用了逻辑运算and, 还可以查询min-height, max-height等参数, 更多参数和逻辑运算参考:https://www.w3schools.com/cssref/css3_pr_mediaquery.asp

不同媒体查询适用的逻辑并不是互斥的,因此,开发者可以根据 CSS 中优先级的标准规则,应用满足生成的 CSS 区块标准的任何过滤器。

<link
rel="stylesheet" media="(max-width: 640px)"
href="max-640px.css">

<link
rel="stylesheet" media="(min-width: 640px)"
href="min-640px.css">

  • 当浏览器宽度介于 0 像素和 640 像素之间时,系统将会应用 max-640px.css。
  • 当浏览器宽度为 640 像素或大于此值时,系统将会应用 min-640px.css。

<l <link
rel="stylesheet" media="(orientation: portrait)"
href="portrait.css">

<link
rel="stylesheet" media="(orientation: landscape)"
href="landscape.css">

  • 在竖版Portrait时,使用 portrait.css。
  • 在横版Landscape时,使用 landscape.css。

用min-width创建查询, 不要用min-device-width。因为:min-width 以浏览器窗口尺寸为依据,浏览器支持度好。

备注(  min-device-width
屏幕尺寸为依据,浏览器支持差, 或者误报为预期的视口宽度。另外,使用 *-device-width 会阻止内容适应允许窗口调整大小的桌面设备或其他设备,因为该查询基于设备的实际大小,而非浏览器窗口大小)

四、使用相对单位

在顶级 div 上设置 width: 100% 可以确保其横跨视口的宽度,对视口来说既不会太大也不会太小。无论设备是宽度为 320 像素的 iPhone、宽度为 342 像素的 Blackberry Z10,还是宽度为 360 像素的 Nexus 5,div 均会适合这些屏幕。

此外,使用相对单位可让浏览器根据用户缩放程度呈现内容,而无需为网页添加横向滚动条。

div.fullWidth { 
 width: 100%; }

https://developers.google.com/web/fundamentals/layouts/rwd-fundamentals/size-content-to-the-viewport?hl=zh-cn

(RWD: Responsive Web Design)

五、基于视口大小的相对单位,vw, vh,vmin和vmax

这4个相对单位是CSS3新增的

vw: 1% viewport width

vh: 1% viewport height
vmin: 就是min(vw, vh)
vmax: 就是max(vw, vh)

举个例子,如果视口宽 = 1024, 高=768, 那么

10vw 就是102.4
10vh 就是76.8
在横屏的时候, vmin就等于 vh, 768
在竖屏的时候, vmin就等于 vw

使用此单位的设计,能够自动使用各种手机屏幕的大小。省去了media query。

附录: 常见手机的设备分辨率和viewport分辨率 (http://www.cnblogs.com/GameEngine/p/7237405.html)

自适应页面设计: Viewport控制, media query和相对单位的更多相关文章

  1. viewport和media query

    viewport: 你可以定义viewport的宽度.如果你不使用width=device-width,在移动端上你的页面延伸会超过视窗布局的宽度(width=980px),如果你使用了width=d ...

  2. CSS3 Media Query实现响应Web设计(宽度为不同的移动设备)

    现在的屏幕分辨率.小到320px(iPhone),大到2560px或甚至更高(大显示屏).范围内变化很大.除了使用传统的台式机.用户会越来越多的通过手机.上网本.iPad一类的平板设备来浏览页面. 这 ...

  3. 手机web——自适应网页设计(html/css控制)

    一. 允许网页宽度自动调整: "自适应网页设计"到底是怎么做到的? 其实并不难. 首先,在网页代码的头部,加入一行viewport元标签. <meta name=" ...

  4. 【转】手机web——自适应网页设计(html/css控制)

    手机web——自适应网页设计(html/css控制) 就目前形势来看,Web App 正是眼下的一个趋势和潮流,但是,对于Web App的设计可能大家有的不是很了解,下面就将整理好的网页设计的技巧奉献 ...

  5. 使用rem设计移动端自适应页面三(转载)

    使用rem 然后根据媒体查询实现自适应.跟使用JS来自适应也是同个道理,不过是js更精确一点.使用媒体查询: html { font-size: 62.5% } @media only screen ...

  6. 手机web——自适应网页设计(html/css控制) - 51CTO.COM

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  7. 手机web——自适应网页设计(html/css控制)【转】

    一. 允许网页宽度自动调整: "自适应网页设计"到底是怎么做到的?其实并不难. 首先,在网页代码的头部,加入一行viewport元标签. <meta name="v ...

  8. 手机web——自适应网页设计(html/css控制)http://mobile.51cto.com/ahot-409516.htm

    http://mobile.51cto.com/ahot-409516.htm 一. 允许网页宽度自动调整: "自适应网页设计"到底是怎么做到的? 其实并不难. 首先,在网页代码的 ...

  9. 手机web——自适应网页设计(html/css控制)(转)

    一. 允许网页宽度自动调整: "自适应网页设计"到底是怎么做到的?其实并不难. 首先,在网页代码的头部,加入一行viewport元标签. <meta name="v ...

随机推荐

  1. ts项目报错:Import sources within a group must be alphabetized

    报错:Import sources within a group must be alphabetized. 原因:import名称排序问题,要求按照字母从小到大排序:修改 tslint.json 中 ...

  2. mybatis 一对多,(多对一,一对一

    多对一,和一对一是同一种写法,每种写法又分在数据库关联和在mybatis关联 1,多对一,一对一数据库关联 2,多对一,一对一mybatis关联 3,一对多,数据库关联,注意,Java type改of ...

  3. 深入理解 Python yield

    https://blog.csdn.net/lftaoyuan/article/details/78915518 python2和python3是不兼容的,通篇环境都是python3.6 简单的yie ...

  4. 阅读<All Digital VCXO Replacement for Gigabit Transceiver Applications>笔记---XAPP589

    阅读<All Digital VCXO Replacement for Gigabit Transceiver Applications>笔记---XAPP589 1. 2. 外部设备能为 ...

  5. xilinx AXI相关IP核学习

    xilinx AXI相关IP核学习 1.阅读PG044 (1)AXI4‐Stream to Video Out Top‐Level Signaling Interface (2)AXI4‐Stream ...

  6. sqlalchemy 或者pysql 连接数据库时支持中文操作

    参数后面带上?charset=utf8就行 engine = create_engine("mysql+pymysql://hrg:123@192.168.80.200:3306/test? ...

  7. sqlalchemy操作----外键关联,relationship

    ... #!_*_coding:utf-8_*_ #__author__:"Alex huang" import sqlalchemy from sqlalchemy import ...

  8. Intellij Idea编译项目下的.java文件时的编码问题

    Intellij Idea编译项目下的.java文件时的编码问题 原创 2015年07月22日 21:45:14 10510 由<编译.java文件时的编码问题>可知,在编译.java文件 ...

  9. PHP ==与===的区别

    PHP中==与===的区别 ===是恒等计算符 同时检查表达式的值与类型 ==是比较运算符号 不会检查条件式的表达式的类型

  10. 胖子哥的大数据之路(9)-数据仓库金融行业数据逻辑模型FS-LDM

    引言: 大数据不是海市蜃楼,万丈高楼平地起只是意淫,大数据发展还要从点滴做起,基于大数据构建国家级.行业级数据中心的项目会越来越多,大数据只是技术,而非解决方案,同样面临数据组织模式,数据逻辑模式的问 ...