自适应卡片布局

使用响应式设计,使得用户在屏幕尺寸发生变化时,动态调整页面的卡片布局。

自适应卡片布局

GroupCardListLayout组件实现布局,GroupCard组件实现卡片样式

// index.js
import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import GroupCard from '@/components/GroupCard';
import styles from './index.less';

class GroupCardListLayout extends PureComponent {
  static propTypes = {
    data: PropTypes.array.isRequired,
    onEditDivision: PropTypes.func.isRequired,
    onDeleteDivision: PropTypes.func.isRequired,
  };

  render() {
    const { data, onEditDivision, onDeleteDivision } = this.props;

    return (
      <div>
        {data.length > 0 && (
          <div className={styles.modelContent}>
            {data.map((project) => (
              <GroupCard
                key={project.divisionId}
                record={project}
                onEditDivision={onEditDivision}
                onDeleteDivision={onDeleteDivision}
              />
            ))}
          </div>
        )}
      </div>
    );
  }
}

export default GroupCardListLayout;
  // index.less

@import '~antd/lib/style/themes/default.less';

.modelContent {
  display: grid;
  grid-template-columns:repeat(auto-fill,minmax(300px,1fr));
  grid-template-rows:repeat(auto-fill,minmax(160,160));
  grid-column-gap:10px;
  grid-row-gap:20px;
}
 // index.js

import React, { PureComponent } from 'react';
import { Card, Tooltip, Icon, Row ,Col} from 'antd';
import styles from './index.less';
import PropTypes from 'prop-types';

class GroupCard extends PureComponent {
  static propTypes = {
    record: PropTypes.object.isRequired,
    onEditDivision: PropTypes.func.isRequired,
    onDeleteDivision: PropTypes.func.isRequired,
  };

  constructor(props) {
    super(props);
    this.state = {};
  }

  render() {
    const { record, onEditDivision, onDeleteDivision } = this.props;
    const { divisionName, userList } = record;
    return (
      <div className={styles.main}>
        <Card className={styles.card}
          title={`${divisionName} (共 ${userList.length} 人)`}
          bodyStyle={{ height: '100px', width: '300px' }}
          actions={[
            <Tooltip title='编辑' key="edit">
              <Icon type="edit" onClick={() => onEditDivision(record)} />
            </Tooltip>,
            <Tooltip title='删除' key="delete">
              <Icon type="delete" onClick={() => onDeleteDivision(record)} />
            </Tooltip>,
          ]}
        >
        </Card>
      </div>
    );
  }
}

export default GroupCard;
// index.less

@import '~antd/lib/style/themes/default.less';

.main{
  width: 100%;
  height: 100%;
  display: flex;
}

// 卡片
.card {
  box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.15);
  background-color: rgba(255, 255, 255, 1);
  border-radius: 3%;
  border: 0.5px solid rgba(226, 226, 226, 1);
  //width: 320px;
}

  • 34
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要实现一个flex卡片布局2x2,可以使用flex布局的容器属性和项目属性。首先,我们需要一个父级容器,将其设置为`display: flex;`来启用flex布局。然后,我们可以使用`flex-wrap: wrap;`来实现项目的换行。接下来,我们可以通过设置父容器的宽度和高度来控制卡片的尺寸。 对于每个卡片项目,我们可以使用`flex-basis`来设置卡片的初始宽度,然后使用`flex-grow`和`flex-shrink`来控制卡片的伸缩性。通过调整这些属性的值,我们可以实现卡片自适应和平均分配空间。 另外,我们还可以使用`justify-content`和`align-items`来调整卡片在容器中的水平和垂直对齐方式。例如,可以使用`justify-content: space-between;`来实现卡片的横向分布。 综上所述,要实现一个flex卡片布局2x2,可以将父容器设置为`display: flex;`,然后使用容器属性和项目属性来控制卡片的尺寸、伸缩性和对齐方式。具体的代码示例和效果可以参考中的图片素材。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [flex弹性布局的理解。](https://download.csdn.net/download/malingshu99/12524097)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【HTML/CSS】弹性盒子 flex布局制作一个动画卡片](https://blog.csdn.net/m0_49442965/article/details/127797747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值