响应式布局是一种网页设计方法,使网页能够自动适应不同设备(如桌面电脑、平板电脑和手机)的屏幕尺寸。
在 HTML 头部添加视口设置:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
媒体查询允许我们根据设备特性(如屏幕宽度)应用不同的样式。
/* 默认样式 */
.container {
width: 100%;
max-width: 1200px;
margin: 0 auto;
}
/* 平板设备 */
@media (max-width: 768px) {
.container {
padding: 0 20px;
}
}
/* 手机设备 */
@media (max-width: 480px) {
.container {
padding: 0 10px;
}
}
Flexbox 是一种一维的布局模型,它能够有效地处理行或列的布局。
.flex-container {
display: flex;
gap: 20px;
margin: 20px 0;
}
.flex-item {
flex: 1;
padding: 20px;
background: #e8f4f8;
border-radius: 4px;
text-align: center;
}
@media (max-width: 768px) {
.flex-container {
flex-direction: column;
}
}
Grid 布局是一个二维的布局系统,可以同时处理行和列。
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
margin: 20px 0;
}
.grid-item {
padding: 20px;
background: #e8f4f8;
border-radius: 4px;
text-align: center;
}
@media (max-width: 768px) {
.grid-container {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 480px) {
.grid-container {
grid-template-columns: 1fr;
}
}
图片是响应式设计中最需要关注的部分之一,需要确保图片在不同设备上都能正确显示。
/* 基础响应式图片 */
.responsive-img {
max-width: 100%;
height: auto;
}
/* 图片容器 */
.img-container {
width: 100%;
margin: 20px 0;
}
/* 不同设备下的图片大小 */
@media (max-width: 768px) {
.img-container {
padding: 0 10px;
}
}
/* 使用 picture 元素 */
.picture-demo {
width: 100%;
margin: 20px 0;
}
表格在移动设备上显示时经常会出现横向滚动的问题,需要特殊处理。
/* 响应式表格容器 */
.table-container {
width: 100%;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
/* 基础表格样式 */
.responsive-table {
width: 100%;
border-collapse: collapse;
margin: 20px 0;
}
.responsive-table th,
.responsive-table td {
padding: 12px;
text-align: left;
border-bottom: 1px solid #ddd;
}
/* 移动端表格处理 */
@media (max-width: 768px) {
.responsive-table thead {
display: none;
}
.responsive-table tr {
display: block;
margin-bottom: 15px;
border: 1px solid #ddd;
}
.responsive-table td {
display: block;
text-align: right;
padding: 12px;
position: relative;
padding-left: 50%;
}
.responsive-table td:before {
content: attr(data-label);
position: absolute;
left: 12px;
width: 45%;
text-align: left;
font-weight: bold;
}
}
| 姓名 | 年龄 | 职业 | 城市 |
|---|---|---|---|
| 张三 | 25 | 工程师 | 北京 |
| 李四 | 30 | 设计师 | 上海 |
导航栏是网站的重要组成部分,需要确保在各种设备上都能良好显示。
/* 导航栏容器 */
.nav-container {
background: #333;
padding: 1rem;
}
/* 导航菜单 */
.nav-menu {
display: flex;
list-style: none;
margin: 0;
padding: 0;
}
.nav-item {
margin-right: 20px;
}
.nav-link {
color: white;
text-decoration: none;
padding: 10px;
}
/* 汉堡菜单按钮 */
.menu-toggle {
display: none;
background: none;
border: none;
color: white;
font-size: 1.5rem;
cursor: pointer;
}
/* 移动端样式 */
@media (max-width: 768px) {
.menu-toggle {
display: block;
}
.nav-menu {
display: none;
flex-direction: column;
}
.nav-menu.active {
display: flex;
}
.nav-item {
margin: 10px 0;
}
}
字体大小需要根据设备尺寸自动调整,确保良好的可读性。
/* 基础字体设置 */
:root {
font-size: 16px;
}
/* 响应式字体大小 */
h1 {
font-size: 2.5rem;
}
h2 {
font-size: 2rem;
}
h3 {
font-size: 1.75rem;
}
p {
font-size: 1rem;
line-height: 1.6;
}
/* 使用 clamp 函数 */
.responsive-text {
font-size: clamp(1rem, 5vw, 2rem);
line-height: 1.5;
}
/* 移动端字体调整 */
@media (max-width: 768px) {
:root {
font-size: 14px;
}
h1 {
font-size: 2rem;
}
h2 {
font-size: 1.75rem;
}
h3 {
font-size: 1.5rem;
}
}
1. 始终使用相对单位(如 %, em, rem)而不是固定单位(如 px)
2. 使用媒体查询时,建议采用移动优先的设计方法
3. 测试时使用浏览器的设备模拟器,确保在不同设备上都能正常显示
4. 注意图片的响应式处理,可以使用 max-width: 100% 确保图片不会溢出容器
1. 使用 CSS 变量(Custom Properties)管理响应式断点
2. 使用 CSS Grid 的 auto-fit 和 auto-fill 实现自适应列数
3. 使用 aspect-ratio 属性确保元素比例一致
4. 使用 container queries 实现组件级别的响应式
5. 使用 CSS 的 min(), max(), clamp() 函数实现更灵活的响应式设计