新闻中心
如何在Flex容器中固定两列,实现中间列滚动

本文旨在详细讲解如何在flexbox布局中实现一个经典三列布局,其中左右两侧列保持固定并占满整个视口高度,而中间内容区域则允许独立滚动。我们将深入探讨如何巧妙运用css的`position: sticky`属性结合视口单位`vh`,以构建一个兼具功能性和良好用户体验的布局方案,并提供完整的代码示例及注意事项。
布局挑战与需求分析
在现代Web开发中,实现复杂布局是常见需求。其中一种挑战是在一个弹性容器(Flex Container)中,需要将部分子元素固定在视口中,而其他子元素则可以随页面滚动。具体场景是构建一个三列布局:左右两列(A和C)需要始终保持在屏幕上,高度与视口一致,不随页面滚动而移动;而中间列(B)则包含大量内容,需要能够独立滚动。
传统的position: fixed或position: absolute在处理这种场景时存在局限性。fixed元素会脱离文档流,定位时需要精确的left、right值,这在外部元素宽度不确定或需要响应式布局时变得困难。absolute元素则相对于其最近的定位祖先,如果祖先元素本身滚动,absolute元素也会随之滚动,无法满足固定需求。此外,display: flex作为容器的布局方式也必须被保留。
核心解决方案:position: sticky与vh单位
解决上述挑战的关键在于结合使用CSS的position: sticky属性和视口高度单位vh。
-
position: sticky:
- position: sticky是一种混合定位模式,它结合了position: relative和position: fixed的特性。元素在未达到指定滚动阈值时表现为relative,一旦滚动到阈值,则表现为fixed,固定在视口中。
- 配合top: 0(或bottom、left、right),可以指定元素在何时开始“粘滞”。在本例中,top: 0意味着当元素滚动到距离视口顶部0像素时,它将固定在那里。
- 重要前提:sticky元素必须在其可滚动的父容器内。如果父容器没有滚动条,或者其overflow属性设置为hidden、scroll或auto(且内容没有溢出),sticky效果可能不生效。在本例中,我们希望左右两列相对于body的滚动而固定,因此它们将“粘滞”在视口中。
-
100vh 单位:
- vh(viewport height)是一个相对单位,1vh等于视口高度的1%。因此,height: 100vh意味着元素的高度将精确等于当前视口的高度。这确保了左右两列始终占满整个屏幕高度。
逐步实现
下面我们将通过具体的HTML结构和CSS样式来构建这个布局。
1. HTML 结构
我们采用一个简单的三列Flex容器结构:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flex容器中固定两列</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<div class="a">
A
<br/>固定列
</div>
<div class="b">
B
<br/>可滚动内容
<!-- 填充足够多的内容以触发滚动 -->
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<!-- 更多内容... -->
<p>...</p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="/ai/1482">
<img src="https://img.php.cn/upload/ai_manual/001/431/639/68b6ca4110e4b976.png" alt="Waifulabs">
</a>
<div class="aritcle_card_info">
<a href="/ai/1482">Waifulabs</a>
<p>一键生成动漫二次元头像和插图</p>
<div class="">
<img src="/static/images/card_xiazai.png" alt="Waifulabs">
<span>317</span>
</div>
</div>
<a href="/ai/1482" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="Waifulabs">
</a>
</div>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
&l
t;p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>以上就是如何在Flex容器中固定两列,实现中间列滚动的详细内容,更多请关注其它相关文章!
# html
# 辽宁推广网站技巧
# 陆良网站建设
# 商家推广素材网站
# 学校食堂营销推广方案
# 黑龙江淘宝网站推广
# 长春抖音推广人招聘网站
# 辽宁查关键词排名工具
# 线上网站优化怎么做的
# 也会
# 是一种
# 是在
# 构建一个
# 占满
# 是一个
# 本例
# 表现为
# 口中
# 如何在
# overflow
# css样式
# 响应式布局
# ai
# css
# 兰蔻营销与推广方案策划
# 岳阳资讯网站建设参考价
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
windows10怎么查看本机ip_windows10命令提示符ipconfig使用
J*a递归快速排序中静态变量导致数据累积问题的解决方案
谷歌google账号怎么注册账号 谷歌账号注册官方流程
Python自定义类排序:解决lambda键值访问TypeError的实践指南
快速CSGO开箱网站指南 CSGO开箱平台推荐
Python Socket多播通信中指定源IP地址的实践指南
c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换
大象笔记网页版入口 印象笔记网页版登录入口
C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用
MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略
解决深度学习模型训练初期异常高损失与完美验证准确率问题
html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】
虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作
小米Civi 4录制视频过暗_小米Civi 4亮度优化
必由学网页版入口 必由学官方平台直接访问
Golang如何实现简单的Web表单_Golang表单提交与验证处理方法
Django表单验证失败时保留用户输入数据的最佳实践
J*aScript设计模式实践_j*ascript代码优化
抖音从哪里进入网页版_抖音官方入口链接
印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】
12306几点到几点不能订票? | 官方最新系统维护时间全解析
AO3中文官网链接_AO3网页版稳定镜像站
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
Spyder启动失败:字体文件权限拒绝错误解决方案
LINUX的I/O重定向是什么_深入理解LINUX中 >、>> 与 < 的区别
提升Kafka消费者健壮性:会话超时处理与消息处理语义
Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注
必由学官网首页入口 必由学教师网页版登录指南
C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言
如何在 Excel Online 和 Google 表格中更改日期格式
探索高级语言到C/C++的转译路径:以Go为例及内存管理策略
文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】
小红书网页版入口链接分享 小红书官网直接进
拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑
QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录
Spring Boot嵌入式服务器与J*a EE:功能支持深度解析
Golang如何使用context实现超时取消_Golang context超时取消模式实践
Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程
J*aScript教程:根据元素文本内容动态设置背景色
蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源
新手怎么开始学化妆 零基础化妆入门教程
创客贴用户入口官网登录 创客贴网页版电脑版系统
J*aScript Promise链中如何正确终止后续.then执行并处理错误
MongoDB聚合管道:正确匹配对象数组中_id的方法
Typer应用中动态命令行参数的解析与处理
Pandas DataFrame 多条件优先级排序与排名
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
2025-2030年全球乘用车销量预测:新能源成增长主力


2025-11-21
浏览次数:次
返回列表
t;p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>