如何用Flex实现选中车辆下方显示全屏红框且不打乱布局?
解决方法
问题根源是你用了flex-wrap的flex布局:选中第一辆车时,红色容器作为flex子项占满100%宽度,直接把同行的第二辆车挤到下一行;而选中第二辆车时,红色容器在所有车辆之后,自然占满整行,所以布局正常。
改用Grid布局可以完美解决这个问题,Grid能更精准控制列布局和元素跨列:
- 把外层容器的flex类替换为Grid类(假设用Tailwind CSS,间距可按需调整):
<section className="grid grid-cols-2 gap-4 car-append">
grid-cols-2 指定每行固定2列,gap-4 控制列与行之间的间距。
- 修改循环渲染逻辑,去掉冗余的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
相关产品推荐
相关产品推荐

