Эта статья была написана в 2010 году и остается одной из наших самых популярных публикаций. Если вы хотите больше узнать о методах CSS, вы можете найти эту недавнюю статью о Селекторах Уровня 4 в CSS, которая представляет большой интерес.
Центрирование абсолютно позиционированного элемента — это проблема CSS, которая возникает время от времени. Решение кажется очевидным, как только я это сделаю, но я все еще пытаюсь найти решение проблемы каждые несколько месяцев.
Горизонтальное центрирование статического элемента в CSS обычно обрабатывается путем установки для левого и правого полей значения auto
.myelement {
margin: 0 auto;
}
Тем не менее, это не будет работать с абсолютно позиционированным элементом. Его местоположение определяется относительно самого непосредственного родительского элемента, который имеет значение position
absolute
relative
fixed
В следующем примере относительный красный квадрат имеет width
Верхний левый угол абсолютно позиционированного синего квадрата расположен на 30 пикселей в поперечнике и на 10 пикселей вниз:
.outer {
position: relative;
width: 40%;
height: 120px;
margin: 20px auto;
border: 2px solid #c00;
}
.inner {
position: absolute;
width: 100px;
height: 100px;
top: 10px;
left: 30px;
background-color: #00c;
}
Если нас не интересуют точные размеры нашего синего поля, мы могли бы опустить настройку width
left
right
Это будет эффективно центрировать нашу синюю коробку:
.outer {
position: relative;
width: 40%;
height: 120px;
margin: 20px auto;
border: 2px solid #c00;
}
.inner {
position: absolute;
height: 100px;
left: 30px;
top: 10px;
right: 30px;
background-color: #00c;
}
Итак, как мы можем центрировать нашу коробку, если она имеет фиксированные размеры? Ответ требует немного побочного мышления:
- Во-первых, мы используем
left: 50%
В отличие от положений фонового изображения, это сместит левый край синей рамки в центр. - Так как наш блок расположен слишком далеко вправо, мы используем отрицательное левое поле, равное половине ширины блока. В нашем примере мы должны установить
margin-left
-50px
Вот код:
.outer {
position: relative;
width: 40%;
height: 120px;
margin: 20px auto;
border: 2px solid #c00;
}
.inner {
position: absolute;
width: 100px;
height: 100px;
top: 10px;
left: 50%;
margin-left: -50px;
background-color: #00c;
}
Синяя рамка останется центрированной независимо от того, как изменяется ширина внешнего элемента.
Если вам понравилось читать этот пост, вам понравится SitePoint Premium ; место, чтобы узнать новые навыки и приемы у опытных разработчиков. Участники получают мгновенный доступ ко всем электронным книгам SitePoint и интерактивным онлайн-курсам, таким как CSS Master .
Комментарии к этой статье закрыты. У вас есть вопрос о CSS? Почему бы не спросить об этом на наших форумах ?