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

CSS实现卡片式Div横向排列并自动换行问题求助

卡片横向排列重叠问题的解决方案

这个问题的核心原因很明确:你给.fighter-card设置了position: absolute,绝对定位的元素会完全脱离正常的文档流,所有卡片都会被定位到同一个top:50%;left:50%的位置,所以新添加的卡片会直接叠在旧卡片上面。

下面是具体的修复步骤,同时还会优化卡片的交互逻辑:


1. 给卡片添加父容器

首先要给所有卡片套一个父容器,用来统一控制布局。修改后的HTML结构如下:

<div class="fighter-card-container">
  <!-- 第一个卡片 -->
  <div class="fighter-card">
    <div class="front active">
      <div class="ranking-position">1</div>
      <div class="more">
        <i class="fa fa-info-circle" aria-hidden="true"></i>
      </div>
      <div class="fighter-picture">
        <img src="~/images/Resources/RankingsPhotos/Lomachenko.png" />
      </div>
      <ul class="information">
        <li>
          <div class="information-left">Name:</div>
          <div class="information-right">aa</div>
        </li>
        <li>
          <div class="information-left">Weight:</div>
          <div class="information-right">aa</div>
        </li>
        <li>
          <div class="information-left">Belts:</div>
          <div class="information-right">aa</div>
        </li>
      </ul>
    </div>
    <div class="back">
      <div class="go-back">
        <i class="fa fa-chevron-circle-left" aria-hidden="true"></i>
      </div>
      <ul class="information">
        <li>
          <div class="information-left">Yesterday</div>
          <div class="information-right">9<sup>o</sup></div>
        </li>
        <li>
          <div class="information-left">Today</div>
          <div class="information-right">9<sup>o</sup></div>
        </li>
        <li>
          <div class="information-left">None of your business</div>
          <div class="information-right">9<sup>o</sup></div>
        </li>
        <li>
          <div class="information-left">Yesterday</div>
          <div class="information-right">9<sup>o</sup></div>
        </li>
        <li>
          <div class="information-left">Today</div>
          <div class="information-right">9<sup>o</sup></div>
        </li>
        <li>
          <div class="information-left">aa</div>
          <div class="information-right">9<sup>o</sup></div>
        </li>
      </ul>
    </div>
  </div>

  <!-- 第二个卡片 -->
  <div class="fighter-card">
    <!-- 这里放和第一个卡片一样的内容 -->
  </div>
</div>

2. 修改CSS实现横向排列自动换行

删掉卡片的绝对定位样式,改用Flex布局让卡片横向排列并自动换行:

/* 父容器样式:控制卡片布局 */
.fighter-card-container {
  display: flex;
  flex-wrap: wrap; /* 宽度不够时自动换行 */
  gap: 20px; /* 卡片之间的间距,可根据需求调整 */
  padding: 20px;
  justify-content: center; /* 可选:让卡片在容器中居中排列 */
}

/* 修改卡片样式:移除绝对定位,保留相对定位用于内部元素参照 */
.fighter-card {
  /* 移除以下绝对定位样式:
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  */
  width: 400px;
  min-height: 400px;
  position: relative; /* 必须保留,因为卡片内部的.back用了绝对定位,需要以卡片为参照 */
}

/* 其余原有CSS样式保持不变 */
.fighter-card .front {
  width: 100%;
  height: 100%;
  background: #171717;
  padding: 30px;
  box-sizing: border-box;
  transition: .5s;
  transform-origin: right;
}
/* ... 其他原有样式都保留 */

3. 修复JavaScript的全局触发问题

原来的JS点击任意一个more按钮,会让所有卡片同时翻转,这显然不是你想要的。修改为只操作当前点击的卡片:

$(document).ready(function () {
  $('.more').click(function () {
    // 找到当前点击按钮所在的卡片,只操作该卡片的正反两面
    const currentCard = $(this).closest('.fighter-card');
    currentCard.find('.back').addClass('active');
    currentCard.find('.front').removeClass('active');
  });

  $('.go-back').click(function () {
    const currentCard = $(this).closest('.fighter-card');
    currentCard.find('.back').removeClass('active');
    currentCard.find('.front').addClass('active');
  });
});

这样修改之后,卡片会自动在容器内横向排列,当屏幕宽度不足以容纳更多卡片时会自动换行,而且每个卡片的翻转操作都是独立的,不会影响其他卡片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:13:22