核心技术:CSS 响应式设计
响应式设计的三大支柱是:

- 视口:告诉浏览器如何控制页面的尺寸和缩放。
- 流式布局:使用相对单位(如百分比、
vw/vh)代替固定单位(如像素px)。 - 媒体查询:根据不同的屏幕尺寸应用不同的 CSS 样式。
设置视口
这是第一步,也是最重要的一步,如果你的网页没有正确设置视口,那么在移动设备上的表现会非常糟糕(比如页面会以桌面版的形式缩小显示)。
在 HTML 文件的 没有这个标签,后面的一切努力都可能白费。 传统的固定布局使用像素( 流式布局则使用相对单位,让元素宽度能根据父容器或视口的大小进行弹性伸缩。 媒体查询是实现响应式设计的“魔法”所在,它允许你根据设备的特定特征(如宽度、高度、分辨率)来应用不同的 CSS 样式。 断点是媒体查询的触发点,通常指常见的设备屏幕尺寸,虽然没有绝对标准,但以下是一些广泛使用的参考值: 我们可以在上面的流式布局基础上,添加媒体查询,让它在小屏幕上从“左右布局”变成“上下布局”。 完整代码示例: 使用 Flexbox 和 Grid 可以更轻松、更强大地创建复杂的自适应布局。 图片也需要自适应,否则可能会撑破布局。 这是最简单的方法,设置图片的最大宽度为 100%,这样图片永远不会超过其父容器的宽度。 遵循以上原则,你就能创建出在各种设备上都能完美显示的自适应网页。<head> 标签内添加以下 <meta>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">我的自适应网页</title>
</head>
content="width=device-width, initial-scale=1.0" 的含义:
width=device-width:告诉浏览器,页面的宽度应该等于设备的屏幕宽度。initial-scale=1.0:设置页面的初始缩放比例为 1.0,即不缩放。
使用流式布局
px)来定义元素宽度,width: 960px;,这种布局在大屏幕上会留白,在小屏幕上会溢出。
常用相对单位:
.container {
width: 90%; /* 容器宽度是其父元素宽度的90% */
margin: 0 auto; /* 水平居中 */
}
.sidebar {
width: 25%; /* 侧边栏宽度是容器宽度的25% */
}
.main-content {
width: 75%; /* 主内容宽度是容器宽度的75% */
}
vw (Viewport Width) 和 vh (Viewport Height):相对于视口的宽度或高度的 1%。
1vw = 视口宽度的 1%1vh = 视口高度的 1%.hero-text {
font-size: 5vw; /* 字体大小会随视口宽度变化 */
}
一个简单的流式布局示例:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">流式布局示例</title>
<style>
body {
margin: 0;
font-family: sans-serif;
}
.header {
background-color: #333;
color: white;
text-align: center;
padding: 1rem;
}
.container {
display: flex; /* 使用 Flexbox 布局 */
}
.sidebar {
background-color: #f1f1f1;
padding: 1rem;
width: 25%; /* 百分比宽度 */
}
.main-content {
background-color: #e9e9e9;
padding: 1rem;
width: 75%; /* 百分比宽度 */
}
.footer {
background-color: #333;
color: white;
text-align: center;
padding: 1rem;
}
</style>
</head>
<body>
<div class="header">网站标题</div>
<div class="container">
<div class="sidebar">侧边栏</div>
<div class="main-content">主要内容区域,这个宽度会随着屏幕大小的改变而改变。</div>
</div>
<div class="footer">页脚</div>
</body>
</html>
使用媒体查询
基本语法:
/* 当屏幕宽度小于或等于 768px 时,应用以下样式 */
@media (max-width: 768px) {
/* 在这里的 CSS 规则会覆盖默认样式 */
}
常用的断点:
max-width: 768pxmin-width: 769px and max-width: 1024pxmin-width: 1025px媒体查询实战:改变布局

/* 默认样式(桌面端) */
.sidebar, .main-content {
padding: 1rem;
}
.sidebar {
background-color: #f1f1f1;
width: 25%;
}
.main-content {
background-color: #e9e9e9;
width: 75%;
}
/* 当屏幕宽度小于等于 768px 时(移动端) */
@media (max-width: 768px) {
.container {
flex-direction: column; /* 将 flex 布局从行改为列 */
}
.sidebar, .main-content {
width: 100%; /* 两者都占满整个容器宽度 */
}
}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">媒体查询示例</title>
<style>
body {
margin: 0;
font-family: sans-serif;
}
.header {
background-color: #333;
color: white;
text-align: center;
padding: 1rem;
}
.container {
display: flex;
}
.sidebar {
background-color: #f1f1f1;
padding: 1rem;
width: 25%;
}
.main-content {
background-color: #e9e9e9;
padding: 1rem;
width: 75%;
}
.footer {
background-color: #333;
color: white;
text-align: center;
padding: 1rem;
}
/* 媒体查询:当屏幕宽度小于或等于 768px 时 */
@media (max-width: 768px) {
.container {
flex-direction: column; /* 上下布局 */
}
.sidebar, .main-content {
width: 100%; /* 宽度占满 */
}
}
</style>
</head>
<body>
<div class="header">网站标题</div>
<div class="container">
<div class="sidebar">侧边栏</div>
<div class="main-content">
<p>主要内容区域,在大屏幕上,它和侧边栏是左右排列的。</p>
<p>当你的浏览器窗口变窄,或者用手机查看时,它会变成上下排列的布局。</p>
</div>
</div>
<div class="footer">页脚</div>
</body>
</html>
现代布局技术:Flexbox 和 Grid
display: flex,它能让子元素自动分配空间、对齐、排序,非常适合实现导航栏、侧边栏等。Grid 布局示例:响应式图片画廊
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">Grid 布局示例</title>
<style>
.gallery {
display: grid;
/* 默认情况下,每行有 3 列,列宽为 1fr (可用空间平均分配) */
grid-template-columns: repeat(3, 1fr);
gap: 10px; /* 网格间距 */
padding: 10px;
}
.gallery-item {
background-color: #ccc;
height: 150px;
border-radius: 5px;
}
/* 媒体查询:当屏幕宽度小于等于 768px 时,每行 2 列 */
@media (max-width: 768px) {
.gallery {
grid-template-columns: repeat(2, 1fr);
}
}
/* 媒体查询:当屏幕宽度小于等于 480px 时,每行 1 列 */
@media (max-width: 480px) {
.gallery {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="gallery">
<div class="gallery-item">1</div>
<div class="gallery-item">2</div>
<div class="gallery-item">3</div>
<div class="gallery-item">4</div>
<div class="gallery-item">5</div>
<div class="gallery-item">6</div>
</div>
</body>
</html>
响应式图片
使用
max-widthimg {
max-width: 100%;
height: auto; /* 高度自动调整,保持宽高比 */
}
使用
<picture> 元素 (更高级)<picture> 元素允许你为不同屏幕尺寸提供不同分辨率的图片,从而优化加载性能。<picture>
<!-- 默认使用 small.jpg -->
<source media="(max-width: 768px)" srcset="images/small.jpg">
<!-- 对于中等屏幕,使用 medium.jpg -->
<source media="(max-width: 1200px)" srcset="images/medium.jpg">
<!-- 对于大屏幕,使用 large.jpg -->
<img src="images/large.jpg" alt="描述文字">
</picture>
总结与最佳实践
<meta name="viewport" ...>。min-width)逐步为更大的屏幕添加样式,这样可以避免为小屏幕写大量覆盖样式,代码更简洁。vw/vh、rem 等相对单位,而不是固定的 px。max-width: 100% 和 height: auto。
