Чуйне рішення
Ось хороше рішення для чуйного дизайну або невідомих розмірів взагалі, якщо вам не потрібно підтримувати IE8 і нижче.
.centered-axis-x {
position: absolute;
left: 50%;
transform: translate(-50%, 0);
}
.outer {
position: relative; /* or absolute */
/* unnecessary styling properties */
margin: 5%;
width: 80%;
height: 500px;
border: 1px solid red;
}
.inner {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
/* unnecessary styling properties */
max-width: 50%;
text-align: center;
border: 1px solid blue;
}
<div class="outer">
<div class="inner">I'm always centered<br/>doesn't matter how much text, height or width i have.<br/>The dimensions or my parent are irrelevant as well</div>
</div>
Ось JS Fiddle
Підказка полягає у тому, що left: 50%
стосується батьківського, тоді як translate
перетворення відносно ширини / висоти елементів.
Таким чином ви маєте ідеально центрований елемент, з гнучким шириною як для дитини, так і для батьків. Бонус: це працює, навіть якщо дитина більша від батька.
Ви також можете централізувати його вертикально за допомогою цього (і знову ж таки, ширина і висота батька і дитини можуть бути абсолютно гнучкими (та / або невідомими)):
.centered-axis-xy {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
}
Майте на увазі, що вам може знадобитися також transform
префікс постачальника. Наприклад-webkit-transform: translate(-50%,-50%);