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

如何用Flex实现选中车辆下方显示全屏红框且不打乱布局?

解决方法

问题根源是你用了flex-wrap的flex布局:选中第一辆车时,红色容器作为flex子项占满100%宽度,直接把同行的第二辆车挤到下一行;而选中第二辆车时,红色容器在所有车辆之后,自然占满整行,所以布局正常。

改用Grid布局可以完美解决这个问题,Grid能更精准控制列布局和元素跨列:

  1. 把外层容器的flex类替换为Grid类(假设用Tailwind CSS,间距可按需调整):
<section className="grid grid-cols-2 gap-4 car-append">

grid-cols-2 指定每行固定2列,gap-4 控制列与行之间的间距。

  1. 修改循环渲染逻辑,去掉冗余的index判断,直接判断当前车辆是否选中,选中时渲染跨列的红色容器:
{car.map((el, i) => {
  const isSelected = currentCar?.id === el.id;
  return (
    <>
      <CarItemList 
        key={el.id}
        startDate={startDateParam}
        endDate={endDateParam}
        onClick={() => handleSetCurrentCar(el)}
        currentCarID={isSelected ? el.id : null}
        {...el}
      />
      {isSelected && (
        <section 
          key={`detail-${el.id}`}
          style={{height: 450, backgroundColor: 'red'}}
          className="col-span-2"
        >
          <p>Test</p>
        </section>
      )}
    </>
  );
})}

col-span-2 让红色容器直接横跨2列,占满整行,完全不会影响同行另一辆车的位置。

这样不管选中哪辆车,红色容器都会在对应车辆的下方占满整行,同行车辆的布局始终保持正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:12:01