Как сделать размеры flexbox форсированными для роста контейнера - PullRequest
0 голосов
/ 24 июня 2019

У меня есть flexbox, содержащий элементы, которые имеют фиксированную ширину flex-basis, и которые не позволяют увеличиваться или уменьшаться. Элементы в совокупности шире, чем ширина экрана. Они отображаются нормально, потому что они переполняются в overflow: visible пространстве своих контейнеров.

Но это плохо взаимодействует с элементом display: sticky; Я хочу, чтобы при прокрутке над флексбоксом висел липкий элемент.

Что я вижу, так это то, что липкий элемент зависает, пока вы не прокрутите одну ширину экрана, а затем исчезает.

Похоже, это связано с тем, что ширина контейнера с display: flex не увеличивается, чтобы вместить его дочерние элементы (и, соответственно, не изменяется и тело).

Как заставить контейнер установить ширину, равную совокупной ширине его дочерних элементов flex?

Если я запускаю этот javascript:

document.querySelector(".container").style.width = document.body.scrollWidth + 'px'

(или эквивалентно этому javascript):

document.body.style.width = document.body.scrollWidth + 'px'

все работает так, как мне хочется, но в идеале я бы хотел использовать решение на чистом CSS, а не запускать javascript для увеличения размеров до контейнеров.

Пример codepen: https://codepen.io/anon/pen/KjmQRz

HTML:

<!DOCTYPE html>
<html>
<body>
    <div class="container">
        <div class="stickybar">Sticky</div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
        <div class="column"></div>
    </div>
</body>
</html>

CSS:

.container {
  display: flex;
  height: 400px;
}

.stickybar {
  position: sticky;
  left: 0px;
  z-index: 10;
  margin-right: 5px;
  background-color: red;
}

.column {
  margin-right: 5px;
  flex: 0 0 150px;
  border: 1px solid black;
}

1 Ответ

1 голос
/ 24 июня 2019

Создайте контейнер inline-flex и используйте ширину вместо flex-base:

.container {
  display: inline-flex;
  height: 400px;
}

.stickybar {
  position: sticky;
  left: 0px;
  z-index: 10;
  margin-right: 5px;
  background-color: red;
}

.column {
  margin-right: 5px;
  width: 150px;
  border: 1px solid black;
}
<div class="container">
    <div class="stickybar">Sticky</div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
  </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...