响应式侧边栏菜单下方放置背景图片的布局实现问题
问题修复方案
你当前的布局问题来自两个错误的固定定位配置:
- 小屏断点下仍保留了侧边栏的
position: fixed属性,同时给侧边栏设置了height: 100vh占满整个视口高度,固定定位的元素不会占据常规文档流位置,下方的背景图容器自然无法排列在它下方 - 小屏断点下给背景图容器
.content也设置了position: fixed,两个固定定位元素重叠,靠写死的margin-top适配不同设备必然会出现错位
修改步骤
- 全局统一盒模型规则,给所有元素启用border-box
- 给body添加顶部内边距避让固定定位的头部导航
- 小屏断点下将侧边栏改为常规文档流定位,高度自适应内容,取消固定定位
- 小屏断点下重置背景图容器的定位规则和外边距,让它自然排列在侧边栏下方
完整修改后代码
CSS代码
@import "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css"; /* 全局盒模型统一 */ * { box-sizing: border-box; } body { margin: 0; padding: 0; /* 避让固定定位的头部 */ padding-top: 70px; } header { position: fixed; top: 0; left: 0; background: #333; padding: 20px; width: 100%; height: 70px; z-index: 999; } .left_area h3 { color: #fff; font-size: 30px; font-weight: 900; margin: 0; } .left_area span { color: orange; } .logout_btn { padding: 5px 12px; background: aqua; float: right; margin-top: -30px; margin-right: 40px; text-decoration: none; border-radius: 100px; cursor: pointer; font-size: 16px; } .logout_btn:hover { background: aquamarine; } .sidebar { position: fixed; left: 0; top: 70px; padding-top: 30px; background: rgb(134, 134, 134); width: 260px; height: calc(100vh - 70px); } .my_profile { width: 100px; height: 100px; border-radius: 100px; border: 5px solid orange; } .sidebar h4 { color: #fff; margin-bottom: 2px; font-size: 22px; font-weight: bold; text-align: center; } .sidebar h4 span { color: aqua; } .sidebar a { color: #fff; display: block; line-height: 74px; text-decoration: none; padding: 0 40px; text-align: center; } .sidebar a:hover { background: orange; } .sidebar i { padding-right: 10px; } .content { background: url(images/charles-adrien-fournier-g815W4LH4F8-unsplash.jpg); background-size: cover; background-repeat: no-repeat; background-position: center; margin-left: 260px; min-height: calc(100vh - 70px); } @media (max-width:768px) { .left_area h3 { font-size: 23px; font-weight: 900; } .logout_btn { margin-top: -28px; margin-right: 20px; font-size: 14px; } /* 侧边栏改为常规流定位,宽度100%,高度自适应 */ .sidebar { position: relative; top: 0; width: 100%; height: auto; padding: 30px 0; } .sidebar a { line-height: 72px; } .sidebar i { padding-right: 20px; } /* 背景图容器重置外边距,自然排列在侧边栏下方 */ .content { position: static; margin-left: 0; margin-top: 0; min-height: 100vh; } }
HTML代码
无需修改,保持原有结构即可。
内容的提问来源于stack exchange,提问作者Frat_boy_trent_69
相关产品推荐
相关产品推荐

