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

如何让flex居中的子div点击后仅向下延展,不上下同时扩张?

问题原因

父容器设置了align-items: center属性,该属性会让子元素始终在垂直方向保持居中,因此子元素高度变化时,上下两端会同步向外延伸,保证中心点位置不变,就出现了你现在看到的上下同时拉伸的效果。

解决方案

下面提供两种可直接复用的修改方案:

方案1:使用绝对定位实现居中(无需修改JS代码)

仅修改CSS部分即可,核心是固定子元素的顶部初始位置,高度变化时不会改变顶部坐标:

#div1 {
  height: 200px;
  width: 200px;
  outline: red solid medium;
  /* 新增相对定位作为子元素定位参照 */
  position: relative;
}

#div2 {
  height: 100px;
  width: 100px;
  outline: blue solid medium;
  /* 新增以下属性实现初始居中,且固定顶部位置 */
  position: absolute;
  left: 50%;
  top: 50%;
  /* Y方向固定偏移-50px,对应初始高度的一半,保证顶部始终距离父容器顶部50px */
  transform: translate(-50%, -50px);
}

原有JS代码无需修改,点击后即可实现仅向下增高的效果。

方案2:保留flex布局,点击时调整对齐规则

无需修改CSS代码,仅修改JS部分即可:

let div2 = document.querySelector("#div2");
div2.addEventListener("click", e => {
  div2.style.height = "300px";
  // 新增以下两行,固定子元素顶部位置
  div2.style.alignSelf = "flex-start";
  // 初始居中时子元素顶部距离父容器顶部刚好为50px,固定该边距即可
  div2.style.marginTop = "50px";
})

内容的提问来源于stack exchange,提问作者Saud Alghamdi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:45:05