Чтобы расположить вложенный блок B ровно по центру блока A, можно использовать несколько подходов:
Есть два вложенных блока A и B с заданными размерами. Как расположить блок B ровно по центру блока A? Предложите несколько вариантов, включая решения для старых браузеров без поддержки flexbox.
Чтобы расположить вложенный блок B ровно по центру блока A, можно использовать несколько подходов:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Чтобы расположить вложенный блок B ровно по центру блока A, можно использовать несколько подходов:
\1. Flexbox (современный способ)
.parent {
display: flex;
justify-content: center; /* по горизонтали */
align-items: center; /* по вертикали */
width: 300px; /* пример */
height: 200px; /* пример */
}
.child {
width: 100px;
height: 50px;
}
\2. Абсолютное позиционирование с трансформацией
.parent {
position: relative;
width: 300px;
height: 200px;
}
.child {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 100px;
height: 50px;
}
\3. Табличное выравнивание (для старых браузеров)
.parent {
display: table;
width: 300px;
height: 200px;
text-align: center;
}
.child {
display: table-cell;
vertical-align: middle;
width: 100px;
height: 50px;
margin: 0 auto;
}
\4. Использование line-height (если высота блока фиксирована и текстовый контент)
.parent {
width: 300px;
height: 200px;
line-height: 200px; /* равна высоте родителя */
text-align: center;
}
.child {
display: inline-block;
vertical-align: middle;
line-height: normal;
width: 100px;
height: 50px;
}
\5. Использование margin auto (только по горизонтали)
.child {
width: 100px;
height: 50px;
margin: auto;
position: relative;
top: 50%;
transform: translateY(-50%);
}
Для поддержки старых браузеров без flexbox лучше использовать абсолютное позиционирование с transform или табличное выравнивание. Flexbox — самый простой и универсальный способ для современных браузеров.