Как установить карточки одинаковой высоты и ширины с изображениями разного размера?

#reactjs #semantic-ui #semantic-ui-react

#reactjs #семантический пользовательский интерфейс #семантический-пользовательский интерфейс-реагировать

Вопрос:

введите описание изображения здесь

Делаю несколько макетов в качестве практики для изучения Semantic-ui и создаю искусственный магазин электронной коммерции. Я использую компоненты карты для создания элементов магазина. Я бы хотел, чтобы все карточки и изображения в карточках имели одинаковую высоту и ширину по умолчанию и не определялись самым большим изображением.

Я пытался возиться со стилями и реквизитом «размер» с компонентом изображения, который принимает Card, и создал свой собственный компонент StoreItemImage, который использует «завернутый» реквизит в image для переноса изображения в div, и поиграл с css в этом тоже, но, похоже, я не совсем понимаю это. Я знаю, что это, вероятно, довольно просто, но по какой-то причине мой мозг просто не видит этого.

 <Grid.Row
      style={{
        backgroundColor: "salmon"
      }}
    >
      <Grid.Row>
        <Grid stretched padded columns="3">
          <Grid.Row align="center">
            <Grid.Column>
              <Card>
                <StoreItemImage img="https://images-na.ssl-images-amazon.com/images/I/61C4v+k1p7L._UX679_.jpg" />
                <Card.Content>
                  <Card.Header>Hat</Card.Header>
                  <Card.Meta>$15</Card.Meta>
                </Card.Content>
              </Card>
            </Grid.Column>

            <Grid.Column>
              <Card>
                <StoreItemImage img="http://images.clipartpanda.com/aviator-sunglasses-png-RB3025-16.png" />
                <Card.Content>
                  <Card.Header>Sunglasses</Card.Header>
                  <Card.Meta>$35</Card.Meta>
                </Card.Content>
              </Card>
            </Grid.Column>

            <Grid.Column>
              <Card>
                <StoreItemImage img="http://pngimg.com/uploads/watches/watches_PNG9877.png" />
                <Card.Content>
                  <Card.Header>Watch</Card.Header>
                  <Card.Meta>$40</Card.Meta>
                </Card.Content>
              </Card>
            </Grid.Column>
          </Grid.Row>
        </Grid>
      </Grid.Row>

      <Grid.Row>
        <Grid padded columns="3">
          <Grid.Row>
            <Grid.Column>
              <Card>
                <StoreItemImage img="https://cdn.pixabay.com/photo/2017/01/13/04/56/blank-1976334_960_720.png" />
                <Card.Content>
                  <Card.Header>Shirt</Card.Header>
                  <Card.Meta>$20</Card.Meta>
                </Card.Content>
              </Card>
            </Grid.Column>

            <Grid.Column>
              <Card>
                <StoreItemImage img="https://cdn.pixabay.com/photo/2017/01/13/04/56/blank-1976334_960_720.png" />
                <Card.Content>
                  <Card.Header>Shirt</Card.Header>
                  <Card.Meta>$20</Card.Meta>
                </Card.Content>
              </Card>
            </Grid.Column>

            <Grid.Column>
              <Card>
                <StoreItemImage img="https://cdn.pixabay.com/photo/2017/01/13/04/56/blank-1976334_960_720.png" />
                <Card.Content>
                  <Card.Header>Shirt</Card.Header>
                  <Card.Meta>$20</Card.Meta>
                </Card.Content>
              </Card>
            </Grid.Column>
          </Grid.Row>
        </Grid>
      </Grid.Row>

      <Grid.Row>
        <Grid padded columns="3">
          <Grid.Row>
            <Grid.Column>
              <Card>
                <StoreItemImage img="http://images.skipantsi.com/l-m/water-repellent-windproof-softshell-fleece-MRxTtX1npHW4Zg.jpg" />
                <Card.Content>
                  <Card.Header>Pants</Card.Header>
                  <Card.Meta>$20</Card.Meta>
                </Card.Content>
              </Card>
            </Grid.Column>

            <Grid.Column>
              <Card>
                <StoreItemImage img="http://images.skipantsi.com/l-m/water-repellent-windproof-softshell-fleece-MRxTtX1npHW4Zg.jpg" />
                <Card.Content>
                  <Card.Header>Pants</Card.Header>
                  <Card.Meta>Pants</Card.Meta>
                </Card.Content>
              </Card>
            </Grid.Column>

            <Grid.Column>
              <Card>
                <StoreItemImage img="http://images.skipantsi.com/l-m/water-repellent-windproof-softshell-fleece-MRxTtX1npHW4Zg.jpg" />
                <Card.Content>
                  <Card.Header>Pants</Card.Header>
                  <Card.Meta>$20</Card.Meta>
                </Card.Content>
              </Card>
            </Grid.Column>
          </Grid.Row>
        </Grid>
      </Grid.Row>
    </Grid.Row>

 

Я могу либо сделать Карты одинаковой высоты, но изображения получаются шаткими. Я также хочу, чтобы все карты были одинаковой высоты и не определялись самым большим изображением.

Ответ №1:

Не используйте <Image /> этот семантический пользовательский интерфейс, а <img src={image} height={300}/> вместо этого используйте JSX, что будет исправлением.

Ответ №2:

Примените фиксированную высоту к контейнеру изображения, а затем установите background-size: contain стиль, чтобы гарантировать, что изображение сохранит высоту контейнера div, а также сохранит соотношение сторон. Еще один вариант — обрезать изображения, чтобы они соответствовали содержимому div с фиксированными размерами.

Комментарии:

1. Я попробовал ваше предложение, но, похоже, оно не работает. изображение остается того же размера, а карта по-прежнему принимает размер самого большого изображения. Я также пытался установить высоту и ширину карты вручную, но это также не повлияло на ее размер. не могли бы вы подробнее рассказать об обрезке изображений?