挑战用React封装100个组件【002】

项目地址
https://github.com/hismeyy/react-component-100

组件描述

组件适用于需要展示图文信息的场景,比如产品介绍、用户卡片或任何带有标题、描述和可选图片的内容展示

样式展示

代码展示

InfoCard.tsx
js 复制代码
import './InfoCard.css'

interface InfoCardProps {
    title: string;
    description: string;
    imgSrc: string;
    imgAlt?: string;
}

const InfoCard = ({ 
    title, 
    description, 
    imgSrc, 
    imgAlt = title
}: InfoCardProps) => {
    return (
        <div className='info-card'>
            <div className='img'>
                {imgSrc && <img src={imgSrc} alt={imgAlt} />}
            </div>
            <div className="info">
                <h6>{title}</h6>
                <p>{description}</p>
            </div>
        </div>
    )
}

export default InfoCard
InfoCard.css
js 复制代码
.info-card {
    box-sizing: border-box;
    width: 350px;
    height: 450px;
    border-radius: 15px;
    background-color: #F5F5F5;
    box-shadow: 3px 3px 6px rgba(0, 0, 0, 0.3);
    display: flex;
    flex-direction: column;
    align-items: left;
    padding: 15px;
    cursor: pointer;
    transform-origin: center;
    position: relative;
    overflow: hidden;
}

.info-card .img {
    width: 320px;
    height: 320px;
    overflow: hidden;
    display: flex;
    justify-content: center;
    align-items: center;
    border-radius: 8px;
    box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3);
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.info-card .img img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}

.info-card .info {
    margin: 20px 5px 0;
    height: 60px;
    position: relative;
    z-index: 1;
    transition: transform 0.3s ease;
}

.info-card .info h6 {
    all: unset;
    display: block;
    width: 100%;
    font-size: 16px;
    font-weight: bold;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    transition: color 0.3s ease;
}

.info-card .info p {
    all: unset;
    display: -webkit-box;
    width: 100%;
    margin-top: 10px;
    font-size: 12px;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
    word-wrap: break-word;
    line-height: 1.3;
    line-clamp: 2;
    box-orient: vertical;
}

.info-card:hover .img {
    transform: scale(1.02);
}

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

.info-card:hover .info h6 {
    color: #f08a5d;
}

使用

App.tsx
js 复制代码
import './App.css'
import InfoCard from './components/card/infoCard02/InfoCard'

function App() {
  return (
    <>
      <InfoCard
        title="Web全栈开发指南"
        description="全面的Web开发学习指南,涵盖前端技术、后端开发、数据库设计等多个领域的知识。本课程将帮助你构建完整的开发技能体系。"
        imgSrc="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?w=600&q=80"
      />
    </>
  )
}

export default App
相关推荐
用户059540174469 小时前
把AI长期记忆测试从手动验证换成pytest,2天揪出11个隐藏Bug
前端·css
a11177611 小时前
唯美花朵风格的黑胶唱片音乐播放器
前端·css·css3
gis开发之家12 小时前
《Vue3 从入门到大神40篇》Vue3 源码详解(十):diff 算法全解析 —— 为什么 Vue3 比 Vue2 更快?
javascript·算法·typescript·前端框架·vue3·vue3源码
布兰妮甜16 小时前
CSS 现代布局终极方案:Grid 完整实战,替代浮动/弹性布局复杂场景
css·grid·实战教程·浮动·web布局
勇往直前plus17 小时前
Vue3(篇四)单页面应用到路由管理
javascript·typescript·前端框架·vue
JR空位投 李佃贵是20 小时前
如何编写轻量级 CSS 框架
前端·css·tensorflow
LaughingZhu1 天前
Product Hunt 每日热榜 | 2026-07-28
前端·神经网络·react.js·搜索引擎·前端框架
Highcharts.js1 天前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
sugar__salt1 天前
从零搭建 React Todo 应用:掌握组件化、状态管理与数据驱动
前端·react.js·前端框架
寒水馨2 天前
Windows下载、安装 Tailwind CSS-v4.3.3(附安装包tailwindcss-windows-x64.exe)
前端·css·前端开发·tailwind css·utility-first·css 框架·独立 cli