视频加载失败

响应式布局

1392 字
7 分钟
响应式布局

前言#

响应式布局是2010年5月由Ethan Marcotte提出的一个概念,本质就是一个网站兼容多端,对不同尺寸的屏幕做出响应,并进行相应布局;既然是概念,那解决的方案是什么,答案就是媒体查询

媒体查询#

媒体查询(Media Queries)是 CSS 实现响应式布局的重要技术,可以根据媒体类型、视口宽度、设备方向等条件,为页面应用不同的 CSS 样式。

基础语法#

使用 @media 定义媒体查询。

@media 媒体类型 and (媒体特性) {
/* 满足条件时生效的 CSS 样式 */
}
/* 屏幕视口宽度 >= 768px 时生效 */
@media screen and (min-width: 768px) {
.box {
width: 50%;
}
}

媒体类型

媒体类型(Media Type)用于指定 CSS 样式应用于哪一类设备或输出媒介。

媒体类型说明
all所有设备,默认值
screen屏幕设备,包括手机、平板、电脑等
print打印设备及打印预览

使用示例:

/* 所有设备 */
@media all {
.box {
color: red;
}
}
/* 屏幕设备 */
@media screen {
.box {
color: blue;
}
}
/* 打印模式 */
@media print {
.box {
color: black;
}
}

媒体类型可以省略,默认使用 all。

/* 以下两种写法等价 */
@media all and (min-width: 768px) {}
@media (min-width: 768px) {}

注意:screen 并不专门代表电脑端,而是包含手机、平板和电脑等屏幕设备。

媒体特性:媒体特性(Media Feature)用于检测视口、设备或用户环境的具体特征。

媒体特性说明
min-width视口宽度大于等于指定值
max-width视口宽度小于等于指定值
min-height视口高度大于等于指定值
max-height视口高度小于等于指定值
orientation: portrait视口为纵向
orientation: landscape视口为横向
prefers-color-scheme: dark用户偏好深色主题
prefers-reduced-motion: reduce用户偏好减少动画

使用示例:

/* 视口宽度 >= 768px */
@media (min-width: 768px) {
.box {
width: 50%;
}
}
/* 视口宽度 <= 767px */
@media (max-width: 767px) {
.box {
width: 100%;
}
}
/* 横向视口 */
@media (orientation: landscape) {
.box {
background-color: blue;
}
}

现代 CSS 还支持范围比较语法:

/* 视口宽度在 768px ~ 1199px 之间 */
@media (768px <= width < 1200px) {
.box {
width: 80%;
}
}

媒体查询中的逻辑:媒体查询支持通过逻辑运算符组合多个条件。

逻辑说明
and逻辑与,所有条件满足时生效
not逻辑非,对查询条件取反
or逻辑或,任意条件满足时生效
,逗号分隔多个查询,效果类似逻辑或
only主要用于旧浏览器兼容,现代开发通常不需要

使用示例:

/* 屏幕设备,并且视口宽度 >= 768px */
@media screen and (min-width: 768px) {
.box {
width: 50%;
}
}
/* 768px <= 视口宽度 <= 1200px */
@media (min-width: 768px) and (max-width: 1200px) {
.box {
width: 80%;
}
}
/* 非打印模式 */
@media not print {
.box {
display: block;
}
}
/* 不满足视口宽度 >= 768px 的情况 */
@media not all and (min-width: 768px) {
.box {
width: 100%;
}
}
/* 与上面的 or 示例效果相同 */
@media (max-width: 767px), (orientation: landscape) {
.box {
background-color: red;
}
}

断点和书写位置#

**响应式断点:**断点(Breakpoint)是指页面布局需要发生变化时,对应的视口宽度。

常见的参考断点:

视口宽度参考设备类型
< 768px手机等窄屏设备
768px ~ 1023px平板等中等宽度设备
1024px ~ 1199px小型桌面屏幕
>= 1200px大型桌面屏幕

这些不是 CSS 强制规定的断点,而是开发中常见的参考值。实际项目应该根据页面布局需求选择断点。

媒体查询的书写位置:媒体查询既可以写在 <style> 标签中,也可以写在外部 CSS 文件中。还有一种不推荐的写法,就是link的时候使用媒体查询,但是如果按照上面的断点,至少要写4份样式,然后媒体查询加载不同样式,需要注意的是,这不是按需加载,网页加载的时候会一起加载

媒体查询的策略#

媒体查询的策略主要分为3种:无策略,移动端优先、PC优先,最终实现的效果是一样,无策略可能需要写逻辑判断,想到哪写到哪,移动端优先是从小的尺寸写到大,pc则是大写到小,一般情况下推荐使用移动端优先,下面通过一个示例演示:

<div class="row">
<div class="col">
<img src="./images/1.png" alt="">
</div>
<div class="col">
<img src="./images/1.png" alt="">
</div>
<div class="col">
<img src="./images/1.png" alt="">
</div>
<div class="col">
<img src="./images/1.png" alt="">
</div>
<div class="col">
<img src="./images/1.png" alt="">
</div>
<div class="col">
<img src="./images/1.png" alt="">
</div>
<div class="col">
<img src="./images/1.png" alt="">
</div>
<div class="col">
<img src="./images/1.png" alt="">
</div>
<div class="col">
<img src="./images/1.png" alt="">
</div>
<div class="col">
<img src="./images/1.png" alt="">
</div>
<div class="col">
<img src="./images/1.png" alt="">
</div>
<div class="col">
<img src="./images/1.png" alt="">
</div>
</div>

实战#

使用媒体查询的方式实现rem布局,去掉之前的js代码,改为媒体查询监听改变html上font-size的字体大小:

github代码仓库:https://github.com/youzi177/css-layout-lab

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

响应式布局
https://f.youzi177.cn/posts/2026101601-xiang-ying-shi-bu-ju/
作者
小封鸭
发布于
2026-10-16
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
小封鸭
小楼一夜听春雨,深巷明朝卖杏花
公告
欢迎来到我的博客。这里主要记录前端全栈和日常内容
分类
标签
最新动态
站点统计
文章
60
分类
3
标签
12
总字数
107,734
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
EdgeOne Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录