Вирівнювання поплавка: лівий div до центру?


96

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

Найближче, до чого я хотів, - це розміщення їх у divs, які плавають: left. Проблема в тому, що я хочу, щоб контейнери вирівнювались по центру, не вліво. Як я можу цього досягти.

Відповіді:


216

використовувати display:inline-block;замість float

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


3
Про всяк випадок, якщо хтось бореться з пробілами, що з’являються між елементами, видаліть пробіли у коді, визначивши такі елементи, як „<img> </img> <img> </img>” або “<img> < / img> <! - Коментар -> <img> </img> '.
Маартен

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

@Baumr Замість цього використовуйте flexbox. Є приклад нижче .
Ян Дерк,

3
вам може знадобитися додати vertical-align:middleпід час використання display:inline-block.
ібсенв

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 стабільніший, ніж плаваючий лівий.


Це працює для горизонтального центрування. Як щодо центрування також вертикально?
Куллуб,

Для центрування по вертикалі надайте контейнеру висоту (наприклад, висота: 500 пікселів;) та додайте елементи вирівнювання: 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>

9

Просто оберніть плаваючі елементи в <div>і надайте йому такий CSS:

.wrapper {

display: table;
margin: auto;

}

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.