Статьи

Как отцентрировать абсолютно позиционированный элемент с помощью CSS

Эта статья была написана в 2010 году и остается одной из наших самых популярных публикаций. Если вы хотите больше узнать о методах CSS, вы можете найти эту недавнюю статью о Селекторах Уровня 4 в CSS, которая представляет большой интерес.

Центрирование абсолютно позиционированного элемента — это проблема CSS, которая возникает время от времени. Решение кажется очевидным, как только я это сделаю, но я все еще пытаюсь найти решение проблемы каждые несколько месяцев.

Горизонтальное центрирование статического элемента в CSS обычно обрабатывается путем установки для левого и правого полей значения auto

 .myelement {
  margin: 0 auto;
}

Тем не менее, это не будет работать с абсолютно позиционированным элементом. Его местоположение определяется относительно самого непосредственного родительского элемента, который имеет значение positionabsoluterelativefixed

В следующем примере относительный красный квадрат имеет 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;
}

Если нас не интересуют точные размеры нашего синего поля, мы могли бы опустить настройку widthleftright Это будет эффективно центрировать нашу синюю коробку:

 .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;
}

Итак, как мы можем центрировать нашу коробку, если она имеет фиксированные размеры? Ответ требует немного побочного мышления:

  1. Во-первых, мы используем left: 50% В отличие от положений фонового изображения, это сместит левый край синей рамки в центр.
  2. Так как наш блок расположен слишком далеко вправо, мы используем отрицательное левое поле, равное половине ширины блока. В нашем примере мы должны установить 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? Почему бы не спросить об этом на наших форумах ?