2 媒体查询和响应式布局
2.1 视口 viewport
① 什么是视口
- 视口就是浏览器显示网页的可视区域。
- 视口是网页的初始包含块,视口是根元素的包含块。
② 移动端视口和PC端视口
PC端浏览器:
视口大小可以调整(通过调整浏览器窗口大小或者调整调试工具)。
移动端视口:
移动端浏览器视口大小无法调整。
③ 完美视口设置
完美视口:
浏览器视口宽度与屏幕宽度一致,就称为完美视口。
PC端浏览器视口本就是完美设置,无需设置。
移动端浏览器视口,由于历史原因,默认并不是完美视口;不论屏幕宽多少,移动端浏览器视口宽度一般会调整为 980px。
可以是通过设置 meta 元信息将移动端浏览器视口设置为完美视口:
<meta name="viewport" content="width=device-width,initial-scale=1.0">
2.2 媒体查询基本语法
① 媒体类型
all 用于所有设备
screen 用于电脑屏幕,平板电脑,智能手机等。
print 用于打印机和打印预览
speech 应用于屏幕阅读器等发声设备
/* 专门设置打印的样式 */
@media print {
body {
background-color: green;
}
h1 {
font-size: 200px;
background-color: red;
}
}
② 媒体特性
width 视口宽度
max-width 最大视口宽度 表示小于等于某个值
min-width 最小视口宽度 表示大于等于某个值
device-width 屏幕宽度
max-device-width 最大屏幕宽度
min-device-width 最小屏幕宽度
注意:
在设置了完美视口的移动端, widh 与 device-width 最终结果没有区别。
/* 当设备宽度是 500px 的时候 */
@media (device-width: 500px) {
body {
background-color: purple;
}
h1 {
color: blue;
}
}
/* 最小是900px >=900px */
@media (min-width: 900px) {
body {
background-color: pink;
}
h1 {
color: cyan;
}
}
/* 最大是370px <=370px */
@media (max-width: 370px) {
body {
background-color: #369;
}
h1 {
background: #f90;
}
}
③ 运算符
and 并且
, 或者
not 非, 只能用于媒体类型
only 仅仅, 只能用于媒体类型
/* 视口>=800 并且 <= 1000 设置样式*/
@media (min-width: 800px) and (max-width: 1000px) {
body {
background-color: pink;
color: cyan;
}
}
/* 视口宽度<=400 或者 视口宽度 >= 1100 */
@media (max-width: 400px), (min-width: 1100px) {
body {
background-color: #f90;
color: #369;
}
}
/* 设置样式 除了打印机 */
@media not print {
}
/* only 用法 */
@media only screen and (min-width: 768px){
}
2.3 媒体查询在 CSS 中使用
① 第一种使用方式: 媒体查询与其他CSS代码写在一起
@media 媒体查询条件 {
选择器 {
样式...
}
选择器 {
样式...
}
}
注意:
媒体查询无法提高样式的优先级,所以建议媒体查询写在后面。
② 第二种用方式: @media 配合 link 标签
<link rel="stylesheet" media="screen and (min-width: 768px)" href="sm-style.css">
<link rel="stylesheet" media="screen and (max-width: 1200px)" href="lg-style.css">
2.4 响应式布局
① 阈值(断点)
参考一:
640px
1024px
参考二:
768px
992px
1200px
② 移动优先方案(媒体查询的设置)
默认样式是最小屏幕的样式, 媒体查询使用 min-width, 从小到大,依靠样式覆盖实现不同尺寸设备加载对应的样式。无需写复杂的媒体查询条件。
.container {
margin: 0 auto;
width: 100%;
height: 200px;
background-color: pink;
}
/* 小屏幕 */
@media (min-width: 768px) {
.container {
width: 750px;
background-color: #f90;
}
}
/* 中等屏幕 */
@media (min-width: 992px) {
.container {
width: 970px;
background-color: cyan;
}
}
/* 大屏幕 */
@media (min-width: 1200px) {
.container {
width: 1170px;
background-color: green;
}
}
版权声明:本文为weixin_46022982原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。