# 响应式设计(媒体查询)

让一套代码可以在多个终端中适配。一套代码解决所有设备的显示问题。即只写一套代码,在多个终端到处运行。终端:PC 端、移动端端、手表、智能眼镜等。
就像写 if 语句那样:

1
2
3
4
5
6
7
8
9
if(屏幕大小是768以下){
//这里写768px以下的样式
}
if(屏幕大小>769&& 小于1024时){
//这里写对应的样式
}
if(大于1024时){
//这里写对应的样式
}

# viewport

视口:用户网页的可视区域(即浏览器屏幕大小)。

在 head 中添加 viewport,用来兼容移动设备的显示效果,这样能使不同的移动终端显示的比例都差不多,也就是 16 像素的字在无论在小屏还是大屏下都能看得清,并且文字大小是根据等比例缩放的。

也就是设置了 viewport 后,网页就以浏览器窗口(屏幕大小)来显示宽高。

1
2
3
4
5
6
7
8
9
10
11
12
/*只要涉及移动端开发,就添加以下代码到head标签内*/
/*简单版*/
<meta name="viewport" content="width=device-width,initial-scale=1" >
/*完整版*/
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" >
/*参数说明*/
width:控制 viewport 的大小,可以指定的一个值,如 600,或者特殊的值,如 device-width 为设备的宽度(单位为缩放为 100% 时的 CSS 的像素)。
height:和 width 相对应,指定高度。一般不写
initial-scale:初始缩放比例,也即是当页面第一次 load 的时候缩放比例。
maximum-scale:允许用户缩放到的最大比例。
minimum-scale:允许用户缩放到的最小比例。
user-scalable:用户是否可以手动缩放。

# 媒体查询

如果要实现响应式开发,需要解决 4 个问题:

  1. 添加 viewport
  2. 内容布局:之前学习的,包括弹性布局
  3. 图片自适应。可以设置图片大小为 100%
  4. 媒体查询

概念:

媒体查询可用于检测很多事情,例如检测屏幕的类型,尺寸大小,朝向分辨率等:
a、检测 viewport (视窗) 的宽度与高度
(max-width:600px)
b、朝向 (智能手机横屏,竖屏) 。
(orientation:portrait) 竖屏
(orientation:landscape) 横屏

  1. 第一种写法,在样式内部写 @media,相当于是学习 css 版的 if 语句,可以认为是特殊的选择器,只会在满足条件的屏幕下生效。
1
2
3
4
5
6
7
8
9
10
11
12
//js
if(screen && min-width=768px &&){

}
//css3版的if语句
@media screen and (min-width:768px) and (max-width:1024px){
//这里写满足以上条件时,要写的样式
//这里写的代码就是平常写的css代码,以前怎么写现在也怎么写
.demo{
color:red;
}
}
  1. 如果是 PC 端导入 PC 端的样式文件,如果是手机端导入手机端样式文件,即按需导入,则需要了解第二种写法
1
2
3
4
<!-- ipad -->
<link rel="stylesheet" href="css/ipad.css" media='screen and (min-width: 768px) and (max-width: 1024px)'>
<!-- iphone -->
<link rel="stylesheet" href="css/iphone.css" media='screen and (max-width: 767px)'>
  1. 检测横竖屏的条件如何写:
1
2
3
4
5
6
7
8
9
10
11
朝向 (智能手机横屏,竖屏) 。
(orientation:portrait) 竖屏
(orientation:landscape) 横屏
//竖屏
@media screen and (orientation:portrait) {
竖屏的样式代码
}
//横屏
@media screen and (orientation:landscape){
横屏的代码
}

参考资料:

  1. 物理像素、独立像素、css 像素 https://www.jianshu.com/p/93ffb715aeff
  2. viewport http://www.runoob.com/w3cnote/viewport-deep-understanding.html

# 响应式设计实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 后期移动端流行的时候,使用打补丁的方式添加了一个Vieport标签,用来支持移动端的开发
该标签在PC端没有任何影响,只有在移动端才会有效果。
加了的作用:
就是给浏览器下达一个指令,告诉他不再以默认的980px来显示网页了,而是一设备当前的屏幕宽度来显示我的网页(即一一种理想的分辨率来显示页面)

device-width 指的是当前设备的宽度,相当于是一个变量
也可以写一个固定的宽度:比如400,此时所有的移动端设备的屏幕宽度都改为了400px
最简单的写法:
<meta name="viewport" content="width=device-width" >

initial-scale=1 初始屏幕缩放比为1,不放大,也不缩小

可以添加以下3个属性禁止用户缩写屏幕
maximum-scale:允许用户缩放到的最大比例。
minimum-scale:允许用户缩放到的最小比例。
user-scalable:用户是否可以手动缩放。
-->

<!-- 最全的写法:完整版,推荐写法

学的目的:只要是移动端开发,就需要添加这行代码。
-->
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" >
<title>Document</title>
<style>
/*当屏幕宽度小于767以下,手机端*/
@media screen and (max-width: 767px) {
div{
color: green;
}
}
/*当屏幕宽度介于768-1024之间
这里写了3个条件
1、screen
2、(min-width:768px)
3、(max-width:1024px)
*/
@media screen and (min-width:768px) and (max-width:1024px){
div{
color: red;
}
}
/*屏幕大小大于等于1025时*/
@media screen and (min-width:1025px){
div{
color: blue;
}
}
/*响应式主要是写布局代码,给布局做适配
先把PC端的样式写好,再根据不同的设备做不同的布局适配,即写布局的重置代码即可。
*/
</style>
</head>
<body>
<div>
当屏幕在768以下时文字显示为绿色,<br>
屏幕在768以上,1024以下时,显示红色<br>
屏幕在1024以上时显示蓝色
</div>
</body>
</html>

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

tz 微信支付

微信支付

tz 支付宝

支付宝