Как заставить плавающие DIV внутри DIV фиксированной ширины продолжать горизонтально? - PullRequest
37 голосов
/ 19 июня 2009

У меня есть контейнер DIV с фиксированной высотой и шириной (275x1000px). В этом DIV я хочу разместить несколько плавающих DIV, каждый шириной 300 пикселей, и иметь горизонтальную (ось X) полосу прокрутки, чтобы позволить пользователю прокручивать влево и вправо, чтобы просмотреть все.

Пока это мой CSS:

div#container {
    height: 275px;
    width: 1000px;
    overflow-x: auto;
    overflow-y: hidden;
    max-height: 275px;
}

div#container div.block {
    float: left;
    margin: 3px 90px 0 3px;
}

Проблема в том, что плавающие DIV не будут продолжать ширину контейнера. После размещения трех плавающих DIV они продолжатся внизу. Если я переключу overflow-y на auto, появится вертикальная полоса прокрутки, и я смогу прокрутить вниз.

Как я могу изменить это, чтобы плавающие DIV продолжались, не переходя друг под друга?

Ответы [ 9 ]

40 голосов
/ 19 июня 2009
div#container {
    height: 275px;
    width: 1000px;
    overflow: auto;
    white-space: nowrap;
}

div#container span.block {
    width: 300px;
    display: inline-block;
}

Хитрость в том, что только элементы, которые ведут себя как встроенные по умолчанию, будут работать правильно, если в Internet Explorer установлено значение inline-block, поэтому внутренние контейнеры должны быть вместо .

8 голосов
/ 19 июня 2009

Вам понадобится дополнительный div с большой шириной, чтобы содержать блоки, тогда они будут расширяться шире, чем контейнерный div, и не будут опускаться до новой строки.

HTML:

<div id="container">
    <div id="width">
        <div class="block">
            <!-- contents of block -->
        </div>
        <div class="block">
            <!-- contents of block -->
        </div>
        <div class="block">
            <!-- contents of block -->
        </div>
        <!-- more blocks here -->
    </div>
</div>

CSS:

#container {
    height: 275px;
    width: 1000px;
    overflow-x: auto;
    overflow-y: hidden;
    max-height: 275px;
}
#container #width {
    width:2000px; /* make this the width you need for x number of blocks */
}
#container div.block {
    float: left;
    margin: 3px 90px 0 3px;
}
6 голосов
/ 16 января 2015

#row {
    white-space: nowrap; /* important */
    overflow: auto;
}

.items {
    display: inline-block;
}
<div id="row">
    <div class="items">
        <img src="//placehold.it/200/100" alt="item 1" />
    </div>
    <div class="items">
        <img src="//placehold.it/200/100" alt="item 2" />
    </div>
    <div class="items">
        <img src="//placehold.it/200/100" alt="item 3" />
    </div>
    <div class="items">
        <img src="//placehold.it/200/100" alt="item 4" />
    </div>
    <div class="items">
        <img src="//placehold.it/200/100" alt="item 5" />
    </div>
    <div class="items">
        <img src="//placehold.it/200/100" alt="item 6" />
    </div>
    <div class="items">
        <img src="//placehold.it/200/100" alt="item 7" />
    </div>
    <div class="items">
        <img src="//placehold.it/200/100" alt="item 8" />
    </div>
    <div class="items">
        <img src="//placehold.it/200/100" alt="item 9" />
    </div>
    <div class="items">
        <img src="//placehold.it/200/100" alt="item 10" />
    </div>
</div>

Хитрость здесь в том, что это свойство «white-space: nowrap» родительского элемента, которое просто сообщает всем дочерним элементам продолжать горизонтально, и свойство display: inline-block его дочерних элементов. Вам не нужно добавлять какие-либо другие свойства, чтобы сделать эту работу.

JS Fiddle: http://jsfiddle.net/2c4jfetf/

1 голос
/ 19 июня 2009

Оберните ваши плавающие div в другой div с большей шириной.

<div style="width:230px;overflow-x:auto;background-color:#ccc;">
    <div style="width:400px">
        <div style="height:100px;width:100px;float:left;border:1px solid #000;"></div>
        <div style="height:100px;width:100px;float:left;border:1px solid #000;"></div>
        <div style="height:100px;width:100px;float:left;border:1px solid #000;"></div>
    </div>
</div>
0 голосов
/ 01 августа 2013

My Ex:

ширина раздела: 850 пикселей вид сетки templatedcolumn ItemTemplate

<span class="buttonspanlt"></span><asp:Button ID="imgEditSave" runat="server" Text="Edit SubStatus" CssClass="buttoncenter" OnClick="imgEditSave_OnClick"/><span class="buttonspanrt"></span>
<span style="display:none;float:left;clear:left;" id="spangrdCancel" runat="server"><span class="buttonspanlt"></span><asp:Button ID="imgCancel" runat="server" Text="Cancel" class="buttoncenter"/><span class="buttonspanrt"></span></span>

end ItemTemplate конец шаблонной колонны конец сетки конец div

кнопка имеет средний левый (фактическая кнопка) правый промежуток, который не плавал, как был внешний div с фиксированной шириной.

Мне пришлось использовать дополнительный div с шириной 140px вне кнопки, внутри шаблона элемента, после чего он работал.

Надеюсь, это поможет !!!

Спасибо Хариш

0 голосов
/ 19 июня 2009

Звучит так, как будто вы делаете галерею с div'ами?

Для чего именно вы используете div?

Может быть проще использовать ul / li с пролетами внутри li, чтобы получить тот же эффект без всех головных болей плавающих div.

0 голосов
/ 19 июня 2009

Настольный раствор должен работать очень хорошо.

Если вы не хотите использовать таблицы, вы также можете поместить все div .block в другой div внутри #container и присвоить этому «in -ween-div» фиксированную - вычисляемую - ширину, используя javascript после загрузки страницы. .

Конечно, если вы уже знаете, сколько у вас блоков. / Если число является фиксированным, вы можете присвоить "in -ween-div" фиксированную ширину, используя css.

0 голосов
/ 19 июня 2009

Поместите в таблицу div, которые вы хотите прокрутить, примерно так:

<div style='width:1000;border:2 solid red;overflow-x:auto'>
   <table><tr>
      <td><div style='width:300;height:200;border:1 solid black'>Cell 1&nbsp;</div></td>
      <td><div style='width:300;height:200;border:1 solid black'>Cell 2&nbsp;</div></td>
      <td><div style='width:300;height:200;border:1 solid black'>Cell 3&nbsp;</div></td>
      <td><div style='width:300;height:200;border:1 solid black'>Cell 4&nbsp;</div></td>
      <td><div style='width:300;height:200;border:1 solid black'>Cell 5&nbsp;</div></td>
   </tr></table>
</div>

Edit: Я попробовал 3 из этих предложенных решений - все они отлично работают в Google Chrome - но первое (container1) не работает в IE (см. Рисунок) - поэтому решение SPAN получает мой голос :-):

<html>
<body>
<style>
div#container1 
   {
   height: 275px;
   width: 100%;
   overflow: auto;
   white-space: nowrap;
   border:2 solid red;
   }

div#container1 div.block 
   {
   width: 300px;
   height: 200px;
   display: inline-block;
   border: 1 solid black;
   }

div#container2 
   {
   height: 275px;
   width: 100%;
   overflow: auto;
   white-space: nowrap;
   border:2 solid red;
   }

div#container2 span.block 
   {
   width: 300px;
   height: 200px;
   display: inline-block;
   border: 1 solid black;
   }

div#container3 
   {
   height: 275px;
   width: 100%;
   overflow: auto;
   white-space: nowrap;
   border:2 solid red;
   }

div#container3 div.block 
   {
   width: 300px;
   height: 200px;
   display: inline-block;
   border: 1 solid black;
   }

</style>
<p>
<div id='container1'>
      <div class='block'>Cell 1&nbsp;</div>
      <div class='block'>Cell 2&nbsp;</div>
      <div class='block'>Cell 3&nbsp;</div>
      <div class='block'>Cell 4&nbsp;</div>
      <div class='block'>Cell 5&nbsp;</div>
</div>
<p>
<div id='container2'>
      <span class='block'>Cell 1&nbsp;</span>
      <span class='block'>Cell 2&nbsp;</span>
      <span class='block'>Cell 3&nbsp;</span>
      <span class='block'>Cell 4&nbsp;</span>
      <span class='block'>Cell 5&nbsp;</span>
</div>
<p>
<div id='container3'>
   <table><tr>
      <td><div class='block'>Cell 1&nbsp;</div></td>
      <td><div class='block'>Cell 2&nbsp;</div></td>
      <td><div class='block'>Cell 3&nbsp;</div></td>
      <td><div class='block'>Cell 4&nbsp;</div></td>
      <td><div class='block'>Cell 5&nbsp;</div></td>
   </tr></table>
</div>
</body>
</html>

Редактировать 2:

Я пробежал эту тестовую страницу через browsershots.org, чтобы увидеть, как разные браузеры справляются с ней. Вывод: совместимость браузера отстой. : -)

http://browsershots.org/http://dot-dash-dot.com/files/test_div2.htm

Табличное решение работало чаще, но опция span (которая чище) работала только в браузерах, о которых я никогда не слышал. : -)

0 голосов
/ 19 июня 2009

Использование:

    div#container {
        overflow: auto;
    }

Или добавьте очищающий div под тремя div со стилем:

    {
        clear: both
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...