知蛛网
  • 首页
  • 会员
  • 活动
  • 工作台

常见问题
活动
关于我们
联系我们
隐私协议
用户协议
会员协议
© 2026 知蛛网. 保留所有权利。
首页会员工作台我的
flynn@flynn
主页wiki简历作品集
目录
全部书籍
00-路线
  • 学习路线
  • 命名与写作规范
01-计算机基础
01-计算机网络
  • 互联网是如何工作的
  • HTTP协议
  • TCP/IP协议
  • 浏览器直接打开本地html文件,请求时的协议问题
02-浏览器原理
  • 浏览器是如何渲染页面的
  • 浏览器是如何渲染页面的
  • 面试之浏览器
03-操作系统
  • 进程与线程
  • 内存管理与虚拟内存
  • IO 模型与多路复用
  • 文件系统与页缓存
04-数据结构与算法
  • 数组与链表
  • 栈与队列
  • 哈希表
  • 树与堆
  • 基础数据结构
01-基础数据结构
02-高级算法
  • 排序算法
  • 二分查找
  • 递归与回溯
  • 动态规划
  • 双指针与滑动窗口
03-leetcode刷题
02-前端核心
01-web开发
  • Web 和 Web 标准
  • web 入门
  • web 开发
  • URL
  • 域名
  • Web服务器
  • 命令行
  • 工作流程和流程
  • 超链接
  • 浏览器指纹
02-html
  • HTML基础语法
  • HTML 概述
  • HTML 发展史
  • HTML调试
  • HTML标题与段落
  • 文本格式化
  • 强调与重要性
  • 块级元素和内联元素
  • 列表
  • 区块
  • 语义元素
  • 页面结构化和语义化
  • 超链接
  • 相对路径和绝对路径
  • 图片
  • 表格
  • 表单和按钮
  • 多媒体
  • 视频/音频
  • HTML 头部
  • HTML 字符集
  • HTML颜色
  • HTML 语言代码
  • HTML 国家/地区
  • Emoji (表情符号)
  • HTML 标签简写及全称 |
  • SVG
  • Canvas 2D
  • Canvas 3D
  • 框架 `<iframe>`
  • HTML 拖放
  • HTML5 Geolocation(地理定位)
  • Web 存储
  • HTML URL 编码
  • MathML
  • 远程图片资源在自己网站中无法展示问题
03-css
  • CSS简介
  • CSS 语法
  • CSS 创建
  • CSS 发展史
  • CSS 浏览器支持
  • CSS 选择器
  • CSS `!important` 规则
  • css颜色
  • CSS 文本格式
  • CSS 盒子模型
  • CSS 尺寸
  • CSS 内边距
  • CSS 外边距
  • CSS 边框
  • CSS 轮廓
  • CSS 背景(background)
  • CSS 溢出
  • CSS 文档流
  • CSS 显示和可见性
  • CSS 浮动
  • CSS 定位
  • CSS 对齐方式
  • CSS 网页布局
  • CSS 多列布局(CSS Multi-column Layout)
  • CSS 透明度
  • CSS 响应式设计(Responsive Design)
  • CSS 媒体查询
  • CSS 列表
  • CSS 表格
  • CSS 表单
  • CSS 链接
  • CSS 用户界面
  • CSS 计数器
  • CSS 过渡
  • CSS 动画
  • CSS 2D 转换
  • CSS 3D 转换
  • CSS 变量(CSS Custom Properties)
  • CSS 原生嵌套(CSS Nesting)
  • CSS 函数(CSS Functions)
04-javascript
  • 什么是 JavaScript?
  • 编程范式(Programming Paradigm)
  • 什么是范式?
  • ECMAScript 规范
  • 什么是语法糖
  • 开发环境搭建
  • 什么是堆和栈?
  • 什么是执行上下文
  • JavaScript 垃圾回收机制
  • 作业队列与事件循环
  • 深拷贝和浅拷贝
  • 语法与类型
  • 字面量
  • 控制流与错误处理
  • 循环与迭代
  • 函数
  • 表达式与运算符
  • 数字和字符串
  • 表达日期与时间
  • 正则表达式
  • 索引集合类
  • 带键的集合
  • 对象
  • 类
  • Promise
  • async/await
  • 迭代器和生成器
  • 国际化
  • 模块
  • 资源管理
  • 属性的可枚举性和所有权
  • 闭包
  • 继承与原型链
  • 元编程
  • 内存管理
  • 内置对象
  • arguments 对象
  • BOM 对象(浏览器对象模型)
  • DOM 对象(文档对象模型)
  • bind、apply、call的区别
  • new 操作符
  • typeof 和 instanceof 的区别
  • HTML5 Web Workers
05-typescript
  • TypeScript 类型系统基础
  • 类型体操
03-框架与跨端
01-react
  • 开发环境搭建
  • JSX
  • 组件
  • 生命周期
  • Hooks
  • 组件通信
  • 状态管理
  • React 19 新特性
  • useCallback 闭包陷阱
  • 常用的性能优化操作
  • Firbe 架构
  • React 18 新特性
  • useRef
  • 基于umijs 4.0 搭建官网
  • react+vite本地开发,如何手机联调
  • React 实现谷歌登录
  • React 项目调起 WhatsApp
02-vue
  • vue 解决跨域请求
  • 在vue2使用TinyMCE富文本编辑器
  • 使用jszip 导出新闻
  • Vue 本地开发启用 https
  • 基于vue3+vite+ts+elementplus+pinia+axios搭建后台管理系统
03-react-native
  • iOS 开发环境(RN 0.72)
  • RN 原生模块(Native Module)
  • 查看Maven包的Java包名
  • 优化 APP 启动速度
  • 安全键盘
  • 启动图与 Icon 尺寸规范
  • RN如何生成/配置iOS的开发者证书和生产证书
  • 邓白氏编码
  • 微信开放平台配置Universal Link
  • 上架至Apple App Store
04-android
  • 开发环境搭建
  • Android项目目录结构
  • 认识Gradle
04-工程化
01-git
  • 如何解决已被git跟踪文件不在跟踪
  • git标签
  • Git报错: Failed to connect to github.com port 443 解决方案
  • Git 分支操作速查
02-构建工具
  • 构建工具原理与选型
02-webpack
  • webpack 核心概念与构建流程
  • webpack 性能优化
03-vite
  • vite 为什么快
  • vite 插件与生产构建
03-测试
  • 前端测试体系
04-部署
  • Nginx 反向代理解决跨域
  • SPA 刷新非首页报 404
05-docker
  • Docker 常用命令
  • docker-compose nginx配置ssl证书
  • Docker Desktop 升级后 docker-compose 命令找不到
06-性能优化
  • 前端性能优化体系
  • 背景 GIF 优化方案
07-微前端
  • 微前端实战(qiankun)
  • 微前端 · qiankun
01-qiankun
05-后端与数据
01-nodejs
  • Node 版本与依赖的 engines 冲突
  • Express 实现 Gmail 发信(邮箱验证码)
02-php
  • 浏览器保存新闻,发布到自有网站
  • [分布式] 浏览器保存新闻,发布到自有网站
  • 邮件发送,多账号轮询
  • nginx和php-fpm通信问题导致网站页面空白
03-python
  • macOS M1 芯片 如何安装 py 和 tkinter
  • tkinter 编写的程序如何打包成桌面软件
04-架构设计
  • 后台管理系统中角色管理、管理员管理、权限设置他们三者之间的关系
05-运维
  • redis启动失败
  • 实现自动备份宝塔项目及数据库到本地
  • 宝塔面板
01-宝塔
06-实战项目
  • 实战准备工作
02-项目记录
  • AI-Chat 模块技术文档
  • CRMChat 部署
07-面试专项
01-面试
  • 面试之自我介绍
  • CSS 面试
  • JS面试
  • React面试
  • Vue面试
  • RN 面试 · 题目清单
  • RN 面试 · 答案详解
  • RN 物流公司 · 题目清单
  • RN 物流公司 · 答案详解
  • Uniapp 面试
  • 带团队经验
12-react专项
  • 一个表格,某一行的某一列数据变动了,如何优化性能?
13-reactnative专项
  • RN 开发过程中,有遇到什么棘手的问题?你是如何解决的?
14-过往面试总结
  • 冷哥传媒 · 面试题
  • 沐腾科技 · 面试题
  • 字符频率排序
02-面试八股
  • 网络八股
  • 浏览器八股
  • 工程化八股
03-算法面试题
  • 前端高频手写题
  • 场景设计题
04-真实面试经历
  • 20251027 盾蓝科技 面试
  • 20251028 芝麻甜心 面试
08-工具
01-n8n
  • 初始n8n
  • 快速入门
  • 在宝塔中搭建n8n环境
  • n8n中常用节点
  • n8n和代码的区别
02-Trae
  • Figma MCP 配置指南
03-UI_UX_pro_max
  • UI_UX_pro_max的使用
04-开发环境
  • VMWare虚拟机安装
  • PowerShell 执行策略与编码设置
98-杂项
  • A股股票交易相关费用
99-手册
  • iOS 开发者账号申请流程及费用
  • 邓白氏编码申请及费用
  • App 推送通道申请及费用
  • App 开发收费项目清单
  • 注册AWS账号
  • 使用Amazon Polly实现文本转语音
  • Google 翻译 Key 申请与前端调用
  • 使用SmsForwarder转发短信

CSS 网页布局

03-css2026/11/14

网页布局 = 控制 HTML 元素在页面中的排列方式

核心要点:

  • 文档流:元素的默认排列顺序(标准文档流/非标准文档流)
  • 盒子模型:元素宽高由 content + padding + border + margin 决定
  • 定位方式:控制元素在页面的具体位置(static、relative、absolute、fixed、sticky)
  • 对齐方式:水平/垂直对齐(text-align、vertical-align、flex/grid 对齐)

布局技术演进

时期主要技术特点
早期表格布局简单但语义差,已淘汰
传统浮动+定位灵活但复杂,需要清除浮动
现代Flexbox一维布局,内容驱动
现代CSS Grid二维布局,容器驱动
未来容器查询组件驱动响应式

传统布局方法

1. 浮动布局

<div class="header">网站标题</div>
<div class="clearfix">
    <div class="sidebar">侧边栏</div>
    <div class="main-content">主要内容</div>
</div>
<div class="footer">页脚</div>
/* 清除浮动 */
.clearfix::after {
    content: "";
    display: table;
    clear: both;
}

/* 两栏布局 */
.header {
    background: #333;
    color: white;
    padding: 20px;
}

.sidebar {
    float: left;
    width: 25%;
    background: #f4f4f4;
    padding: 20px;
}

.main-content {
    float: left;
    width: 75%;
    padding: 20px;
}

.footer {
    clear: both;
    background: #333;
    color: white;
    padding: 20px;
    text-align: center;
}

Flexbox 布局(一维布局)

Flexbox 非常适合一维布局(行或列)。

1. 基础 Flex 布局

<div class="flex-container">
    <div class="flex-item">项目 1</div>
    <div class="flex-item">项目 2</div>
    <div class="flex-item">项目 3</div>
</div>
.flex-container {
    display: flex;
    gap: 20px; /* 项目间距 */
    padding: 20px;
    background: #f8f9fa;
}

.flex-item {
    flex: 1; /* 等分剩余空间 */
    padding: 20px;
    background: white;
    border-radius: 8px;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

2. 常用 Flex 布局模式

导航栏:

.navbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 1rem 2rem;
    background: #333;
    color: white;
}

.nav-brand {
    font-size: 1.5rem;
    font-weight: bold;
}

.nav-menu {
    display: flex;
    gap: 2rem;
    list-style: none;
    margin: 0;
    padding: 0;
}

.nav-item a {
    color: white;
    text-decoration: none;
    transition: color 0.3s;
}

.nav-item a:hover {
    color: #ffd700;
}
上一篇CSS 对齐方式
下一篇CSS 多列布局(CSS Multi-column Layout)
本页目录
布局技术演进传统布局方法1. 浮动布局Flexbox 布局(一维布局)1. 基础 Flex 布局2. 常用 Flex 布局模式CSS Grid 布局(二维布局)1. 基础 Grid 布局2. 常用 Grid 布局模式响应式布局策略1. 移动端优先2. 混合布局技术实用布局示例示例 1:现代博客布局示例 2:电商产品网格示例 3:个人作品集布局最佳实践1. 使用 CSS 自定义属性2. 容器查询(现代方法)3. 性能优化布局技术选择指南:核心原则:

卡片布局:

.card-container {
    display: flex;
    flex-wrap: wrap;
    gap: 20px;
    padding: 20px;
}

.card {
    flex: 1 1 300px; /* 基础300px,可伸缩 */
    background: white;
    border-radius: 8px;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
    padding: 20px;
    transition: transform 0.3s;
}

.card:hover {
    transform: translateY(-5px);
}

圣杯布局(Holy Grail):

.holy-grail {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

.header {
    background: #2c3e50;
    color: white;
    padding: 1rem;
    text-align: center;
}

.main-content {
    display: flex;
    flex: 1;
}

.sidebar {
    width: 250px;
    background: #34495e;
    color: white;
    padding: 1rem;
}

.content {
    flex: 1;
    padding: 2rem;
    background: #ecf0f1;
}

.footer {
    background: #2c3e50;
    color: white;
    padding: 1rem;
    text-align: center;
}

CSS Grid 布局(二维布局)

Grid 非常适合复杂的二维布局。

1. 基础 Grid 布局

.grid-container {
    display: grid;
    grid-template-columns: repeat(3, 1fr); /* 3等分列 */
    grid-template-rows: auto;
    gap: 20px;
    padding: 20px;
}

.grid-item {
    background: white;
    padding: 20px;
    border-radius: 8px;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

2. 常用 Grid 布局模式

经典网页布局:

<div class="page-layout">
    <header class="header">网站标题</header>
    <aside class="sidebar">侧边栏</aside>
    <main class="content">主要内容</main>
    <footer class="footer">版权信息</footer>
</div>
.page-layout {
    display: grid;
    grid-template-areas:
        "header header header"
        "sidebar content content"
        "footer footer footer";
    grid-template-rows: auto 1fr auto;
    grid-template-columns: 250px 1fr;
    min-height: 100vh;
    gap: 0;
}

.header {
    grid-area: header;
    background: #2c3e50;
    color: white;
    padding: 1rem;
}

.sidebar {
    grid-area: sidebar;
    background: #34495e;
    color: white;
    padding: 1rem;
}

.content {
    grid-area: content;
    background: #ecf0f1;
    padding: 2rem;
}

.footer {
    grid-area: footer;
    background: #2c3e50;
    color: white;
    padding: 1rem;
    text-align: center;
}

瀑布流布局:

.masonry-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
    grid-auto-rows: 10px; /* 控制行高基数 */
    gap: 15px;
    padding: 20px;
}

.masonry-item {
    background: white;
    border-radius: 8px;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
    padding: 20px;
}

/* 不同高度的项目 */
.masonry-item:nth-child(2n) {
    grid-row: span 6; /* 占6行 */
}

.masonry-item:nth-child(3n) {
    grid-row: span 8; /* 占8行 */
}

仪表板布局:

.dashboard {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: auto;
    gap: 20px;
    padding: 20px;
    background: #f5f6fa;
}

.widget {
    background: white;
    border-radius: 8px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
    padding: 20px;
}

.widget-large {
    grid-column: span 2;
    grid-row: span 2;
}

.widget-wide {
    grid-column: span 4;
}

响应式布局策略

1. 移动端优先

/* 基础样式 - 移动端 */
.container {
    width: 100%;
    padding: 15px;
}

.grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 15px;
}

/* 平板 */
@media (min-width: 768px) {
    .container {
        max-width: 720px;
        margin: 0 auto;
        padding: 20px;
    }

    .grid {
        grid-template-columns: repeat(2, 1fr);
        gap: 20px;
    }
}

/* 桌面 */
@media (min-width: 1024px) {
    .container {
        max-width: 1200px;
        padding: 30px;
    }

    .grid {
        grid-template-columns: repeat(3, 1fr);
        gap: 30px;
    }
}

/* 大桌面 */
@media (min-width: 1440px) {
    .grid {
        grid-template-columns: repeat(4, 1fr);
    }
}

2. 混合布局技术

.responsive-layout {
    display: grid;
    grid-template-columns: 1fr;
    gap: 20px;
}

/* 中等屏幕:Grid + Flexbox */
@media (min-width: 768px) {
    .responsive-layout {
        grid-template-columns: 250px 1fr;
    }

    .content-area {
        display: flex;
        flex-direction: column;
        gap: 20px;
    }
}

/* 大屏幕:复杂 Grid */
@media (min-width: 1024px) {
    .responsive-layout {
        grid-template-columns: 300px 1fr 200px;
        grid-template-areas:
            "sidebar main sidebar2"
            "sidebar main sidebar2";
    }
}

实用布局示例

示例 1:现代博客布局

.blog-layout {
    display: grid;
    grid-template-columns: 1fr;
    grid-template-areas:
        "header"
        "main"
        "sidebar"
        "footer";
    gap: 0;
    min-height: 100vh;
}

@media (min-width: 768px) {
    .blog-layout {
        grid-template-columns: 1fr 300px;
        grid-template-areas:
            "header header"
            "main sidebar"
            "footer footer";
    }
}

.blog-header {
    grid-area: header;
    background: #2c3e50;
    color: white;
    padding: 2rem;
}

.blog-main {
    grid-area: main;
    padding: 2rem;
    background: white;
}

.blog-sidebar {
    grid-area: sidebar;
    padding: 2rem;
    background: #f8f9fa;
}

.blog-footer {
    grid-area: footer;
    background: #34495e;
    color: white;
    padding: 2rem;
    text-align: center;
}

示例 2:电商产品网格

.products-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 25px;
    padding: 20px;
}

.product-card {
    background: white;
    border-radius: 12px;
    overflow: hidden;
    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
    transition: all 0.3s ease;
}

.product-card:hover {
    transform: translateY(-8px);
    box-shadow: 0 12px 20px rgba(0, 0, 0, 0.15);
}

.product-image {
    width: 100%;
    height: 200px;
    object-fit: cover;
}

.product-info {
    padding: 20px;
}

.product-price {
    font-size: 1.25rem;
    font-weight: bold;
    color: #e74c3c;
    margin: 10px 0;
}

示例 3:个人作品集

.portfolio {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
    grid-auto-rows: 250px;
    gap: 20px;
    padding: 20px;
}

.portfolio-item {
    position: relative;
    border-radius: 8px;
    overflow: hidden;
    cursor: pointer;
}

.portfolio-item::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: linear-gradient(45deg, rgba(0, 0, 0, 0.8), transparent);
    opacity: 0;
    transition: opacity 0.3s ease;
}

.portfolio-item:hover::before {
    opacity: 1;
}

.portfolio-item img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.3s ease;
}

.portfolio-item:hover img {
    transform: scale(1.05);
}

布局最佳实践

1. 使用 CSS 自定义属性

:root {
    --primary-color: #3182ce;
    --secondary-color: #718096;
    --spacing-xs: 0.5rem;
    --spacing-sm: 1rem;
    --spacing-md: 1.5rem;
    --spacing-lg: 2rem;
    --border-radius: 8px;
    --shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

.container {
    max-width: 1200px;
    margin: 0 auto;
    padding: var(--spacing-md);
}

.card {
    background: white;
    border-radius: var(--border-radius);
    box-shadow: var(--shadow);
    padding: var(--spacing-lg);
}

2. 容器查询(现代方法)

.component {
    container-type: inline-size;
}

@container (min-width: 400px) {
    .component {
        display: grid;
        grid-template-columns: 1fr 2fr;
        gap: 20px;
    }
}

@container (min-width: 600px) {
    .component {
        grid-template-columns: 1fr 3fr 1fr;
    }
}

3. 性能优化

/* 使用 transform 和 opacity 实现动画(性能更好) */
.animated-element {
    transition: transform 0.3s ease, opacity 0.3s ease;
}

.animated-element:hover {
    transform: scale(1.05);
    opacity: 0.9;
}

/* 使用 will-change 提示浏览器 */
.optimized-element {
    will-change: transform;
}

/* 避免布局抖动 */
.stable-layout {
    width: 100%;
    height: 200px; /* 固定高度避免重排 */
}

布局技术选择指南:

场景推荐技术理由
一维布局Flexbox内容驱动,灵活对齐
二维布局CSS Grid容器驱动,精确控制
导航/工具栏Flexbox完美的对齐控制
卡片布局Grid自动响应式
复杂页面Grid清晰的区域划分
移动端优先Flexbox + Media渐进增强

核心原则:

  • 移动端优先 - 从小屏幕开始设计
  • 语义化 HTML - 使用正确的标签
  • 渐进增强 - 确保基础功能可用
  • 性能考虑 - 优化重绘和重排
  • 可访问性 - 确保键盘导航和屏幕阅读器支持