Как заставить 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;)


48

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

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

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


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(это некрасиво, но с этим сложно справиться ).


Отличный ответ. Я добавил похожий пример ниже, но удалил его после того, как увидел ваш. Если вам не нужно поддерживать 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

на детей


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/


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

10

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

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


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


2

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

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

display:inline-block;


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»? Потому что это не то, что ты сказал.
Квентин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.