# 2.5 移动设备与响应式Web设计
## 2.5 移动设备与响应式Web设计
### 什么是、以及为什么需要响应式Web设计
与桌面/笔记本电脑相比,移动设备的显示屏幕比较小,还有各种不同规格,并且可以“横竖”屏转换,因此针对移动设备的浏览器编程必须要考虑网页的屏幕适配问题,即页面的尺寸和布局要与显示设备相匹配。
在这方面有两种不同的解决方案:
1. Web服务器针对不同的设备提供不同的网页。服务器可以通过HTTP请求的User-Agent头读出移动浏览器的名字、版本和移动设备的有关信息,据此返回合适的页面给请求的客户端。
2. Web服务器对所有客户端返回相同的网页,由网页自身的代码对各种不同的屏幕尺寸做适配。这种方式又叫做**响应式Web设计(Responsive web design)**。
第一种方式对移动设备浏览器的要求比较低:移动设备不需要具有强大的运算能力,浏览器也不需提供全面的HTML、CSS或JavaScript支持——二十年前的移动设备及其上的浏览器差不多就是这样。这种方式的缺点是:服务器要为同一页面准备多套不同的代码,十分麻烦。
第二种方式是现在比较流行的方式:这得益于移动设备计算能力的提高,以及移动浏览器对HTML等标准的全面支持。
### 响应式Web设计的实现
响应式Web设计通常依赖CSS的**媒体查询(Media queries)**功能实现,如下所示:
```
<html>
<head>
<meta charset="utf-8" />
<title>响应式边栏</title>
<style>
@media (min-width: 640px) {
#sidebar {
float: left;
width: 150px;
}
#main {
margin-left: 150px;
}
}
#sidebar {
background-color: green;
}
#main {
background-color: blue;
}
</style>
</head>
<body>
<div id="sidebar">
边栏
</div>
<div id="main">
正文部分
</div>
</body>
</html>
```
其中,
```
@media (min-width: 640px) {
...
}
```
就是CSS媒体查询。示例中的这个查询的意思是“当屏幕宽度不小于640px时应用以下规则”。请动手操作一下,看看示例的效果。
类似的媒体查询还有:
```
@media (max-width: 320px) {
...
}
```
即:当屏幕宽度不大于320px时应用这些规则。或者:
```
@media (min-width: 320px) and (max-width: 640px) {
...
}
```
表示:当屏幕宽度不小于320px并且不大于640px时应用这些规则。
更多关于CSS媒体查询的信息可参考:[https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Media\_queries](https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Media_queries)
虽然有了CSS媒体查询这个工具,但要实现理想的响应式Web页面仍不是一件轻易的事。为此我们可以借助一些高级工具,如流行的[Bootstrap](http://getbootstrap.com/)来实现响应式Web页面。
更多关于响应式Web设计可参考:[https://en.wikipedia.org/wiki/Responsive\_web\_design](https://en.wikipedia.org/wiki/Responsive_web_design)
更多关于移动浏览器:[https://en.wikipedia.org/wiki/Mobile\_browser](https://en.wikipedia.org/wiki/Mobile_browser)
- 前言
- 1 Web概述
- 1.1 什么是Web
- 1.2 超文本和超链接
- 1.3 URL
- 1.4 DNS
- 1.5 HTTP
- 1.5.1 客户端请求
- 1.5.2 服务器应答
- 1.5.3 进一步了解HTTP
- 1.6 HTTPS
- 2 Web浏览器
- 2.1 HTML
- 2.1.1 文档类型声明
- 2.1.2 标签和属性
- 2.1.3 文档结构
- 2.1.4 DOM
- 2.1.5 进一步了解HTML
- 2.2 CSS
- 2.2.1 样式与样式表
- 2.2.2 样式表语法
- 2.2.3 级联样式表
- 2.2.4 进一步了解CSS
- 2.3 JavaScript
- 2.3.1 script标签
- 2.3.2 操纵DOM
- 2.3.3 jQuery
- 2.3.4 进一步了解JavaScript
- 2.4 Ajax
- 2.5 移动设备与响应式Web设计
- 3 Web服务器
- 3.1 方法与资源
- 3.2 状态代码
- 3.3 静态内容与动态内容
- 3.4 编程语言与技术
- 3.4.1 CGI
- 3.4.2 PHP
- 3.4.3 Java
- 3.4.4 Python
- 3.4.5 Ruby
- 3.4.6 Node.js
- 3.5 RESTful Web API
- 3.6 服务器架构
- 3.7 Web缓存
- 3.8 服务器推送
- 4 数据库
- 4.1 关系型数据库
- 4.2 NoSQL数据库
- 5 Web服务器的其他组件
- 5.1 Cron
- 5.2 消息队列
- 5.3 邮件服务器
- 6 开发工具与技术
- 6.1 Git
- 6.1.1 Git基础操作
- 6.1.2 Git基本原理
- 6.1.3 进一步了解Git
- 6.2 敏捷开发