Увеличить ширину абсолютно позиционируемого элемента, чтобы содержать горизонтально расположенные дочерние элементы независимо от ширины родительского элемента

#css #flexbox

#css #flexbox

Вопрос:

Я создаю слайдер изображения. У меня есть родительский <div> элемент, который будет маскировать более широкий дочерний элемент:

 <div class="viewport">
    <div class="strip">
       <div class="item">
         <img src="1.png">
        </div>
        <div class="item">
          <img src="2.png" >
        </div>
        <div class="item">
            <img src="3.png">
        </div>
     </div>
</div>
  

Мой родительский элемент имеет фиксированную ширину и будет показывать полосы прокрутки при переполнении содержимого:

 .viewport{
    width:400px;
    height: 100px;
    overflow:scroll;
    margin-top:100px;
}
  

Его дочерний элемент, .strip , должен расширяться, чтобы содержать все его дочерние элементы в виде горизонтальной строки. В прошлом, чтобы гарантировать .strip , что он может содержать дочерние элементы без очистки, я бы либо:

  • суммируйте ширину заранее определенного количества дочерних элементов и жестко запрограммируйте его
  • сумма ширин неизвестного числа дочерних элементов с помощью javascript

Поскольку я ориентируюсь на современные браузеры, я подумал, что, возможно, проблему можно было бы решить с помощью flexbox :

 .strip{
    display: flex;
    height:100px;
}

.item{
    width:150px;
    flex-basis:150px;
    margin-right:10px;
}
  

Это становится мучительно близко, но все мои item s укладываются друг на друга:

http://jsfiddle.net/rytPP/14/

Есть ли какой-то способ распределить их по пространству, или нет способа обойти .viewport ограничение ширины?

Ответ №1:

Как насчет простого использования display:inline-block; для .item и white-space:nowrap; для .strip ?

 .strip{
    height:100px;
    white-space:nowrap;
    font-size:0;
}

.item{
    width:150px;
    display:inline-block;
    margin-right:10px;
}
  

Согласно этой скрипке

Таким образом, вы не ограничены браузерами, поддерживающими flexbox.

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

1. вот как я бы это сделал .. просто примечание: если вам нужна общая длина для вычислений, а что нет.. give .strip также ‘display:inline-block’ .. попробуйте это в своей скрипке и увидите, что без этого вы получаете только ширину переполнения, а не всю прокрутку;]