Сделать гибкий элемент той же ширины, что и родитель

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

.slider-container {
  width: inherit;
  height: 40em;
  overflow: hidden;
  margin-bottom: 1000px;
}

.slider {
  display: flex;
  flex-direction: row;
  overflow-x: scroll;
  height: inherit;
}

.slide {
  height: inherit;
}

.x {
  background-color: green;
}

.y {
  background-color: red;
}

.z {
  background-color: blue;
}
<div class = "slider-container">
  <div class = "slider">
    <div class = "x">XXXXX</div>
    <div class = "y">YYYYY</div>
    <div class = "z">ZZZZZ</div>
  </div>
</div>

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

Я попытался установить ширину на 100%, но это не работает.

Сделать гибкий элемент той же ширины, что и родитель

Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
4
0
4 453
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете установить flex: 0 0 100% (не увеличивать, не сжимать, базовая ширина составляет 100% от родительской) для div:

.slider-container {
  width: inherit;
  height: 40em;
  overflow: hidden;
  margin-bottom: 1000px;
}

.slider {
  display: flex;
  height: inherit;
  transform: translateX(-100px);
}

.item {
  flex: 0 0 100%;
}

.x {
  background-color: green;
}

.y {
  background-color: red;
}

.z {
  background-color: blue;
}
<div class = "slider-container">
  <div class = "slider">
    <div class = "item x">XXXXX</div>
    <div class = "item y">YYYYY</div>
    <div class = "item z">ZZZZZ</div>
  </div>
</div>

Привет, когда я делаю .slider с translateX (50px), почему весь гибкий блок сжимается, а не дает эффект прокрутки?

Muljayan 22.06.2019 08:54

Эффект прокрутки работает нормально, если убрать flex: 0 0 100%, но в такой ситуации он снова становится маленьким.

Muljayan 22.06.2019 08:55

Используйте transform: translateX(-100px); и удалите `overflow-x: scroll; `. Я обновил пример.

Ori Drori 22.06.2019 08:58

Большое спасибо, это именно то, что я искал. Если бы вы могли, можете ли вы объяснить, почему весь div .slider смещается вправо, когда присутствует overflow-x: scroll? и работает так, как я, за исключением случаев, когда он удален.

Muljayan 22.06.2019 09:06

Извините, я не могу :). Некоторая идиосинкразия во взаимодействии между ними.

Ori Drori 22.06.2019 09:15

@Muljayan это из-за поля по умолчанию в теле (8 пикселей). При добавлении overflow:scroll вы видите небольшую часть второго div справа в 8px от поля.

Temani Afif 22.06.2019 09:52

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