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

React项目如何通过flex/grid实现一行展示3个卡片组件

预期效果与实际效果对比

问题点

  1. CSS类选择器遗漏.前缀,.cards样式完全未生效
  2. 每个Card组件自带独立的.cards容器,每个容器仅包含1张卡片,自然只能单行展示1个
  3. flex布局未配置flex-wrap: wrap,卡片无法自动换行
  4. 组件导入导出命名不一致,存在渲染异常隐患

修正代码

Card组件

import React from "react";
import "../index.css";

const Card = (props) => {
  return (
    <div className="card">
      <img src={props.imgSrc} alt="Dark" className="card-img" />
      <div className="card-info">
        <span className="card-category">{props.cat}</span>
        <h3 className="card-title">{props.title}</h3>
        <a href={props.link}>
          <button>watch now</button>
        </a>
      </div>
    </div>
  );
};

export { Card };

入口文件

import React from "react";
import ReactDOM from "react-dom";
import { Card } from "./learningReact/Cards";

// 可替换为实际业务数据
const cardData = [
  {imgSrc: "图片地址1", cat: "分类1", title: "标题1", link: "跳转地址1"},
  {imgSrc: "图片地址2", cat: "分类2", title: "标题2", link: "跳转地址2"},
  {imgSrc: "图片地址3", cat: "分类3", title: "标题3", link: "跳转地址3"},
  // 可继续添加更多卡片数据
]

ReactDOM.render(
  <div className="cards">
    {cardData.map((item, idx) => <Card key={idx} {...item} />)}
  </div>,
  document.getElementById("root")
);

CSS样式

.cards {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: flex-start;
  gap: 20px;
  margin: 100px auto;
  max-width: 830px; /* 250px*3 + 20px*4 刚好容纳3张卡片加左右留白,可自行调整 */
}

.card {
  width: 250px;
  height: 300px;
  border: none;
  background: rgb(248, 239, 248);
  border-radius: 10px;
  transition: transform 0.3s ease; /* 可选:添加过渡让hover效果更顺滑 */
}
.card img {
  width: 250px;
  height: 200px;
  border-top-left-radius: 10px;
  border-top-right-radius: 10px;
}

.card:hover {
  transform: scale(1.1);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:54:05