Как убрать лишнее пространство с правой стороны этого bootstrap 4 модала? - PullRequest
2 голосов
/ 05 марта 2020

Вот скрипка: https://jsfiddle.net/apo5u0mt/

Вот код:

HTML

<div class="modal" id="galleryModal">
  <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
    <div class="modal-content">
      <div class="gallery">
        <div class="gallery-item">
          <img src="https://preview.ibb.co/kPE1D6/clouds.jpg">
        </div>
        <div class="gallery-item">
          <img src="https://preview.ibb.co/mwsA6R/img7.jpg">
        </div>
        <div class="gallery-item">
          <img src="https://preview.ibb.co/kZGsLm/img8.jpg">
        </div>
      </div>
    </div>
  </div>
</div>

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#galleryModal">
Modal
</button>

CSS

.gallery {
  overflow-y: auto !important;
}

.gallery-item {
  margin: 5px;
  float: left;
}

.gallery-item img {
  height: 150px;
  width: 200px;
  object-fit: cover;
}

.btn {
  margin: 5px;
}

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

1 Ответ

2 голосов
/ 05 марта 2020

Bootstrap делает это:

.modal-dialog {
  max-width: 500px;
}
  • Элемент .modal-dialog является блочным элементом и, таким образом, хочет иметь ширину 100% по умолчанию, но стиль Bootstrap ширина составляет 500 пикселей.
  • Вы явно устанавливаете изображения шириной 200 пикселей каждое, что (без учета полей на данный момент) составляет всего 400 пикселей.


Два возможных исправления:

1. Переопределите модальный стиль Bootstrap здесь, чтобы ограничить модальное значение более узкой шириной:

/*
  The value below is empirically tested,
  allows for your given margins & floating. I originally expected it to be
  420px = (200px width + 5px left margin + 5px right margin) * 2
  but 422px was necessary to avoid wrapping when tested in jsfiddle
*/

.modal-dialog {
  max-width: 422px;
}

https://jsfiddle.net/nftj9s7y/1/

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


Более гибкая решение будет:

2. Используйте flexbox, чтобы изображения расширялись, чтобы заполнить модальный

.gallery {
  display: flex;
  flex-wrap: wrap;
  padding: 5px;
}

/* now that the parent element is display: flex, we don't need floats anymore */
.gallery-item {
  padding: 5px;
  width: 50%;
}

.gallery-item img {
  height: 150px;
  object-fit: cover;
  width: 100%; /* allow image to fill width of containing element */
}

https://jsfiddle.net/vzs98n6b/2/


И в качестве заключительного замечания, .gallery { overflow-y: auto } не будет иметь никакого эффекта, если вы не укажете height или max-height для этого элемента.

...