Подтвердить что ты не робот

Значок центра в div - по горизонтали и по вертикали

У меня возникают проблемы с центрированием значков (как по вертикали, так и по горизонтали) в родительском div. У меня много родительских divs на моей странице разных размеров, поэтому я хочу иметь возможность пропорционально размещать значки в центре каждого родительского div. Здесь JSFiddle проблемы:

http://jsfiddle.net/kVHbV/

HTML

<div class="img_container">
  <i class="icon-play-circle"></i>
</div>
<br>
<div class="img_container2">
  <i class="icon-play-circle"></i>
</div>

CSS

.img_container{
    width:100px;
    height:100px;
    position:relative;
    background:red;
}

.img_container2{
    width:100px;
    height:50px;
    position:relative;
    background:blue;
}

.icon-play-circle{
    position:absolute;
    top:45%;
    left:45%;
    color: white;
}
4b9b3361

Ответ 1

Поскольку они уже являются inline-block дочерними элементами, вы можете установить text-align:center в родительском, не устанавливая width или margin:0px auto для дочернего элемента. Это означает, что он будет работать для динамически созданного контента с изменяющимся widths.

.img_container, .img_container2 {
    text-align: center;
}

Это будет центрировать ребенка в обоих контейнерах div.

UPDATE:

Для вертикального центрирования вы можете использовать функцию calc(), предполагая, что высота значка известна.

.img_container > i, .img_container2 > i {
    position:relative;
    top: calc(50% - 10px); /* 50% - 3/4 of icon height */
}

jsFiddle demo - он работает.

Для чего это стоит - вы также можете использовать vertical-align:middle, предполагая, что display:table-cell установлен на родительском.

Ответ 2

Здесь вы можете центрировать содержимое как по вертикали, так и по горизонтали в любой ситуации, что полезно, когда вы не знаете ширины или высоты или обоих:

CSS

#container {
    display: table;
    width: 300px; /* not required, just for example */
    height: 400px; /* not required, just for example */
}

#update {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}

HTML

<div id="container">
    <a id="update" href="#">
        <i class="icon-refresh"></i>
    </a>
</div>

JSFiddle

Обратите внимание, что значения ширины и высоты предназначены только для демонстрации, вы можете изменить их на все, что хотите (или удалить их полностью), и оно все равно будет работать, потому что вертикальное центрирование здесь является результатом того, как table-cell отображение свойств.

edit: связано с неправильным JSFiddle!

Ответ 3

Горизонтальное центрирование выполняется так же легко, как:

text-align: center

Вертикальное центрирование, когда контейнер является известной высотой:

height: 100px;
line-height: 100px;
vertical-align: middle

Вертикальное центрирование, когда контейнер не является известной высотой И вы можете установить изображение в фоновом режиме:

background: url(someimage) no-repeat center center;