如何让我的 React Bootstrap 卡水平排列并等距排列(如果可能,也可以响应)

fro*_*ops 6 twitter-bootstrap reactjs react-bootstrap reactstrap

我正在使用 Reactstrap 并动态显示我的卡片,无论我尝试什么,它们似乎都想垂直堆叠。这是呈现它们的组件:

import React, { Component } from 'react';
import { Link } from 'react-router-dom';
import { connect } from 'react-redux';
import { CardDeck } from 'reactstrap';
import { fetchMerch } from '../actions/fetchMerchAction';
import { fetchUniqueMerch } from '../actions/fetchUniqueMerchAction';
import ItemCard from './ItemCard';
import shortid from 'shortid';

class ShopHome extends Component {

  componentDidMount() {
    this.props.onInitMerch();
  }

  showItemDetailHandler = (id) => {
    // console.log("*",id);
    this.props.onInitUniqueMerch(id);
    this.props.history.push(`detail/${this.props.id}`)
  }

  render() {

    let cards;
    if ( this.props.cards ) {
      cards = Object.values(this.props.cards).map( card => (
        <Link to={'/detail/' + card.id } key={`div-${shortid.generate()}`}>

              <ItemCard 
                key={card.id} 
                id={card.id} 
                title={card.title}
                price={card.price}
                image={card.img} 
                description={card.description}
                clicked={() => this.showItemDetailHandler(card.id)}
              />
        </Link>
        ) 
      )
    };
    return ( 
        <CardDeck>
          {cards}
        </CardDeck>     
    );
  }
}

const mapStateToProps = state => {
  // console.log("map props to state")
  // console.log("----->",state.data.cardData)
  return {
    cards: state.data.cardData,
    id: state.data.cardData
  };
}

const mapDispatchToProps = dispatch => {
  return {
    onInitMerch: () => dispatch(fetchMerch()),
    onInitUniqueMerch: (id) => dispatch(fetchUniqueMerch(id))
  };
}

export default connect(mapStateToProps, mapDispatchToProps)(ShopHome);
Run Code Online (Sandbox Code Playgroud)

这是卡片组件:

import React, { Component } from 'react';
import { withRouter } from 'react-router';
import { Card, CardImg, CardText, CardBody,
  CardTitle, CardSubtitle } from 'reactstrap';
import './ItemCard.css';

class ItemCard extends Component {

  render() {

    return (
    <div>
      <Card className="card-style" onClick={this.props.clicked}>
        <CardImg top width="100%" src={this.props.image} alt="Card image cap" />
        <CardBody>
          <CardTitle >{this.props.title}</CardTitle>
          <CardSubtitle>${this.props.price}</CardSubtitle>
          <CardText>{this.props.description}</CardText>
        </CardBody>
      </Card>
    </div>
    );
  }
}

export default withRouter(ItemCard);
Run Code Online (Sandbox Code Playgroud)

这是 ItemCard.css:

.card-style {
  max-width: 30%;
}
Run Code Online (Sandbox Code Playgroud)

如果我给卡片一个固定大小的内联样式: style={{width: 20 + 'rem'}} 卡片水平排列,但我不能将它们放在页面的中心。他们稍微向左排列。我只想要一个三张卡片排居中且间隔均匀。

shk*_*nly 11

您可以style={{display: 'flex', flexDirection: 'row'}}在 CardDeck 上使用,然后再放在style={{flex: 1}}卡上。

他们应该填满剩余的空间。一件事是确保提供您希望 CardDeck 的大小。

关于 flexbox 的更多信息在这里

  • 谢谢回复。我向 CardDeck 添加了 100% 的宽度并添加了您发布的样式,但这似乎返回了相同的结果。 (2认同)
  • 将 `justifyContent: center` 添加到 CardDeck (2认同)
  • 终于得到了。由于某种原因,我不得不在卡片宽度上使用 em 而不是 % 。然后我做了你所说的@shkfnly。谢谢你的帮助。 (2认同)