响应式布局是一种网页设计方法,使网页能够自动适应不同设备(如桌面电脑、平板电脑和手机)的屏幕尺寸。
在 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() 函数实现更灵活的响应式设计