You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flexbox布局div响应式异常:中间居中div被左侧元素挤压偏移如何解决

解决方案

核心思路

问题根源在于flex布局默认开启了元素收缩规则(flex-shrink: 1),且justify-content: space-between在空间不足时会优先压缩元素间距,导致中间块被挤压偏移。我们可以改用grid布局实现需求:既保留宽屏状态下左块靠左、右块靠右、中间块居中的效果,窄屏时左右块分别向两侧溢出隐藏,中间块始终保持居中。

完整修改代码

CSS代码

main {
  margin-top: 200px;
  display: grid;
  /* 左右列占剩余自适应空间,中间列固定250px */
  grid-template-columns: 1fr 250px 1fr;
  /* 裁剪横向超出的内容,不需要可替换为auto来显示横向滚动条 */
  overflow-x: clip;
}

#left {
  /* 左块始终贴左列左侧 */
  justify-self: start;
  width: 250px;
  height: 250px;
  background-color: blue;
  transform: translateX(-50px);
  animation: bounce_left 6s ease-in-out infinite;
}

#center {
  /* 中间块始终居中 */
  justify-self: center;
  width: 250px;
  height: 250px;
  background-color: red;
  /* 可选:设置z-index让中间块覆盖在左右块上方 */
  z-index: 1;
  position: relative;
}

#right {
  /* 右块始终贴右列右侧 */
  justify-self: end;
  width: 250px;
  height: 250px;
  background-color: green;
  animation: bounce_right 6s ease-in-out infinite;
}

@keyframes bounce_left {
    0% {transform: translateX(-50px);}
    50% {transform: translateX(0px);}
    100% {transform: translateX(-50px);}
}
@keyframes bounce_right {
    0% {transform: translateX(50px);}
    50% {transform: translateX(0px);}
    100% {transform: translateX(50px);}
}

HTML代码

无需修改,和原有代码保持一致即可。

适配效果说明

  • 窗口宽度≥750px时:表现和原来的flex布局完全一致,左块靠左、右块靠右、中间块居中
  • 窗口宽度<750px时:左右列自动收缩为0,左块向左超出视口隐藏、右块向右超出视口隐藏,中间块始终保持在屏幕水平居中位置,不会发生偏移。

内容的提问来源于stack exchange,提问作者Alex Toma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:15:07