Проблема в том, что float автоматически оборачивает элементы, как только заканчивается конец их родительского элемента. С другой стороны, ваш div#columns
увеличится до максимальной ширины div#container
(то есть общей ширины экрана).
Чтобы решить эту проблему, вы должны назначить div#columns
ширину. Ниже приведен небольшой пример того, как сделать это динамически, вычисляя общую ширину div.colum
, которую он содержит.
var sum = 0;
$(".column").each(function(){sum += $(this).width()});
$("#columns").css('width', sum);
#container {
overflow-x: scroll;
position: relative;
white-space: nowrap;
width: 100%;
}
.column {
float: left;
width: 300px;
}
#preloader {
display: none;
height: 100%;
width: 100%
}
.clr {
clear: both;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<div id="container">
<div id="preloader"></div>
<div id="columns">
<div class="column">1</div>
<div class="column">2</div>
<div class="column">3</div>
<div class="column">4</div>
<div class="column">5</div>
<div class="column">6</div>
<div class="column">7</div>
<div class="column">8</div>
<div class="column">9</div>
<div class="clr"></div>
</div>
</div>
Это решение основано на этой публикации SO и использует jQuery для вычисления общей ширины элементов, но Вы могли бы сделать это также с простым javascript.