Как заставить DIV не оборачиваться?

181

Мне нужно создать контейнер DIV стиль, который содержит несколько других DIV. Спрашивается, что эти DIV не будут переноситься, если размер окна браузера будет изменен, чтобы быть узким.

Я попытался заставить это работать как ниже.

<style>
   .container
   {
      min-width: 3000px;
      overflow: hidden;
   }
   .slide
   {
      float: left;
   }
</style>
<div class="container">
   <div class="slide">something</div>
   <div class="slide">something</div>
   <div class="slide">something</div>
   <div class="slide">something</div>
</div>

Это работает в большинстве случаев. Однако в некоторых особых случаях рендеринг некорректен. Я обнаружил, что контейнер DIV изменился на ширину 3000 пикселей в RTL IE7; и это оказывается грязным.

Есть ли другой способ сделать контейнер DIV, чтобы не обернуть?

Морган Ченг
источник
я добавил этот тег: пробел: nowrap; и этот тег: переполнение текста: многоточие; к моему коду
сабля tabatabaee yazdi

Ответы:

247

Попробуйте использовать white-space: nowrap;в стиле контейнера (вместо overflow: hidden;)

notkwite
источник
48

Если я не хочу определять минимальную ширину, потому что я не знаю количество элементов, единственное, что сработало для меня, было:

display: inline-block;
white-space: nowrap;

Но только в Chrome и Safari: /

fguillen
источник
34

Следующее работает для меня без плавающих (я немного изменил ваш пример для визуального эффекта):

.container
{
    white-space: nowrap; /*Prevents Wrapping*/
    
    width: 300px;
    height: 120px;
    overflow-x: scroll;
    overflow-y: hidden;
}
.slide
{
    display: inline-block; /*Display inline and maintain block characteristics.*/
    vertical-align: top; /*Makes sure all the divs are correctly aligned.*/
    white-space: normal; /*Prevents child elements from inheriting nowrap.*/
    
    width: 100px;
    height: 100px;
    background-color: red;
    margin: 5px;
}
<div class="container">
   <div class="slide">something something something</div>
   <div class="slide">something something something</div>
   <div class="slide">something something something</div>
   <div class="slide">something something something</div>
</div>

Дивы могут быть разделены пробелами. Если вы не хотите этого, используйте margin-right: -4px;вместо margin: 5px;for .slide(это некрасиво, но с этим сложно справиться ).

JSideris
источник
Отличный ответ. Я добавил похожий пример ниже, но удалил его после того, как увидел ваш. Если вам не нужно поддерживать IE9, вы также можете использовать flexbox: jsfiddle.net/7gsrb38L/1
ValentinVoilean
Вы можете использовать HTML-комментарии между элементами div, </div><!-- --><div class="slide">если вы хотите удалить лишние пробелы между ними. Стиль встроенного блока приводит к тому, что пробел в вашем коде выбирается как пробел в документе HTML.
Джо.
@Джо. чтобы уменьшить размер страницы, вы можете использовать что-то, что не отображается, например, при использовании php: </div><?php ?><div class="slide">renders, как </div><div class="slide">в исходном коде.
Fleuv
Кроме того, если вы генерируете HTML с помощью JavaScript, вы можете избежать пробелов. Я использую DOThtml . Приведенный выше HTML- dot("body").div(dot.iterate(4, function(i){return dot.div("something something something something").class("slide");})).class("container")
код
30

Комбо вам нужно

white-space: nowrap

на родителя и

display: inline-block; // or inline

на детей

Funkodebat
источник
25

Это сработало для меня:

.container {
  display: inline-flex;
}

.slide {
  float: left;
}
<div class="container">
  <div class="slide">something1</div>
  <div class="slide">something2</div>
  <div class="slide">something3</div>
  <div class="slide">something4</div>
</div>

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

Turako
источник
Это с переполнением: скрытое сработало для меня. Спасибо.
Алфи
10

overflow: hiddenдолжен дать вам правильное поведение. Я предполагаю, что RTLэто испорчено, потому что у вас есть float: leftинкапсулированные divs.

Помимо этой ошибки, вы получили правильное поведение.

Ювал Адам
источник
1
Я проверю, связано ли это с "float: left" на инкапсулированных элементах div. Но один и тот же код прекрасно работает в Firefox и Safari, но не в IE. Итак, я действительно сомневаюсь, что это так.
Морган Ченг
2

Попробуйте использовать width: 3000px;для случая IE.

Андрес Г.Р.
источник
2

Ничто из вышеперечисленного не помогло мне.

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

display:inline-block;
J-DAWG
источник
1

ты можешь использовать

display: table;

для вашего контейнера и поэтому избегайте overflow: hidden;. Он должен делать эту работу, если вы использовали его только для деформации.

Пака
источник
0
<div style="height:200px;width:200px;border:; white-space: nowrap;overflow-x: scroll;overflow-y: hidden;">
   <p>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.</p>
</div>
Анил Хатур
источник
0

Используйте display:flexиwhite-space:nowrap

p{
  display:flex;
  white-space:nowrap;
  overflow:auto;
}
<h2>Sample Text.</h2>

<p>Some example text that will not wrap..lla et dictum interdum, nisi lorem egestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. Fusce luctus vestibulum augue ut aliquet. Mauris ante ligula, facilisis sed ornare eu, lobortis in odio. Praesent convallis urna a lacus interdum ut hendrerit risus congue. Nunc sagittis dictum nisi, sed ullamcorper ipsum d</p>

<h3>Then some other text</h3>

Кишор
источник
-1

<span>Тег используется для групповых инлайн-элементов в документе.
(источник)

Майк
источник
Хотя это и правда, похоже, что этот вопрос вообще не решается.
Квентин
Это прекрасно решает вопрос, потому что span и div идентичны во всех случаях, за исключением того, что div обернут, а span - нет. И вы можете реализовать любые обходные пути, которые вы хотите.
Майк
2
Означает ли это, что вы предлагаете «Использовать span вместо div»? Потому что это не то, что ты сказал.
Квентин