本文介绍一种纯 css 方案,通过 position: sticky 分别控制侧边栏内顶部与底部元素的定位,使左侧导航在滚动时始终显示“top sider”和“bottom sider”,且自动适配 header 是否可见,无需 javascript。
在构建响应式布局时,常需实现「左侧固定宽度导航栏 + 顶部固定 Header + 右侧可滚动内容」的经典三栏结构。但一个常见痛点是:若直接对 .sider 设置 height: 100vh,会导致其
高度始终基于视口而非可用内容区域,当页面存在固定 Header 时,“底部锚点”(如版权、快捷入口)会因超出视口而不可见;而若改用 100% 又受限于父容器未设高度,无法生效。
核心解法:不约束 .sider 整体高度,而是对内部子元素分别应用 sticky 定位:
✅ 优势:
? 示例代码(关键 CSS 片段):
.inner-top {
position: sticky;
top: 0;
background-color: #4a6fa5; /* 可选:增强视觉区分 */
padding: 8px 12px;
z-index: 10;
}
.inner-bottom {
position: sticky;
bottom: 0;
background-color: #3a5a8c;
padding: 8px 12px;
z-index: 10;
}⚠️ 注意事项:
该方案优雅地规避了动态计算高度的复杂性,让左侧导航真正“智能贴边”,是现代 CSS 布局中 sticky 定位的典型实践范例。