Выравнивание поплавка: левый div по центру?


97

Я хочу, чтобы группа изображений отображалась горизонтально по странице. Под каждым изображением есть несколько ссылок, поэтому мне нужно поместить контейнер вокруг каждого изображения / группы ссылок.

Самое близкое, что я получил к тому, что я хочу, - это поместить их в div, которые float: left. Проблема в том, что я хочу, чтобы контейнеры выравнивались по центру, а не слева. Как я могу этого добиться.

Ответы:


218

использовать display:inline-block;вместо float

вы не можете центрировать поплавки, но встроенные блоки центрируются, как если бы они были текстом, поэтому во внешнем общем контейнере вашей «строки» вы должны установить text-align: center;тогда для каждого контейнера изображения / заголовка (это те, которые будут inline-block;) вы можете повторно -выровняйте текст по левому краю, если вам нужно


3
На всякий случай, если кто-то борется с пробелами, которые появляются между элементами, удалите пробелы в своем коде, определив такие элементы, как '<img> </img> <img> </img>' или '<img> < / img> <! - Комментарий -> <img> </img> '.
— Maarten

1
Или установите родительский элемент font-size:0и восстановите его на дочернем. Или используйте letter-spacing:-.31emдля родителя и letter-spacing:0для ребенка.
— Майк Кузер

@Baumr Вместо этого используйте flexbox. Ниже приведен пример .
— Ян Дерк,

3
вам может потребоваться добавить vertical-align:middleпри использовании display:inline-block.
— ibsenv

47

CSS Flexbox в наши дни хорошо поддерживается . Перейдите сюда, чтобы получить хорошее руководство по flexbox.

Это отлично работает во всех новых браузерах:

#container {
  display:         flex;
  flex-wrap:       wrap;
  justify-content: center;
}

.block {
  width:              150px;
  height:             150px;
  background-color:   #cccccc;
  margin:             10px;        
}
<div id="container">
  <div class="block">1</div>    
  <div class="block">2</div>    
  <div class="block">3</div>    
  <div class="block">4</div>    
  <div class="block">5</div>        
</div>

Некоторые могут спросить, почему бы не использовать display: inline-block? Для простых вещей это нормально, но если у вас есть сложный код внутри блоков, макет может больше не центрироваться правильно. Flexbox более стабилен, чем float left.


Это работает для центрирования по горизонтали. Как насчет центрирования по вертикали?
— Cullub

Чтобы центрировать по вертикали, задайте высоту контейнера (например, height: 500px;) и добавьте align-items: center;
— Ян Дерк,

9

попробуйте это так:

  <div id="divContainer">
    <div class="divImageHolder">
    IMG HERE
    </div>
    <div class="divImageHolder">
    IMG HERE
    </div>
    <div class="divImageHolder">
    IMG HERE
    </div>
    <br class="clear" />
    </div>

    <style type="text/css">
    #divContainer { margin: 0 auto; width: 800px; }
    .divImageHolder { float:left; }
    .clear { clear:both; }
    </style>


1

Возможно, это то, что вы ищете - https://www.w3schools.com/css/css3_flexbox.asp

CSS:

#container {
  display:                 flex;
  flex-wrap:               wrap;
  justify-content:         center;
}

.block {
  width:              150px;
  height:             150px;
  margin:             10px;        
}

HTML:

<div id="container">
  <div class="block">1</div>    
  <div class="block">2</div>    
  <div class="block">3</div>          
</div>

0
.contentWrapper {
    float: left;
    clear: both;
    margin-left: 10%;
    margin-right: 10%;
}

.repeater {
    height: 9em;
    width: 9em;
    float: left;
    margin: 0.2em;
    position: relative;
    text-align: center;
    cursor: pointer;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.