CSS вертикально выровнять div при сохранении соотношения сторон
Я использовал JsFiddle на http://jsfiddle.net/5tzk3/10/. Я изменил его, чтобы отображать div как диалоговое окно квадратной формы (как по горизонтали, так и по центру). Результат на http://jsfiddle.net/5tzk3/548/.
Как видите, центрировать по горизонтали было легко, но я не мог отцентрировать его по вертикали. Кто-нибудь, кто знает, как сделать это с чистым CSS?
Отредактированный код ниже:
<div class="blind">
<div class="wrapper">
<div class="main">
I'm your div with an aspect-ratio of 1:1!
</div>
</div>
</div>
html, body, .blind {
height: 100%;
width: 100%;
}
.blind {
left: 0;
position: fixed;
text-align: center;
top: 0;
}
.wrapper {
display: inline-block;
margin: auto;
position: relative;
width: 50%;
}
.wrapper:after {
content: '';
display: block;
padding-top: 100%;
}
.main {
background-color: rgb(0, 162, 232);
bottom: 0;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0;
}
3 ответа
Использование display: table
для родительского div, и display:table-cell; vertical-align: middle
для содержимого div, который вы хотите вертикально центрировать.
Наиболее распространенный способ сделать это, если у вас есть элемент с известными размерами, это использовать позиционирование, чтобы сначала расположить его top: 50%
(который размещает верхний край элемента на 50% пути вниз), а затем использует отрицательный top-margin
половины высоты элемента (потянув его обратно на половину его высоты).
Чтобы дать вам пример, чтобы абсолютно позиционировать 200x200
мертвая точка элемента на странице, которую вы будете использовать:
.element{
display: block;
width: 200px;
height: 200px;
position: absolute;
top: 50%;
margin-top: -100px
}
Кроме того, вы можете использовать комбинацию display: table
а потом display: table-cell
на родителей, чтобы открыть возможность использовать vertical-align
хотя это немного неприятно, когда речь идет о размещении элементов вокруг него.
Вы можете отбросить абсолютное позиционирование и использовать либо display:table, либо inline-block с псевдоэлементами.
вот смешанный из 2 методов
1) html / body в виде таблицы на одну ячейку2) внутреннее содержимое с сохраненным соотношением и содержимым в виде встроенного блока, установленного посередине.
.ratio1-1 {
width:25%;
vertical-align:middle;
margin:auto;
background:turquoise;
}
.ratio1-1:before {
content:'';
padding:50% 0;
width:0;
display:inline-block;
vertical-align:middle;
}
.ib {
display:inline-block;
vertical-align:middle;
}
/* center body content as a table cell */
html {
height:100%;
width:100%;
display:table;
}
body {
display:table-cell;
vertical-align:middle;
text-align:center;
}
<div class="ratio1-1">
<div class="ib">content in middle</div>
</div>