CSS - выравнивание div по горизонтали


85

У меня есть контейнер div с фиксированным widthи height, с overflow: hidden.

Мне нужен горизонтальный ряд блоков float: left в этом контейнере. Div, которые перемещаются влево, естественным образом нажимают на «строку» ниже после того, как прочитают правую границу своего родителя. Это произойдет, даже если heightродительский элемент не должен этого допускать. Вот как это выглядит:

! [Wrong] [1] - удалено изображение лабиринта изображения, которое было заменено рекламой

Как бы я хотел, чтобы это выглядело:

! [Right] [2] - удаленное изображение лачуги изображения, которое было заменено рекламой

Примечание: желаемый эффект может быть достигнут с помощью встроенных элементов & white-space: no-wrap(именно так я сделал это на изображении). Однако для меня это нехорошо (по причинам, слишком длинным, чтобы объяснять здесь), поскольку дочерние блоки div должны быть плавающими элементами уровня блока.


8
Ссылки на изображения не работают. Если у вас остались оригиналы, повторно загрузите их в stack.imgur. Благодаря!
Ilmari Karonen

Ответы:


100

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

#container {
  background-color: red;
  overflow: hidden;
  width: 200px;
}

#inner {
  overflow: hidden;
  width: 2000px;
}

.child {
  float: left;
  background-color: blue;
  width: 50px;
  height: 50px;
}
<div id="container">
  <div id="inner">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
  </div>
</div>


как я могу сделать внешний центр div? Я пробовал добавить align = "center" во внешний div, похоже, не работает.
hakunami

1
Это работает и для процентной ширины. В моем случае я использую контейнер div с width: 200%;каждым из дочерних элементов width: 50%;. Затем я могу использовать transform: translateX(n%);в контейнере для имитации эффекта карусели, если у меня есть родительский контейнер сoverflow: hidden;
evolross

31

style="overflow:hidden"для родителя divи style="float: left"для всех дочерних divsважно divsвыровнять по горизонтали для старых браузеров, таких как IE7 и ниже.

В современных браузерах вы можете использовать style="display: table-cell"для всех дочерних элементов, divsи он будет правильно отображаться по горизонтали.


6

Это похоже на то, что вы хотите:

#foo {
  background: red;
  max-height: 100px;
  overflow-y: hidden;
}

.bar {
  background: blue;
  width: 100px;
  height: 100px;
  float: left;
  margin: 1em;
}
<div id="foo">
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
</div>


5

вы можете использовать clipсвойство:

#container {
  position: absolute;
  clip: rect(0px,200px,100px,0px);
  overflow: hidden;
  background: red;
}

обратите внимание на position: absoluteи overflow: hiddenнеобходимо для того, чтобы приступить clipк работе.


4
что такое поддержка браузера клипом?
Alex

1
От w3schools.com/cssref/pr_pos_clip.asp : Свойство клипа поддерживается во всех основных браузерах. Примечание. Значение «наследовать» не поддерживается в IE7 и более ранних версиях. IE8 требует! DOCTYPE. IE9 поддерживает «наследование».
dsomnus

5

Теперь вы можете использовать css flexbox для выравнивания div по горизонтали и вертикали, если вам нужно. общая формула выглядит так

parent-div {
  display: flex;
  flex-wrap: wrap;
  /* for horizontal aligning of child divs */
  justify-content: center;
  /* for vertical aligning */
  align-items: center;
}

child-div {
  width: /* yoursize for each div */
  ;
}

элегантное решение.
zawhtut

4

Float: left, display: inline-block не сможет выровнять элементы по горизонтали, если они превышают ширину контейнера.

Важно отметить, что контейнер не должен оборачиваться, если элементы ДОЛЖНЫ отображаться горизонтально: white-space: nowrap



0

Вы можете сделать что-то вроде этого:

#container {
  background-color: red;
  width: 200px;
}

.child {
  background-color: blue;
  width: 150px;
  height: 50px;
}
<div id="container">
  <div id="inner">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
  </div>
</div>

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.