Добавление пространства между элементами flexbox

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

    .grid {
      display: -webkit-flex;
      display: -ms-flexbox;
      display: flex;
      margin-bottom: 20px;
      justify-content: space-between;
    }
    
    /*Each item is one column*/
    
    .item {
      width: 50%;
    }
    
    .article-scroll-mobile {
      box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
      flex-wrap: nowrap;
      text-align: center;
      overflow-x: auto;
      -webkit-overflow-scrolling: touch;
      /*For iOS smooth scroll effect*/
    }
 <div class = "grid article-scroll-mobile">
      <div class = "item">
        <img src = "https://www.w3schools.com/howto/img_fjords.jpg">
      </div>
      <div class = "item">
        <img src = "https://www.w3schools.com/howto/img_fjords.jpg">
    
      </div>
      <div class = "item">
        <img src = "https://www.w3schools.com/howto/img_fjords.jpg">
    
      </div>
      <div class = "item">
        <img src = "https://www.w3schools.com/howto/img_fjords.jpg">
    
      </div>
      <div class = "item">
        <img src = "https://www.w3schools.com/howto/img_fjords.jpg">
    
      </div>
      <div class = "item">
        <img src = "https://www.w3schools.com/howto/img_fjords.jpg">
    
      </div>
    </div>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
11
0
57 860
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны учесть несколько вещей.

Прежде всего; с justify-content вы определяете, как обрабатывается оставшееся пространство. При использовании space-between ваши элементы будут выровнены так, чтобы пространство между ними было равным, при установке center оставшееся пространство будет вокруг всех элементов, при этом все элементы будут склеены.

Однако в вашем случае свободного места нет, потому что ваши элементы фактически растягивают div. Так что это тебе не поможет.

Следующий; вы установили ширину элемента на 50%. И это нормально, ваш item будет занимать 50% области просмотра. Это потому, что ваша сетка неявно будет составлять 100% области просмотра. Но поскольку ваше изображение выходит за пределы поля, вы можете установить поля, если хотите, и они будут размещать элементы дальше друг от друга, но вам нужны большие поля, чтобы их действительно видеть. Больше, чем переполнение вашего изображения.

Итак, чтобы исправить это, вы сделаете изображения адаптивными, сделав их шириной, равной ширине элемента;

.item img { display: block; height: auto; width: 100%; }

Но это создает другую проблему; flexbox пытается изменить размер своих гибких элементов, чтобы все это поместилось в гибкий контейнер. Итак, вы увидите, что он автоматически изменяет размер ваших элементов, чтобы они все поместились. Чтобы исправить это, вы должны явно указать ширину ваших элементов;

.item { flex: 0 0 50%; }

Это сокращение от;

.item { flex-grow: 0; flex-shrink: 0; flex-basis: 50%; }

Итак, в основном вы говорите; Сделайте мой предмет 50% его контейнера, и не используйте свой потрясающий алгоритм, чтобы попытаться сделать его больше или меньше.

Теперь у вас есть то, что вы хотите, и вы можете использовать margin-right: 20px, например, чтобы создать пространство в 20 пикселей между вашими элементами.

Полный фрагмент;

.grid { display: flex; width: 100%; }

.item { flex: 0 0 50%; margin-right: 20px; }
.item img { display: block; height: auto; width: 100%; }

.article-scroll-mobile {
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
  flex-wrap: nowrap;
  text-align: center;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  /*For iOS smooth scroll effect*/
}
<div class = "grid article-scroll-mobile">
  <div class = "item">
    <img src = "https://www.w3schools.com/howto/img_fjords.jpg">
  </div>
  <div class = "item">
    <img src = "https://www.w3schools.com/howto/img_fjords.jpg">
  </div>
  <div class = "item">
    <img src = "https://www.w3schools.com/howto/img_fjords.jpg">
  </div>
  <div class = "item">
    <img src = "https://www.w3schools.com/howto/img_fjords.jpg">
  </div>
  <div class = "item">
    <img src = "https://www.w3schools.com/howto/img_fjords.jpg">
  </div>
  <div class = "item">
    <img src = "https://www.w3schools.com/howto/img_fjords.jpg">
  </div>
</div>

Какое объяснение! Большое спасибо :)

user2896120 16.03.2018 23:07

Другие вопросы по теме