Товаров: 0 (0р.)

Css position absolute по центру: absolute по центру TD? — Хабр Q&A

Содержание

Выравнивание блока div со свойством position:absolute или fixed по центру.

Сегодня урок на тему выравнивания блоков div с помощью технологии CSS по центру.

Здесь есть несколько моментов, которые не совсем просто воспринимаются. На одном из них мне бы хотелось сегодня остановиться.

Когда блоки идут в нормальном потоке, выровнять один, по центру, относительно родительского блока, в котом он находиться, не составляет особого труда.

Для этого используется стандартная CSS конструкция margin:auto.

Но, что делать, если блок, который нужно выровнять по центру имеет абсолютное (absolute) или фиксированное положение (fixed). Такая ситуация иногда бывает.

Т.е. в данном случае наш пример принимает следующий вид.

Есть еще более современное решение этой проблемы — использование flexbox.

Подробнее здесь.

<div>
<div></div>
</div>

position:relative; — у родительского блока было добавлено, чтобы отсчет шел именно с него, а не с тэга <body>

position:absolute; — собственно говоря, само абсолютное позиционирование.


После произведенной манипуляции margin:auto работать уже перестает.

Как быть? Как можно снова выровнять блок по центру?

Сегодня я расскажу о трюке, который используется в этом случае. На самом деле все достаточно просто, нужно только добавить два CSS-свойства для выравниваемого блока.

<div>
<div></div></div>

left:50%;  — смещаем блок относительно родительского на 50% влево.

margin-left:-150px; — т.к. отсчет идет с левого верхнего края блока, то для полной ровности, половину блока нужно сместить влево, что мы и делаем отрицательным отступом.


Если ширина блока задается в процентах, то решение может быть следующим:

<div>
<div></div>
</div>

Если по центру нужно выровнять строку с текстом:

<p>Строка текста</p>

Дело в том, что, когда блоку присваивается свойство с position:absolute. Ширина блока с значением width:auto по умолчанию, становиться равной содержимому. Поэтому свойство text-align не будет работать. Чтобы все начало работать, нужно принудительно увеличить ширину до 100%.

Все, что было сказано выше про position:absolute аналогично можно применить и к блокам, которые имеют position: fixed.

Есть еще более современное решение этой проблемы — использование flexbox.

Подробнее здесь.

html — css position: sticky

css position: absolute / html / css / css-position / centering

У меня проблема с центрированием элемента, для которого задана absolute position атрибута . Кто-нибудь знает, почему изображения не по центру?

body {
  text-align: center;
}

#slideshowWrapper {
  margin-top: 50px;
  text-align: center;
}

ul#slideshow {
  list-style: none;
  position: relative;
  margin: auto;
}

ul#slideshow li {
  position: absolute;
}

ul#slideshow li img {
  border: 1px solid #ccc;
  padding: 4px;
  height: 450px;
}
<body>
  <div>
    <ul>
      <li><img src="https://source. unsplash.com/random/300*300?technology" alt="Dummy 1" /></li>
      <li><img src="https://source.unsplash.com/random/301*301?technology" alt="Dummy 2" /></li>
    </ul>
  </div>
</body>

Joundill



Answer #1

для центрирования атрибута position:absolute необходимо установить left:50% и margin-left:-50% от ширины div.

<style>
div.center{
 width:200px;
 left:50%;
 margin-left:-100px;
 position:absolute;
}
</style>


<body>
 <div>
  should be centered horizontaly
 </div>
</body>

для вертикального центра по центру нужно сделать то же самое,но не слева,а сверху.(ПРИМЕЧАНИЕ:html и body должны иметь min-height 100%;)

<style>
 body,html{
  min-height:100%;
 }
 div. center{
  height:200px;
  top:50%;
  margin-top:-100px;
  position:absolute;
 }
</style>

<body>
 <div>
  should be centered verticaly
 </div>
</body>

и могут быть объединены для обоих

   
 <style>
 body,html{
  min-height:100%;
 }
 div.center{
  width:200px;
  height:50px
  left:50%;
  top:50%;
  margin-left:-100px;
  margin-top:-25px;
  position:absolute;
 }
</style>


<body>
 <div>
  should be centered
 </div>
</body>




position | htmlbook.ru

Internet ExplorerChromeOperaSafariFirefoxAndroidiOS
6.0+8.0+1.0+4.0+1.0+1.0+1.0+1.0+

Краткая информация

Версии CSS

Описание

Устанавливает способ позиционирования элемента относительно окна браузера или других объектов на веб-странице.

Синтаксис

position: absolute | fixed | relative | static | inherit

Значения

absolute
Указывает, что элемент абсолютно позиционирован, при этом другие элементы отображаются на веб-странице словно абсолютно позиционированного элемента и нет. Положение элемента задается свойствами left, top, right и bottom, также на положение влияет значение свойства position родительского элемента. Так, если у родителя значение position установлено как static или родителя нет, то отсчет координат ведется от края окна браузера. Если у родителя значение position задано как fixed, relative или absolute, то отсчет координат ведется от края родительского элемента.
fixed
По своему действию это значение близко к absolute, но в отличие от него привязывается к указанной свойствами left, top, right и bottom точке на экране и не меняет своего положения при прокрутке веб-страницы. Браузер Firefox вообще не отображает полосы прокрутки, если положение элемента задано фиксированным, и оно не помещается целиком в окно браузера.
В браузере Opera хотя и показываются полосы прокрутки, но они никак не влияют на позицию элемента.
relative
Положение элемента устанавливается относительно его исходного места. Добавление свойств left, top, right и bottom изменяет позицию элемента и сдвигает его в ту или иную сторону от первоначального расположения.
static
Элементы отображаются как обычно. Использование свойств left, top, right и bottom не приводит к каким-либо результатам.
inherit
Наследует значение родителя.

Пример

HTML5CSS2.1IECrOpSaFx

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>position</title>
  <style>
   .layer1 {
    position: relative; /* Относительное позиционирование */
    background: #f0f0f0; /* Цвет фона */
    height: 200px; /* Высота блока */
   }
   .layer2 {
    position: absolute; /* Абсолютное позиционирование */
    bottom: 15px; /* Положение от нижнего края */
    right: 15px; /* Положение от правого края */
    line-height: 1px;
   }
  </style>
 </head>
 <body>
  <div>
   <div>
     <img src="images/girl.
jpg" alt="Девочка" /> </div> </div> </body> </html>

Результат данного примера показан на рис. 1.

Рис. 1. Применение свойства position

Объектная модель

[window.]document.getElementById(«elementID»).style.position

Браузеры

Браузер Internet Explorer 6 значение fixed не поддерживает. Internet Explorer до версии 8.0 не поддерживает значение inherit.

Наложение (position: absolute;) | CSS примеры

Элемент с position: absolute; смещается на расстояние, указанное в свойствах top, right, bottom, left, от края ближайшего родителя с position не static. Передвинуть его относительно своего расположения можно с помощью margin и transform. Размещение элемента над другими элементами правится с помощью свойства z-index.

После того, как свойство position примет значение absolute, размер элемента может измениться, а соседние элементы сдвинутся на освободившееся пространство.

Поместить элемент над другими элементами, убрав его из потока

Элемент с position: absolute; не влияет на размер родителя.

Элемент с position: absolute; не влияет на положение соседей: цифры 20, 21, 22, … смещаются к цифре 19.

Расположить элемент с

position: absolute; относительно границы ближайшего родителя с position не static

top

bottom

родительский элемент
position: relative;

дочерний элемент position: absolute;

left

right

Свойства top, right, bottom, left могут иметь как положительные, так и отрицательные значения в любых единицах измерения, а также в процентах. По умолчанию у них установлено значение

auto.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Элемент 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

<style>
. raz {
  position: relative;
  background: mistyrose;
}
.absolute {
  position: absolute;
  top: 0;
  background: lightpink;
}
</style>

<div>
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
  <span>Элемент</span>
  20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
</div>

Если свойство border задано ближайшему родителю с position не static, то элемент смещается относительно внутреннего края рамки, созданной этим свойством.

Значения свойств top и bottom в процентах рассчитываются от высоты за минусом border-top-width и border-bottom-width ближайшего родителя с position не static. Значения свойств left и right в процентах рассчитываются от ширины за минусом border-left-width и border-right-width ближайшего родителя с position не static.

Использование свойств top или bottom, left или right зависит от конкретной ситуации.

1 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27Элемент28 29 30 31 32 33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48 49 50
<style>
.raz {
  position: relative;
  border: 5px solid red; 
}
.absolute {
  position: absolute;
  top: -5px;
  background: lightpink;
}
</style>

<div>
  11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
  <span>Элемент</span>
  28 29 30 31 32 33 34 35 36 37 38 39 40
</div>

Ширина и высота элемента с

position: absolute; относительно размера ближайшего родителя с position не static

Ширина элемента с position: absolute; без явно заданного значения устанавливается по содержимому. Элементы с display не block и position: absolute; ведут себя как элементы с display: block; и position: absolute;.

Без явно заданной ширины и/или высоты размер элемента определяется расстоянием от left не auto до right не auto и/или от top не auto до bottom не auto .

Стили, чтобы растянуть блок на всю ширину и высоту родителя без border, но с position не static:


  left: 0;
  right: 0;
  top: 0;
  bottom: 0;



  left: 0;
  right: 0;
  width: 100%;
  height: 100%;
  box-sizing: border-box;

С ограниченной шириной и/или высотой расстояние от left не auto до right не auto и/или от top не auto до bottom не auto определяет область, в рамках которой может перемещаться элемент с margin: auto; . Если расстояние от left не auto до right не auto меньше width, то свойство right игнорируется .

Свойство height в процентах не заменяется на height: auto;, даже когда ближайший родитель имеет height: auto;.

Блок с

position: absolute; внутри ближайшего родителя с position не static и overflow не visible

Значение overflow отличное от visible у ближайшего родителя с position не static прячет выходящую за границы часть дочернего элемента с первого экрана видимости. Если у ближайшего родителя с position не static и overflow: auto; не ограничена ширина и высота, то при соответствующем direction появляется полоса прокрутки, которая изначально скрывает только выступающий элемент с position: absolute;.

Позиционирование вложенного элемента относительно родителя

Родитель с position: static; пропускается. Если нет родителя с position не static, то положение элемента рассчитывается относительно границы области просмотра окна браузера .

Чтобы абсолютно позиционированный блок растянуть на всё содержимое вместе со скроллингом ближайшего позиционированного предка, нужно обернуть содержимое в ещё один тег, относительно которого позиционировать блок .

Родитель с position: static; и overflow не visible, стоящий внутри позиционированного родителя, не прячет содержимое потомка с position: absolute;.

Свойства width, margin и padding в процентах рассчитываются от ширины за минусом border-left-width и border-right-width ближайшего родителя с position не static.

Изучаем CSS-позиционирование за 10 шагов — Очередной блог фрилансера

Позиционирование — одно из ключевых понятий в блочной верстке. Разобравшись с ним, вам многое станет понятно, а верстка из шаманства превратится в осмысленный процесс. Итак, речь в статье пойдет о CSS-свойствах position и float.

1. position: static

По умолчанию все элементы на странице имеют статическое позиционирование (position: static), это означает, что элемент не позиционирован, и появляется в документе на своем обычном месте, то есть в том же порядке, как и в html-разметке.

Нет необходимости специально назначать это свойство какому-либо элементу, если только вам не требуется изменить ранее установленное позиционирование на дефолтное.


#content{
 position: static;
}

2. position:relative

Относительное позиционирование (position: relative) позволяет вам использовать свойства: top, bottom, left и right, для расположения элемента относительно того места, где бы он появился при обычном позиционировании.

Давайте переместим #content на 20 пикселей вниз, и на 40 пикселей влево:


#content{
 position: relative;
 top: 20px;
 left: -40px;
}

Обратите внимание, что на том месте, где бы должен был находится наш блок #content, теперь образовалось пустое пространство. Следующий за блоком #content, блок #footer не переместился ниже, потому что, #content по-прежнему занимает свое место в документе, несмотря на то, что мы передвинули его.

На данном этапе может показаться, что относительное позиционирование не так уж и полезно, но, не спешите с выводами, далее в статье, вы узнаете, для чего его можно использовать.

3. position: absolute

При абсолютном позиционировании (position: absolute), элемент удаляется из документа, и появляется там, где вы ему скажете.

Давайте, для примера, переместим блок #div-1a в верхний, правый угол страницы:


#div-1a {
 position:absolute;
 top:0;
 right:0;
 width:200px;
}

Обратите внимание, что на этот раз, поскольку блок #div-1a был удален из документа, оставшиеся элементы на странице расположились по-другому: #div-1b, #div-1c и #footer переместились выше, на место удаленного блока. А сам блок #div-1a, расположился точно в правом, верхнему углу страницы.

Таким образом, мы можем позиционировать любой элемент относительно страницы, однако этого не достаточно. На самом деле, нам необходимо позиционировать #div-1a относительно родительского блока #content. И на этом этапе, относительное позиционирование вновь вступает в игру.

4. position: fixed

Фиксированное позиционирование (position: fixed), является подразделом абсолютного позиционирования. Единственное его отличие в том, что он всегда находится в видимой области экрана, и не двигается во время прокрутки страницы. В этом отношении, он немного похож на фиксированное фоновое изображение.


#div-1a {
 position:fixed;
 top:0;
 right:0;
 width:200px;
}

В IE с position: fixed не все так гладко, как бы нам хотелось, но существует множество способов обойти эти ограничения.

5. position:relative + position:absolute

Назначив блоку #content относительное позиционирование (position: relative), мы сможем позиционировать любые дочерние элементы, относительно его границ. Давайте разместим блок #div-1a, в верхнем правом углу блока #content.


#content {
 position:relative;
}

#div-1a {
 position:absolute;
 top:0;
 right:0;
 width:200px;
}

6. Две колонки

Вооружившись знаниями из предыдущих шагов, можно попробовать сделать две колонки, с помощью относительного и абсолютного позиционирования.


#content {
 position:relative;
}

#div-1a {
 position:absolute;
 top:0;
 right:0;
 width:200px;
}

#div-1b {
 position:absolute;
 top:0;
 left:0;
 width:200px;
}

Одним из преимуществ абсолютного позиционирования, является возможность размещать элементы в произвольном порядке, независимо от того, как именно они расположены в разметке. В приведенном выше примере, блок #div-1b расположен перед блоком #div-1a.

А сейчас у вас должен был возникнуть вопрос: “А куда же делись остальные элементы из нашего примера?”. Они скрылись под абсолютно расположенными блоками. К счастью, есть возможность это исправить.

7. Две колонки с фиксированной высотой

Одно из решений – задать фиксированную высоту контейнеру, содержащему колонки.


#content {
 position:relative;
 height: 450px;
}

#div-1a {
 position:absolute;
 top:0;
 right:0;
 width:200px;
}

#div-1b {
 position:absolute;
 top:0;
 left:0;
 width:200px;
}

Решение не очень подходящее, поскольку мы никогда не знаем заранее, какого размера текст, будет расположен в колонках, и какой шрифт будет использован.

8. Float

Для колонок с переменной высотой, абсолютное позиционирование не подходит, поэтому давайте рассмотрим другой вариант.

Назначив блоку float, мы максимально возможно оттолкнем его к правому (или левому) краю, а следующий за блоком текст, будет обтекать его. Обычно такой прием используется для картинок, но мы будем использовать его для более сложной задачи, поскольку это единственный инструмент, имеющийся в нашем распоряжении.


#div-1a {
 float:left;
 width:200px;
}

9. “Плавающие” колонки

Если назначить первому блоку float: left, а затем второму float: left, каждый из блоков прижмется к левому краю, и мы получим две колонки, с переменной высотой.


#div-1a {
 float:left;
 width:150px;
}

#div-1b {
 float:left;
 width:150px;
}

Также, можно назначить колонкам противоположное значение float, в этом случае, они распределятся по краям контейнера.


#div-1a {
 float:right;
 width:150px;
}

#div-1b {
 float:left;
 width:150px;
}

Но теперь у нас появилась другая проблема – колонки выходят за пределы родительского контейнера, тем самым ломая всю верстку. Эта самая распространенная проблема начинающих верстальщиков, хотя решается она довольно просто.

10. Очистка float

Чистку флоатов можно делать двумя способами. Если после колонок идет еще один блок, достаточно назначить ему clear: both.


#div-1a {
 float:left;
 width:190px;
}

#div-1b {
 float:left;
 width:190px;
}

#div-1c {
 clear:both;
}

Или же назначить родительскому контейнеру свойство overflow: hidden


#content {
 overflow:hidden;
}

В любом случае, результат будет один и тот же.

Заключение

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

Перевод скринкаста “Learn CSS Positioning in Ten Steps”.

Позиционирование элементов — position: relative, absolute, fixed, sticky

Наверняка вы слышали о свойстве position, и скорей всего, со значением absolute. Но при применении этого свойства к какому либо элементу могли столкнуться со странным его поведением.

Что касается самого свойства position, то по умолчанию для всех элементов оно имеет значение static, но может принимать и другие значения:

position: static / relative / absolute / fixed / sticky

position: static / relative / absolute / fixed / sticky

Для 4-х последних значений свойства position (т.е.. всех, кроме static) можно назначить координаты с помощью свойств left — слева и right — справа (по горизонтали), а  также top — сверху и bottom — снизу (по вертикали):

#some { position: relative; left: 10%; top: 20px; } #temp { position: relative; right: 0; top: 2em; }

#some {

  position: relative;

  left: 10%;

  top: 20px;

}

 

#temp {

  position: relative;

  right: 0;

  top: 2em;

}

Также для всех позиций, кроме static, можно задать свойство z-index, которое определяется цифрой (0, -1, 10, 999) без указания единиц, т. к. это свойство показывает, на каком уровне (или слое) находится спозиционированный элемент по сравнению с другими позиционированными элементами (выше или ниже). Чем меньше цифра, тем ниже будет находится элемент среди себе подобных (т.е. тех элементов, у которых свойство position  имеет значение relative, absolute, fixed или sticky.  Для элементов с position: static свойства z-index или любая из координат (left, right, top, bottom) будут проигнорированы.

#card { position: absolute; top: 10px; left: 20px; z-index: 1; }

#card {

  position: absolute;

  top: 10px;

  left: 20px;

  z-index: 1;

}

Элементы с position: relative

Для таких элементов визуальное отображение не меняется до тех пор, пока не заданы координаты. Т.е. относительно позиционированные блоки не смещаются и не меняют своей ширины в отличие от абсолютно или фиксированно позиционированных элементов.

Если вы добавите координаты top и left с положительными значениями, то элемент сместиться вниз и вправо, с отрицательными значениями — вверх и влево относительно своего первоначального положения. Можно сравнить относительно позиционированный элемент с собакой на цепочке, которая привязана к колышку — бегать она может только относительно этого колышка и на расстояние, не превышающее длину цепи — для нашего элемента это расстояние, заданное с помощью координат.

В примере ниже вы можете изменять координаты выделенного блока с position: relative, используя ползунки или поля ввода. Обратите внимание, что при заданных координатах left и top изменения для right и bottom не учитываются — так работает приоритет координат при позиционировании. Сам элемент смещается в разные стороны от своего первоначального положения, оставляя пустое место там, где был изначально и накладываясь на контент до и после него.

Следует обратить внимание на то, что элементы с position: relative без заданных координат или с нулевыми координатами никак не выделяются из общего, статического потока элементов. Тем не менее, они как бы приобретают новый статус в глазах браузера, приподнимаются над своими соседями и, что самое главное, — позволяют размещать внутри себя элементы с position: absolute. Об этом читайте ниже.

Элементы с position: absolute

При абсолютном позиционировании элемента без указания координат он будет привязан своим левым краем к левому краю родительского контейнера, но его ширина изменится: если текста мало — уменьшится, если текста (контента) много, то ширина блока увеличится, и он «вылезет» за пределы контейнера справа.

Как только этому элементу будут заданы координаты, он «сбежит» из родительского контейнера и разместится относительно body, заняв при этом все доступное пространство внутри body, если имеет приличное количество контента. Если контента мало (1-2 слова, например), то блок «примостится» сверху статического контента, не оставив и следа там, где был в первоначальной разметке.

Чтобы «вернуть беглеца» обратно в пределы родительского элемента, необходимо родителю задать свойство … position: relative, причем без указания каких-либо координат для него. В этом случае координаты дочернего элемента будут отсчитываться в пределах родительского контейнера, что, как правило, значительно удобнее.

В примере ниже вы можете посмотреть, как изменяется положение и вид блока, которому назначили свойство position: absolute. Для этого вам нужно будет нажать на соответствующую кнопку внизу примера. Обратите внимание, что элемент уменьшил свою ширину. Высота осталась примерно такой же за счет добавления кнопки вместо второго параграфа. Учтите, что первоначально для элемента с position: absolute ни одна координата не задана. Они добавятся только после того, как вы начнете перемещать ползунки. Кроме того, для абсолютно позиционированного элемента можно назначить все 4 координаты (left, top, right, bottom).  Если их значения не будут противоречить друг другу, элемент … растянется. Нажмите на кнопку «Все координаты в 0» и посмотрите на ширину элемента. Она займет все доступное пространство внутри body или элемента-родителя. Кстати, кнопка «Вернуть в пределы родительского элемента» позволит вам посмотреть на разницу в расчете координат. В самом блоке есть кнопка «Убрать координаты», которая поможет в случае слишком большой растяжки элемента с  position: absolute.

Вы можете поэкспериментировать с примером, рассматривающим абсолютное позиционирование, в отдельной вкладке. Красной двойной рамкой в этом примере выделены размеры body, синей точечной — пределы родительского элемента.

Элементы с position: fixed

Это фиксированные элементы, которые без указания координат «прилипают» к левому краю родительского блока и не смещаются при прокрутке страницы. Как только координаты заданы, элемент «открепляется» от родителя и позиционируется относительно окна просмотра, т.е. для нас это относительно  body. Опять-таки он не смещается при прокрутке страницы, т.к. зафиксирован в определенных координатах.

В примере ниже вы можете назначить синему элементу свойство position: fixed, нажав на кнопку «Добавить синему блоку position: fixed». До тех пор, пока вы не начали изменять координаты этого элемента с помощью ползунков или цифр, он будет держаться в пределах родительского элемента. Но, как только вы задали две координаты, блок вырвется в координаты документа и не вернется внутрь родителя, даже, если вы назначите последнему position: relative. Это видно по изображению ниже.

Остальное его поведение подобно абсолютно позиционированному блоку: изменение ширины и высоты, растяжение при назначении всех координат, если значения координат не противоречат друг другу.


В этом примере красная рамка ограничивает размеры body, синяя — размеры родительского элемента.

Протестируйте пример с фиксированным позиционированием элемента в отдельной вкладке.

Обратите внимание, что при назначении отрицательных координат элементы с position: absolute и fixed уходят под рамки браузера (элемента), поэтому их часто используют для создания выезжающих меню, форм, баннеров и кнопок для прокрутки вверх, которые прячутся, когда не нужны.

Практический пример

position: absolute и position:fixed

В этом примере с codepen.io абсолютно позиционировано изображение внутри разметки header + задано фоновое изображение в css-свойствах для того же header. Заголовок h2 имеет position:fixed. В результате прокрутка фона поверх изображения и заголовка дает эффект скрытия текста и нижнего изображения «под облаками» наполовину прозрачной png-картинки.

See the Pen Fixed Disappearing Scrolling Header by Dudley Storey (@dudleystorey) on CodePen.dark

Элементы с position: sticky

Такие элементы нужны для оформления содержания или заголовков каких-либо блоков внутри одной и той же статьи. Они никак не выделяются из текста до назначения им координат, зато после указания, как правило, координаты top, прокручиваются только до значения этой координаты, «прилипают» к краю контейнера и не двигаются при прокрутке страницы.

Следует учитывать, что это новое значение давно используемого свойства, и для некоторых браузеров необходимо добавление вендорных префиксов:

#sticky{ position: -webkit-sticky; position: sticky; top: 10px; }

#sticky{

  position: -webkit-sticky;

  position: sticky;

  top: 10px;

}

В примере ниже вам необходимо прокрутить файл, разбитый на несколько секций, чтобы увидеть, как  каждый заголовок типа «Section 1» «прилипает» к верхнему краю из-за назначенного ему свойства top: 0. После того, как его сменяет Section 2, «прилипает» уже этот заголовок.

Код для заголовков здесь таков:

h3 { background-color: #fff; color: #ff9300; margin: 0; padding: 10px 0; position: -webkit-sticky; position: sticky; top: 0; }

h3 {

    background-color: #fff;

    color: #ff9300;

    margin: 0;

    padding: 10px 0;

    position: -webkit-sticky;

    position: sticky;

    top: 0;

}

Фоновый цвет для заголовка нужен, чтобы его текст лучше читался. В примере он белый и совпадает с цветом фона страницы. Также имеет смысл убрать прозрачные внешние отступы (margin: 0) и вместо них добавить внутренние (padding: 10px 0), чтобы фоновый цвет занимал больше пространства.

Свойство position: sticky достаточно удобное использовать для длинных статей, разделенных на части, однако пока применять его нужно с осторожностью из-за неполной поддержки. Посмотреть, какие браузеры поддерживают это значение, можно на сайте caniuse.com.

Использование свойства z-index

До этого момента мы не рассматривали порядок наложения позиционированных элементов друг на друга, т.к. у нас был только один такой элемент в тестовых файлах. Тем не менее ситуация, когда в пределах одного блока может быть несколько относительно, абсолютно или фиксированно спозиционированных элементов, часто встречается на практике.  Тогда следует использовать свойство z-index, позволяющее определять порядок наложения спозиционированных блоков друг на друга. Поскольку раскладка элементов определяется в основном в двумерном пространстве, т.е.  по осям X и Y, то определение наложения происходит по оси Z, перпендикулярной плоскости экрана. Каждый их таких элементов может находиться как ниже, так и выше других объектов веб-страницы при заданном свойстве z-index. Рассмотрим его подробнее.

Свойство z-index задается цифрой. Это может быть 0, положительное или отрицательное значение. По умолчанию у каждого позиционированного элемента (position: relative | absolute | fixed) свойство z-index имеет значение auto. В этом случае каждый следующий в разметке элемент с заданным свойством position из перечисленных значений накладывается на предыдущий. При явном указании z-index в виде числа элемент перемещается выше или ниже соседних элементов.

В примере ниже представлены карты, для которых задано абсолютное позиционирование и координаты left и top таким образом, чтобы они накладывались друг на друга. Разметка и css-свойства этого примера таковы:

<style> img { display: block; position: absolute; cursor: pointer; } #ten { left: 70px; top: -20px; } #jack { left: 50px; top: 30px; } #queen { left: 80px; top: 60px; } #king { left: 130px; top: 30px; } #ace { left: 110px; } </style> <img src=»img/diamonds_10. gif» alt=»10 of diamonds»> <img src=»img/diamonds_jack.gif» alt=»Jack of diamonds»> <img src=»img/diamonds_queen.gif» alt=»Queen of diamonds»> <img src=»img/diamonds_king.gif» alt=»King of diamonds»> <img src=»img/diamonds_ace.gif» alt=»Ace of diamonds»>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

<style>

img {

        display: block;

        position: absolute;

        cursor: pointer;

    }

 

    #ten {

        left: 70px;

        top: -20px;

    }

 

    #jack {

        left: 50px;

        top: 30px;

    }

 

    #queen {

        left: 80px;

        top: 60px;

    }

 

    #king {

        left: 130px;

        top: 30px;

    }

 

    #ace {

        left: 110px;

    }

</style>

<img src=»img/diamonds_10. gif» alt=»10 of diamonds»>

 

<img src=»img/diamonds_jack.gif» alt=»Jack of diamonds»>

 

<img src=»img/diamonds_queen.gif» alt=»Queen of diamonds»>

 

<img src=»img/diamonds_king.gif» alt=»King of diamonds»>

<img src=»img/diamonds_ace.gif» alt=»Ace of diamonds»>

По умолчанию все карты имеют z-index: auto и накладываются в порядке размещения в html-коде. Вы можете щелкнуть по любой карте (она приобретет красную обводку) и изменять свойство z-index с помощью ползунка или цифр в специальном поле.

Обратите внимание на то, что отрицательный z-index закрывает доступ к элементу — вы уже не можете выделить его, чтобы назначить другое значение. Если бы внутри этого элемента были ссылки, вы бы не смогли щелкнуть по ним. Поэтому использовать отрицательные значения z-index нужно с осторожностью. Воспользуйтесь кликом на тексте «значение auto для всех карт», чтобы вернуть начальное состояние элементам.

Контекст наложения (stacking context)

Использование z-index вроде бы не предпоагает никаких сложностей. Обычно их и не бывает. Однако в спецификации есть один нюанс, связанный с термином контекст наложения (stacking context). Это концепция трехмерного расположения html-элементов вдоль оси Z, перпендикулярной к пользователю, находящемуся перед экраном. Обычно эти элементы занимают место по порядку друг за другом, но есть ряд свойств, который меняет позицию элемента по оси Z.

Контекст может формироваться в любом месте документа и любым элементом, который соответствует одному из перечисленных условий:

  • является корневым элементом (html),
  • позиционирован абсолютно (position:absolute) или относительно (position:relative) с z-index значением отличным от "auto", или имеет position: fixed
  • flex-элемент с z-index отличным от  "auto", чей родительский элемент имеет свойство display: flex|inline-flex,
  • элементы с  opacity меньше чем 1. (См. the specification for opacity),
  • элементы с  transform отличным от «none»,
  • элементы с mix-blend-mode значением отличным от «normal»,
  • элементы с filter значением отличным от «none»,
  • элементы с isolation установленным в  «isolate»,
  • если мы указываем элементу атрибут  will-change при этом не обязательно присваивать ему значения (См. эту статью)
  • элементы с -webkit-overflow-scrolling установленым в «touch»

В том, что касается z-index, контекст наложения работает таким образом, что при назначении родительскому элементу одного из перечисленных свойств, порядок наложения соседних элементов несколько изменится при наличии у них вложенных элементов с позиционированием.

В примере ниже у нас есть несколько элементов с относительным (position: relative) или абсолютным (position: absolute) позиционированием. Разметка этого примера такова:

<div>div#1 with position:relative <br> z-index: 5 </div> <div>div#2 with position: absolute <br> z-index: auto <div>div#4 with position: relative; <br>z-index: 6</div> <div>div#5 with position: absolute; <br>z-index: 3</div> <div>div#6 with position: relative; <br>z-index: 2</div> <div>div#7 with position: relative; <br>z-index: -1</div> </div> <div>div#3 with position:relative <br> z-index: 2 </div>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<div>div#1 with position:relative

    <br> z-index: 5

</div>

<div>div#2 with position: absolute

    <br> z-index: auto

    <div>div#4 with position: relative;

        <br>z-index: 6</div>

    <div>div#5 with position: absolute;

        <br>z-index: 3</div>

    <div>div#6 with position: relative;

        <br>z-index: 2</div>

    <div>div#7 with position: relative;

        <br>z-index: -1</div>

</div>

<div>div#3 with position:relative

    <br> z-index: 2

</div>

Каждому div-у в этой разметке задан z-index. Тестовым элементом у нас является div#2, для которого изначально z-index НЕ задан, т.е. он имеет значение auto по умолчанию. Желтый div#4 с z-index:6, который размещен внутри  div#2 как дочерний элемент, сейчас накладывается на зеленый div#1 с z-index:5, т.к. его цифра 6 предполагает более высокое расположение позиционированного элемента по оси Z по сравнению с цифрой 5. Однако стоит задать div#2 свойство z-index: 1 или 2 — и его вложенные элементы спрячутся под зеленые блоки, т.к. контекст наложения сейчас учитывает z-index только родительского элемента в ряду с его соседними — это div#1 и div#3.

Второй способ изменить контекст наложения div#2 — это задать этому div-у свойство opacity < 1 при стандартном значении свойства z-index: auto.  В нашем приме opacity уменьшается до значения 0.7, чтобы это было четко видно, хотя достаточно назначить и 0. 99, которое визуально почти не отличается от 1.

Все остальные значения z-index для div#2 поднимают его выше или опускают ниже зеленых блоков, но все вложенные в него элементы определяют свое расположение по оси Z относительно друг друга, но не относительно соседних элементов родителя.

Ссылка по теме на developer.mozilla.org

Просмотров: 3 022

Как выровнять текст по высоте css

Существует несколько принципиально отличающихся способов для того чтобы отцентрировать объект по вертикали с помощью CSS, однако сложность может быть в выборе правильного. Мы рассмотрим некоторые из них, а также сделаем небольшой сайт, используя полученные знания.

Вертикальное выравнивание по центру с помощью CSS достигается не так просто. Существует множество способов и не все работают во всех броузерах. Давайте рассмотрим 5 различных методов, а также «за» и «против» каждого из них. Пример.

1-ый способ

Этот метод предполагает, что мы устанавливаем некоторому элементу

Плюсы

  • Контент может динамически изменять высоту (высота не определена в CSS).
  • Контент не обрезается в случае, если для него недостаточно места.

Минусы

  • Не работает в IE 7 и меньше
  • Много вложенных тэгов

2-ой метод

Этот метод использует абсолютное позиционирование div-а, которому top устанавливается в 50%, а верхний отступ (margin-top) минус половине высоты контента. Это подразумевает, что объект должен иметь фиксированную высоту, которая определена в стилях CSS.

Поскольку высота фиксированная, вы можете установить overflow:auto; для div-а содержащего контент, таким образом, в случае если контент не будет влазить, то появятся скролл-бары.

Плюсы

  • Работает во всех броузерах.
  • Нет лишней вложенности.

Минусы

  • Когда не достаточно места, контент пропадает (например, div находится внутри body, а пользователь уменьшил окна, в этом случае скролл-бары не появятся.

3-ий метод

В этом методе, мы обернём div с контентом другим div-ом. Установим ему высоту в 50% (height: 50%;), а нижний отступ половине высоты (margin-bottom:-contentheight;). Контент будет очищать float и выводиться по центру.

Плюсы

  • Работает во всех броузерах.
  • Когда недостаточно места (например, когда уменьшено окно) контент не обрезается, появятся скроллбары.

Минусы

  • Думаю только один: что используется лишний пустой элемент.

4-ый метод.

Этот метод использует свойство position:absolute; для div-а с фиксированными размерами (шириной и высотой). Затем устанавливаем ему координаты top:0; bottom:0;, но поскольку у него фиксированная высота, то он не может растянуться и выравнивается по центру. Это очень похоже на общеизвестный метод горизонтального выравнивания по центру блочного элемента фиксированной ширины (margin: 0 auto;).

Плюсы

Минусы

  • Не работает в Internet Explorer
  • Контент будет обрезаться без скролл-баров, если не хватает места в контейнере.

5-ый метод

С помощью этого метода можно выровнять по центру одну строку текста. Просто устанавливаем высоту текста (line-height) равной высоте элемента (height). После этого строка будет выведена по центру.

Плюсы

  • Работает во всех броузерах.
  • Не обрезает текст, если он не влез.

Минусы

  • Работает только с текстом (не работает с блочными элементами).
  • Если текста больше чем одна строка, то выглядит очень плохо.

Этот способ очень полезен для небольших элементов, например чтобы вырвнять по центру текст в кнопке или в текстовом поле.

Теперь вы знаете как добиться вертикального выравнивания по центру, давайте сделаем простой web-сайт, который, в конце-концов будет выглядеть так:

Шаг 1

Всегда хорошо начинать с семантической разметки. Наша страница будет структурирована следующим образом:

  • #floater (чтобы выровнять контент по центру)
  • #centred (центральный элемент)
  • #content
  • #bottom (для копирайтов и всего такого)
  • Напишем следующую html-разметку:

    Шаг 2

    Сейчас мы напишем простейший CSS, для размещения элементов на странице. Вы должны сохранить этот код в файле style.css. Именно на него прописана ссылка в html-файле.

    Перед тем как сделать наш контент выровненным по центру, необходимо для body и html установить высоту 100%. Так как высота считается без внутренних и внешних отступов (padding и margin), то мы устанавливаем их (отступы) в 0, чтобы не было скроллбаров.

    Нижний отступ для элемента «floater»-а равен минус половине высоты контента (400px), а именно -200px;

    Сейчас ваша страничка должна выглядеть приблизительно так:

    Ширина элемента #centered 80%. Это делает наш сайт уже на маленьких экранах и шире на больших. большинство сайтов выглядит неприлично на новых широких мониторах в верхнем левом углу. Свойства min-width и max-width также ограничивают нашу страничку, чтобы она не выглядела слишком широкой или слишком узкой. Internet Explorer не поддерживает эти свойства. Для него надо установить фиксированную ширину.

    Поскольку элементу #centered установлено position:relative, мы можем использовать абсолютное позиционирование элементов внутри него. Затем установим overflow:auto; для элемента #content, чтобы появлялись скроллбары, в случае если не будет помещаться контент.

    Шаг 3

    И последнее что мы сделаем, это добавим кое-какие стили, чтобы страничка выглядела немного привлекательнее. Давайте начнём с меню.

    Первое что мы сделали, чтобы меню выглядело лучше, удалили маркеры, установив атрибут list-style:none, а также установили внутренние и внешние отступы, так как по умолчанию в разных броузерах они сильно различаются.

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

    Другая интересная вещь, которую мы использовали для меню — это псевдо-классы :before и :after. Они позволяют вам добавить что-нибудь перед и после элемента. Это хороший способ добавлять иконки или символы, такие как стрелочка в конце каждой ссылки. Такой трюк не работает в Internet Explorer 7 и ниже.

    Шаг 4

    Ну и самое последнее, мы добавим в наш дизайн кое-какие втили для ещё большей красоты.

    В этих стилях мы устанавливаем закруглённые углы для элемента #centered. В CSS3, за это будет отвечать свойство border-radius. Это пока что не реализовано некоторыми броузерами, разве только использовать приставки -moz и -webkit для Mozilla Firefox и Safari/Webkit.

    Совместимость

    Как вы уже наверное предположили, основной источник проблем совместимости — Internet Explorer:

    • Элементу #floater обязательно надо установить ширину
    • В IE 6 лишние отступы вокруг меню

    Задача верстки, которая очень часто встречается – это выравнивание текста по вертикали в блоке div.

    Если с выравниванием текста по горизонтали, проблем обычно не возникает (используем свойство text-align:center и все будет хорошо), то с выравниванием по вертикали все немного сложнее.

    Есть одной свойство в CSS, которое называется vertical-align. Казалось бы, используя его можно решить все проблемы. Но не тут-то было.

    Нужно учитывать такой момент, что vertical-align можно применять только для выравнивания содержимого ячеек таблиц или для строчных элементов, для выравнивания их друг относительно друга в пределах одной строки.

    Для блочных элементов свойство vertical-align не работает.

    Есть два способа, как можно выйти из этой ситуации:

    Для тех, кто предпочитает все смотреть в видео:

    Для тех, кто любит текст, читайте ниже способ решения этой проблемы.

    Способ А. Как одно из решений, можно разместить текст не в элементе div, а в ячейке таблицы.

    Способ Б. Использовать своство display:table-cell;

    Все было бы хорошо, но старые браузеры не поддерживают display:table-cell, особенно IE с версии 7 и ниже.

    Можно, конечно, наплевать на эти старые браузеры и выравнивать текст так. Доля браузера IE7 на моем сайте, по статистике за 1 квартал 2013 года, следующая:

    Это меньше чем пол процента от всех посещений. В будущем этот процент будет еще более снижаться.

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

    Кроме того, есть ситуации, в которых можно обойтись вообще без использования display:table-cell.

    Ситуация 1. Выравнивание одной строки текста.

    Рассмотрим простой пример.

    Строка текста располагается по верхнему краю. Т.к. у нас всего одна строка текста, то для выравнивания можно воспользоваться самым простым способом: это добавление свойства line-height со значением равным высоте элемента div, в котором текст находится.

    Этот способ хорошо работает, когда у вас всего одна строка с текстом.

    Ситуация 2. Если известны точные значения ширины и высоты дочернего блока, где располагается сам текст.

    Этот вариант решения предусматривает использование свойства position:absolute для дочернего блока, абсолютного его позиционирования относительно родительского блока с position:relative.

    Зная ширину и высоту блока, можно взять половину этой величины и задать ее отрицательными значениями для свойств margin-left и margin-top.

    Как видите, такая простая задача, как выравнивание текста по центру, оказалась не такой простой на практике.

    Выравнивание элементов на веб-странице может оказаться не такой легкой задачей, особенно если речь идет об выравнивание текста по вертикали. Этот вопрос часто встречается на форумах, и особую трудность решение этого вопроса вызывает у начинающих пользователей. Но на самом деле здесь сложного ничего нет. Все что нужно, это немного владеть знаниями каскадной таблицы стилей CSS. Так как это все делается за счет ее правил.

    Выравнивание текста по вертикали можно добиться по меньшей мере пятью разными способами. Каждый из них по-своему хорош, учитывая обстоятельства и детали ситуации. Мы рассмотрим несколько примеров, а вы исходя из условий, подберете себе подходящее ращение.

    Первый метод с line-height

    Первый способ очень банальный и с большим недостатком, что ограничивает его в применении. Но все же, как ни крути, он может пригодиться и даже принести нужный результат. Это будет условным выравниванием, так как, по сути, мы задаем высоту строки в соответствии с высотой блока, использовав свойство line-height .

    первый пример. демо №1

    Точно таким же способом возможно реализовать картинку по центру вертикали, но добавив одно новое свойство vertical-align: middle; .

    Выравнивание со свойством position

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

    Поэтому нужно задать отрицательное значение к внешним отступам. Размер отступа сверху должен соответствовать половине высоты внутреннего блока, а отступ слева — на половину ширины. Таким образом, получим абсолютный центр.

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

    Выравнивание со свойством table

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

    применять не будет, а воспользуемся свойствами CSS, такими как display: table; , display: table-cell; . В старых версиях IE данный способ не работает, да и не нужно. Ими, вообще, еще кто-то пользуется?

    Выравнивание со свойством flex

    Это идет уже более специфичный вариант со свойствами, которые не так часто встречаются в верстке сайта. Но, тем не менее они в редких случаях очень полезны.

    Выравнивание со свойством transform

    И последний в нашем списке, но далеко не последний в использовании способ. Сдвигаем по вертикали элемент на желаемое значение, в данном случае на -50%.

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

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

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

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

      .мой элемент {
      поле: 0 авто;
    }  

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

    В следующем примере относительный красный квадрат имеет ширину , установленную на 40% доступного пространства.Верхний левый угол абсолютно позиционированного синего квадрата расположен на 30 пикселей в ширину и на 10 пикселей вниз:

    .
      .внешний {
      положение: родственник;
      ширина: 40%;
      высота: 120 пикселей;
      поле: 20px авто;
      граница: 2px сплошная #c00;
    }
    
    .внутренний {
      положение: абсолютное;
      ширина: 100 пикселей;
      высота: 100 пикселей;
      верх: 10 пикселей;
      слева: 30 пикселей;
      цвет фона: #00c;
    }  

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

    .
      .внешний {
      положение: родственник;
      ширина: 40%;
      высота: 120 пикселей;
      поле: 20px авто;
      граница: 2px сплошная #c00;
    }
    
    .внутренний {
      положение: абсолютное;
      высота: 100 пикселей;
      слева: 30 пикселей;
      верх: 10 пикселей;
      справа: 30 пикселей;
      цвет фона: #00c;
    }  

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

    .
    1. Сначала используем осталось: 50% . В отличие от положения фонового изображения, это переместит левый край синего прямоугольника в центр.
    2. Так как наш блок находится слишком далеко вправо, мы используем отрицательное левое поле, равное половине ширины блока. В нашем примере мы должны установить margin-left на -50px , чтобы переместить блок обратно в нужное место.

    Вот код:

      .внешний {
      положение: родственник;
      ширина: 40%;
      высота: 120 пикселей;
      поле: 20px авто;
      граница: 2px сплошная #c00;
    }
    
    .внутренний {
      положение: абсолютное;
      ширина: 100 пикселей;
      высота: 100 пикселей;
      верх: 10 пикселей;
      слева: 50%;
      поле слева: -50px;
      цвет фона: #00c;
    }  

    Синее поле останется в центре независимо от того, как изменится ширина внешнего элемента.

    Если вам понравилось читать этот пост, вам понравится SitePoint Premium; место для изучения новых навыков и методов от опытных разработчиков. Участники получают мгновенный доступ ко всем электронным книгам и интерактивным онлайн-курсам SitePoint, таким как CSS Master.

    Комментарии к статье закрыты. У вас есть вопрос о CSS? Почему бы не спросить об этом на нашем форуме?

    CSS: центрирование объектов

    CSS: центрирование объектов

    См. также указатель всех наконечников.

    Центрирование предметов

    Обычной задачей CSS является центрирование текста или изображений. По факту, Существует три вида центрирования:

    В последних реализациях CSS вы также можете использовать функции из уровень 3, который позволяет центрировать абсолютно позиционированные элементы:

    Центрирующие строки текста

    Самый распространенный и (поэтому) самый простой тип центрирования что строк текста в абзаце или в заголовке. CSS имеет свойство text-align для этого:

    P {выравнивание текста: по центру}
    h3 {выравнивание текста: по центру} 

    отрисовывает каждую строку буквой P или h3 с центром между ее поля, например:

    Все строки в этом абзаце по центру между полями абзаца, благодаря значению «центр» свойства CSS «выравнивание текста».

    Центрирование блока или изображения

    Иногда центрировать нужно не текст, а блок целиком. Или, говоря по-другому: мы хотим левого и правое поле должно быть равным. Способ сделать это — установить поля на «авто». Обычно используется с блоком фиксированной ширины, потому что, если сам блок гибкий, он просто возьмет на себя все доступная ширина. Вот пример:

    P.блоктекст {
        поле слева: авто;
        поле справа: авто;
        ширина: 8em
    }
    ...
    

    Это скорее...

    Этот довольно узкий блок текста выравнивается по центру. Обратите внимание, что линии внутри блока не центрированы (они по левому краю), в отличие от предыдущего примера.

    Это также способ центрирования изображения: сделать его блоком свой собственный и примените к нему свойства поля. Например:

    IMG.displayed {
        дисплей: блок;
        поле слева: авто;
        поле справа: авто }
    ...
    ... 

    Следующее изображение центрировано:

    Центрирование по вертикали

    CSS уровня 2 не имеет свойства для центрирования элементов. вертикально.Скорее всего, он будет на уровне CSS 3 (см. ниже). Но даже в CSS2 вы можете центрировать блоки по вертикали, комбинируя несколько свойств. Хитрость заключается в том, чтобы указать, что внешний блок форматироваться как ячейка таблицы, потому что содержимое таблицы ячейка может центрироваться по вертикали.

    В приведенном ниже примере абзац центрируется внутри блока с определенной заданной высоты. В отдельном примере показан абзац, центрированный по вертикали в браузере. окно, потому что оно находится внутри блока, который абсолютно позиционирован и высотой с окно.

    DIV.контейнер {
        минимальная высота: 10em;
        отображение: таблица-ячейка;
        вертикальное выравнивание: посередине}
    ...
    <ДЕЛ>
      

    Этот небольшой абзац...

    Этот небольшой абзац центрирован по вертикали.

    Центрирование по вертикали на уровне CSS 3

    CSS уровня 3 предлагает другие возможности. В это время (2014 г.) хороший способ центрировать блоки по вертикали без использования absolute позиционирование (которое может привести к перекрытию текста) по-прежнему обсуждение.Но если вы знаете, что перекрывающийся текст не будет проблема в вашем документе, вы можете использовать свойство «преобразование», чтобы центрировать абсолютно позиционированный элемент. Например:

    Этот абзац центрирован по вертикали.

    Для документа, который выглядит так:

    Этот абзац…

    таблица стилей выглядит так:

    div.container3 {
       высота: 10см;
         позиция: относительная  } /* 1 */
    разд.контейнер3 п {
       маржа: 0;
         позиция: абсолютная;  /* 2 */
         верх: 50%;  /* 3 */
         преобразование: перевод (0, -50%)  } /* 4 */ 

    Основные правила:

    1. Сделать контейнер относительно расположенным, который объявляет его контейнером для абсолютно позиционированных элементов.
    2. Сделать сам элемент абсолютно позиционированным.
    3. Поместите его на полпути вниз контейнера с «верхом: 50%».(Примечание что 50% здесь означает 50% высоты контейнера.)
    4. Используйте перевод, чтобы переместить элемент вверх на половину его собственного высота. («50%» в «translate(0, -50%)» относится к высоте сам элемент)

    В последнее время (примерно с 2015 года) стала использоваться и другая техника доступны в нескольких реализациях CSS. Он основан на новом Ключевое слово «flex» для свойства «display». Это ключевое слово означает для использования в графических пользовательских интерфейсах (GUI), но вас ничто не останавливает от использования его в документе, если документ имеет правильная структура.

    Этот абзац центрирован по вертикали.

    таблица стилей выглядит так:

    div.container5 {
      высота: 10см;
        дисплей: гибкий; 
        элементы выравнивания: по центру  }
    div. container5 р {
      поле: 0 } 

    Центрирование по вертикали и горизонтали на уровне CSS 3

    Мы можем расширить оба метода для горизонтального центрирования и вертикально одновременно.

    Побочным эффектом абсолютного позиционирования абзаца является что тогда он будет настолько широким, насколько это необходимо (если только мы не дадим ему явная ширина, конечно).В приведенном ниже примере это именно то, что мы хотим: мы центрируем абзац всего одним словом («По центру!»), поэтому ширина абзаца должна быть точно ширина этого слова.

    Желтый фон показывает, что абзац на самом деле только настолько широк, как его содержание. Мы предполагаем ту же наценку, что и до:

    По центру!

    Таблица стилей аналогична предыдущему примеру в отношении к вертикальному центрированию.Но теперь мы перемещаем элемент на полпути также по контейнеру, с «слева: 50%», и в то же время время переместите его влево на половину своей ширины в «перевести» трансформация:

    div. container4 {
        высота: 10см;
        положение: относительное }
    div.container4 р {
        маржа: 0;
        фон: желтый;
        положение: абсолютное;
        верх: 50%;
          осталось: 50%; 
          поле справа: -50%; 
        преобразование: перевести(-50%, -50%)} 

    Следующий пример ниже поясняет, почему значение «margin-right: -50%» равно нужный.

    Когда средство форматирования CSS поддерживает ‘flex’, это еще проще:

    с этой таблицей стилей:

    div.container6 {
      высота: 10см;
      дисплей: гибкий;
      выравнивание элементов: по центру;
        выравнивание по ширине: по центру  }
    div.container6 р {
      поле: 0 } 

    , т. е. единственное добавление — это «выравнивание содержимого: по центру». Просто как и align-items, определяет вертикальное выравнивание содержимое контейнера, ‘justify-content’ определяет горизонтальное выравнивание.(На самом деле это немного сложнее, так как их имена предложить, но в простом случае это так. ) Побочный эффект ‘flex’ заключается в том, что дочерний элемент, в данном случае P, автоматически делается как можно меньше.

    Центрирование области просмотра на уровне CSS 3

    Контейнером по умолчанию для абсолютно позиционированных элементов является окно просмотра. (В случае браузера это означает окно браузера). Так центрировать элемент в окне просмотра очень просто.Вот полный пример. (В этом примере используется синтаксис HTML5.)

    
      <стиль>
        тело {
            фон: белый }
        раздел {
            фон: черный;
            белый цвет;
            радиус границы: 1em;
            набивка: 1em;
              позиция: абсолютная; 
              верх: 50%; 
              осталось: 50%; 
              поле справа: -50%; 
              преобразование: перевод (-50%, -50%)  }
      
      <раздел>
         

    Хорошо по центру

    Этот текстовый блок центрирован по вертикали.

    По горизонтали тоже, если окно достаточно широкое.

    Вы можете увидеть результат в отдельном документ.

    Поле справа: -50% необходимо для компенсации поля слева: 50%». Правило «слева» уменьшает доступную ширину элемента. на 50%. Таким образом, рендерер попытается создать линии, которые больше не чем половина ширины контейнера. Говоря, что право margin элемента дальше вправо на ту же величину, максимальная длина строки снова равна ширине контейнера.

    Попробуйте изменить размер окна: вы увидите, что каждое предложение находится на одном линии, когда окно достаточно широкое. Только когда окно слишком узкое для всего предложения будет ли предложение разбито на части несколько строк. Когда вы удаляете «поле справа: -50%» и изменяете размер окно снова, вы увидите, что предложения будут сломаны уже тогда, когда окно еще в два раза шире текстовых строк.

    (Использование «translate» для центрирования в окне просмотра было первым предложенный «Чарли» в ответе на переполнение стека. )

    Как центрировать абсолютный Div на странице

    Зедрик Майерс | Опубликовано 30 июля 2015 г. | Категории: Веб-разработка

    Нужно центрировать абсолютный div на странице?

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

      . contentBlock {
    
    
    
    ширина: {определить ширину}
    
    положение: абсолютное;
    
    слева: 0;
    
    справа: 0;
    
    поле слева: авто;
    
    поле справа: авто;
    
    
    
    }  

    Последние сообщения

    Как голос и тон бренда укрепляют связи с вашими учениками Посмотреть эту историю Устали от хаоса с открытым исходным кодом? Найдите баланс с помощью собственной CMS Посмотреть эту историю

    position — CSS: каскадные таблицы стилей

    Свойство CSS position задает положение элемента в документе. Свойства сверху , справа , снизу и слева определяют окончательное расположение позиционируемых элементов.

      положение: статическое;
    положение: родственник;
    положение: абсолютное;
    положение: фиксированное;
    положение: липкое;
    
    
    положение: наследовать;
    положение: исходное;
    положение: возврат;
    положение: не установлено;
      

    Значения

    статические

    Элемент расположен в соответствии с обычным потоком документа.Свойства top , right , bottom , left и z-index имеют никакого эффекта . Это значение по умолчанию.

    родственник

    Элемент позиционируется в соответствии с нормальным потоком документа, а затем смещается относительно самого себя на основе значений top , right , bottom и left . Смещение не влияет на положение любых других элементов; таким образом, пространство, отведенное для элемента в макете страницы, такое же, как если бы position было static .

    Это значение создает новый контекст стека, когда значение z-index не равно auto . Его влияние на элементы table-*-group , table-row , table-column , table-cell и table-caption не определено.

    абсолютный

    Элемент удаляется из обычного потока документов, и в макете страницы для него не создается места. Он позиционируется относительно своего ближайшего предка, если таковой имеется; в противном случае он размещается относительно исходного содержащего блока.Его конечное положение определяется значениями сверху , справа , снизу и слева .

    Это значение создает новый контекст стека, когда значение z-index не равно auto . Поля абсолютно позиционированных блоков не сливаются с другими полями.

    фиксированный

    Элемент удаляется из обычного потока документов, и в макете страницы для него не создается места.Он позиционируется относительно начального содержащего блока, установленного окном просмотра, за исключением случаев, когда один из его предков имеет свойство transform , перспектива или filter , установленное на значение, отличное от none (см. спецификацию CSS Transforms). , и в этом случае этот предок ведет себя как содержащий блок. (Обратите внимание, что существуют несоответствия браузера с перспективой и фильтром , способствующими формированию сдерживающего блока.) Его конечное положение определяется значениями top , right , bottom и left .

    Это значение всегда создает новый контекст стека. В печатных документах элемент размещается в одной и той же позиции на каждой странице .

    липкий

    Элемент позиционируется в соответствии с нормальным потоком документа, а затем смещается относительно своего ближайшего предка прокрутки и содержащего блока (ближайший предок на уровне блока), включая элементы, связанные с таблицей, на основе значений top , справа , снизу и слева .Смещение не влияет на положение любых других элементов.

    Это значение всегда создает новый контекст стека. Обратите внимание, что липкий элемент «прилипает» к своему ближайшему предку, который имеет «механизм прокрутки» (создается, когда overflow is hidden , scroll , auto или overlay ), даже если этот предок не t ближайший реально прокручивающийся предок. Это эффективно подавляет любое «липкое» поведение (см. проблему GitHub в W3C CSSWG).

    Типы позиционирования

    • Позиционируемый элемент — это элемент, вычисленное значение position которого равно относительному , абсолютному , фиксированному или

      1 липкому. (Другими словами, это что угодно, кроме static .)

    • Относительно позиционированный элемент — это элемент, у которого вычисленное значение position равно относительно . Свойства сверху и снизу задают вертикальное смещение от нормального положения; свойства слева и справа задают смещение по горизонтали.
    • Абсолютно позиционированный элемент — это элемент, вычисленное значение position которого равно абсолютному или фиксированному . Свойства top , right , bottom и left задают смещения от краев содержащего элемент блока. (Содержащий блок является предком, относительно которого позиционируется элемент.) Если у элемента есть поля, они добавляются к смещению. Элемент устанавливает новый контекст форматирования блока (BFC) для своего содержимого.
    • Элемент с фиксированным позиционированием — это элемент, у которого вычисленное значение position равно sticky . Он считается относительно расположенным до тех пор, пока содержащий его блок не превысит заданный порог (например, установка top на значение, отличное от auto) в корне потока (или в контейнере, в котором он прокручивается), после чего он рассматривается как «застрявший» до тех пор, пока встречается с противоположным краем содержащего его блока.

    В большинстве случаев абсолютно позиционированные элементы, у которых высота и ширина установлены на авто , имеют размер, соответствующий их содержимому.Однако незаменяемые, абсолютно позиционированные элементы можно заполнить доступным вертикальным пространством, указав как top , так и bottom и оставив height неуказанным (то есть auto ). Их также можно заставить заполнить доступное горизонтальное пространство, указав как слева , так и справа и оставив ширина как авто .

    За исключением только что описанного случая (абсолютно позиционированные элементы, заполняющие доступное пространство):

    • Если указаны оба верхнее и нижнее (технически, не авто ), верхнее побеждает.
    • Если указаны оба левый и правый , левый выигрывает, когда направление равно ltr (английский, горизонтальный японский и т. д.) арабский, иврит и др.).

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

    Производительность и доступность

    Элементы прокрутки, содержащие фиксированное или закрепленное содержимое, могут вызвать проблемы с производительностью и доступностью. Когда пользователь прокручивает страницу, браузер должен перерисовывать прикрепленный или фиксированный контент в новом месте. В зависимости от содержимого, которое необходимо перерисовать, производительности браузера и скорости обработки устройства браузер может быть не в состоянии управлять перерисовкой со скоростью 60 кадров в секунду, что вызывает проблемы с доступностью для людей с чувствительностью и дерганье для всех. Одним из решений является добавление will-change: transform к позиционированным элементам для визуализации элемента в его собственном слое, что повышает скорость перерисовки и, следовательно, повышает производительность и доступность.

     статический | родственник | абсолютный | липкий | фиксированный 

    Относительное позиционирование

    Относительно расположенные элементы смещаются на заданную величину от их нормального положения в документе, но смещение не влияет на другие элементы. В приведенном ниже примере обратите внимание, как другие элементы размещены так, как если бы «Два» занимали место на своем обычном месте.

    HTML
      
    Один
    Два
    Три
    Четыре
    УСБ
      * {
      box-sizing: граница-коробка;
    }
    
    .коробка {
      отображение: встроенный блок;
      ширина: 100 пикселей;
      высота: 100 пикселей;
      фон: красный;
      белый цвет;
    }
    
    #два {
      положение: родственник;
      верх: 20 пикселей;
      слева: 20 пикселей;
      фон: синий;
    }
      

    Абсолютное позиционирование

    Элементы с относительным расположением остаются в обычном потоке документа. Напротив, абсолютно позиционированный элемент удаляется из потока; таким образом, другие элементы позиционируются так, как будто его не существует. Абсолютно позиционированный элемент позиционируется относительно своего ближайшего позиционированного предка (т.е., ближайший предок, не являющийся статическим ). Если позиционированный предок не существует, он позиционируется относительно ICB (начальный содержащий блок — см. также определение W3C), который является содержащим блоком корневого элемента документа.

    HTML
       

    Абсолютное позиционирование

    Я базовый элемент блочного уровня. Мои соседние элементы уровня блока располагаются на новых строках ниже меня.

    По умолчанию мы занимаем 100 % ширины родительского элемента, а высота соответствует дочернему содержимому.Наша общая ширина и высота — это содержимое + отступы + ширина/высота границы.

    Нас разделяют поля. Из-за схлопывания полей мы разделены шириной одного поля, а не обоих.

    строчные элементы, такие как этот и этот, располагаются на одной строке друг с другом и соседними текстовыми узлами, если на одной строке есть место. Выходящие за пределы строчные элементы переходят на новую строку, если это возможно — как этот, содержащий текст, или просто переходят на новую строку, если нет, как на этом изображении:

    УСБ
      * {
      box-sizing: граница-коробка;
    }
    
    тело {
      ширина: 500 пикселей;
      поле: 0 авто;
    }
    
    п {
      фон: цвет морской волны;
      граница: 3 пикселя сплошного синего цвета;
      отступ: 10 пикселей;
      поле: 10 пикселей;
    }
    
    охватывать {
      фон: красный;
      граница: 1px сплошной черный;
    }
    
    . positioned {
      положение: абсолютное;
      фон: желтый;
      верх: 30 пикселей;
      слева: 30 пикселей;
    }
      
    Результат

    Фиксированное позиционирование

    Фиксированное позиционирование аналогично абсолютному позиционированию, за исключением того, что содержащий блок элемента является начальным содержащим блоком, установленным окном просмотра , если только какой-либо предок не имеет преобразования , перспективы или filter установлено значение, отличное от none (см. спецификацию CSS Transforms), что затем приводит к тому, что этот предок занимает место элементов, содержащих блок.Это можно использовать для создания «плавающего» элемента, который остается в одном и том же положении независимо от прокрутки. В приведенном ниже примере поле «Один» зафиксировано на расстоянии 80 пикселей от верхнего края страницы и 10 пикселей от левого края. Даже после прокрутки он остается на том же месте относительно области просмотра.

    HTML
      <дел>
      

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam congue tortor eget pulvinar lobortis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam ac dolor augue.Pellentesque mi mi, laoreet et dolor sit amet, ultrices varius risus. Nam vitae iaculis elit. Aliquam mollis interdum libero. Эгестас плаценты Sed sodales. Vestibulum ut arcu aliquam purus viverra dictum vel sit amet mi. Duis nisl mauris, aliquam sit amet luctus eget, dapibus in enim. Sed velit augue, pretium a sem aliquam, congue porttitor tortor. Sed tempor nisl a lorem consequat, id maximus erat aliquet. Sed sagittis porta libero sed condimentum. Aliquam finibus lectus nec ante congue rutrum.Curabitur quam quam, accumsan id ultrices ultrices, tempor et tellus.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam congue tortor eget pulvinar lobortis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam ac dolor augue. Pellentesque mi mi, laoreet et dolor sit amet, ultrices varius risus. Nam vitae iaculis elit. Aliquam mollis interdum libero. Эгестас плаценты Sed sodales. Vestibulum ut arcu aliquam purus viverra dictum vel sit amet mi.Duis nisl mauris, aliquam sit amet luctus eget, dapibus in enim. Sed velit augue, pretium a sem aliquam, congue porttitor tortor. Sed tempor nisl a lorem consequat, id maximus erat aliquet. Sed sagittis porta libero sed condimentum. Aliquam finibus lectus nec ante congue rutrum. Curabitur quam quam, accumsan id ultrices ultrices, tempor et tellus.

    Один
    УСБ
      * {
      box-sizing: граница-коробка;
    }
    
    .коробка {
      ширина: 100 пикселей;
      высота: 100 пикселей;
      фон: красный;
      белый цвет;
    }
    
    #один {
      положение: фиксированное;
      верх: 80 пикселей;
      слева: 10 пикселей;
      фон: синий;
    }
    
    .внешний {
      ширина: 500 пикселей;
      высота: 300 пикселей;
      переполнение: прокрутка;
      отступ слева: 150 пикселей;
    }
      
    Результат

    Прилипающее позиционирование

    Прилипающее позиционирование можно рассматривать как гибрид относительного и фиксированного позиционирования. Закрепленный элемент рассматривается как относительно позиционированный до тех пор, пока он не пересечет указанный порог, после чего он считается фиксированным, пока не достигнет границы своего родителя. Например…

      #one { position: sticky; верх: 10 пикселей; }
      

    … будет позиционировать элемент с идентификатором на относительно до тех пор, пока окно просмотра не будет прокручено таким образом, что элемент будет менее чем на 10 пикселей сверху. За пределами этого порога элемент будет зафиксирован на 10 пикселей сверху.

    Прикрепляемое позиционирование обычно используется для заголовков в алфавитном списке. Заголовок «B» будет отображаться сразу под элементами, начинающимися с «A», пока они не будут прокручены за пределы экрана. Вместо того, чтобы перемещаться за пределы экрана с остальным содержимым, заголовок «B» будет оставаться фиксированным в верхней части области просмотра до тех пор, пока все элементы «B» не будут прокручены за пределы экрана, после чего он будет закрыт буквой «C». заголовок и так далее.

    Необходимо указать пороговое значение хотя бы с одним из top , right , bottom или left , чтобы фиксированное позиционирование работало должным образом. В противном случае оно будет неотличимо от относительного позиционирования.

    HTML
      <дл>
      <дел>
        
    А
    Эндрю В.К.
    Аппарат
    Аркадный огонь
    На въезде
    Азиз Ансари
    <дел>
    С
    Chromeo
    Общие
    Конвергенция
    Хрустальные замки
    Курсив
    <дел>
    Е
    Взрывы в небе
    <дел>
    Т
    Тед Лео и amp; Фармацевты
    Т-боль
    Трижды
    Телевидение по радио
    Два галанта
    УСБ
      * {
      box-sizing: граница-коробка;
    }
    
    дл > раздел {
      фон: #FFF;
      отступ: 24px 0 0 0;
    }
    
    дт {
      фон: #B8C1C8;
      нижняя граница: 1px сплошная #989EA4;
      верхняя граница: 1px сплошная #717D85;
      цвет: #FFF;
      шрифт: жирный 18px/21px Helvetica, Arial, без засечек;
      маржа: 0;
      отступ: 2px 0 0 12px;
      позиция: -webkit-липкая;
      положение: липкое;
      сверху: -1px;
    }
    
    дд {
      шрифт: жирный 20px/45px Helvetica, Arial, без засечек;
      маржа: 0;
      отступ: 0 0 0 12 пикселей;
      пробел: nowrap;
    }
    
    дд + дд {
      верхняя граница: 1px сплошная #CCC;
    }
      
    Результат

    Таблицы BCD загружаются только в браузере

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

    Ференц Алмаши • 23 ноября 2020 г. • 📖 2 мин чтения

    Использовать преобразование : перевести с отрицательными значениями сверху и слева в мертвую точку абсолютно позиционированного элемента в CSS:

      .центр {
        положение: абсолютное;
        верх: 50%;
        слева: 50%;
        преобразование: перевести (-50%, -50%);
    }  
    center.css

    Скопировано в буфер обмена! Копировать

    Это переместит элемент -50% вверх, а также -50% влево. По умолчанию точки привязки устанавливаются в верхнем левом углу элемента. Для абсолютного позиционирования элементов в мертвой точке вам нужно переместить их назад на -50% по обеим осям. Представьте, что это установка точки привязки к центру.

    Обратите внимание, что вы должны использовать отрицательные значения сверху и слева .Для разных значений правило translate должно выглядеть примерно так:

      .center {
        положение: абсолютное;
        верх: 25%;
        слева: 30%;
        преобразование: перевод (-25%, -30%);
    }  
    center. css

    Скопировано в буфер обмена!Копировать

    Первый параметр функции translate используется для оси x, а второй — для оси y.


    Вы не используете абсолютное позиционирование?

    Вы также можете использовать flexbox для центрирования элемента всего тремя строками:

      .центр {
        дисплей: гибкий;
        выравнивание содержимого: по центру;
        выравнивание элементов: по центру;
    }  
    center.css

    Скопировано в буфер обмена! Копировать

    • justify-content  центрирует его по горизонтальной оси
    • align-items  центрирует его по вертикальной оси
    • 8 -высота
      до высоты контейнера:

        .center {
          высота: 250 пикселей;
          высота строки: 250 пикселей; /* Устанавливаем высоту строки равной высоте */
      }  
      центр.css

      Скопировано в буфер обмена!Копировать

      Если вы хотите увидеть больше веб-подсказок, следуйте за @flowforfrank

      10 лучших практик для быстрого улучшения вашего CSS

      Создание масштабируемых и управляемых таблиц стилей
      дизайн. Вот 10 советов по CSS :  лучшие практики, которые помогут вам извлечь максимум из ваших стилей.Подробнее

      Ресурсы:

      📚 Получите доступ к эксклюзивному контенту

      Хотите получить доступ к эксклюзивному контенту? Поддержка веб-подсказок чтобы получить доступ к советам, контрольным спискам, шпаргалкам, и многое другое.☕

      Получить доступ

      Курсы

      Полный курс JavaScript 2021: от нуля до эксперта!

      Современный курс JavaScript для всех! Освойте JavaScript с помощью проектов, задач и теории. Много курсов в одном!
      Йонас Шмедтманн

      React — полное руководство (включая хуки, React Router, Redux)

      Погрузитесь и изучите React.js с нуля! Изучите Reactjs, хуки, Redux, маршрутизацию React, анимацию, Next.js и многое другое!
      Максимилиан Шварцмюллер

      Полноценный веб-разработчик в 2021 году: от нуля до мастерства

      Научитесь программировать и станьте веб-разработчиком в 2021 году с помощью HTML, CSS, Javascript, React, Node.
      js, машинное обучение и многое другое! Андрей Негойе

      Подробнее о

      Position Absolute Center Horizontal Div Elements

      Поскольку многие люди не знают, как расположить горизонтальный div с абсолютным центром или любой другой HTML-элемент, такой как списки или изображения, без необходимости использования какого-либо причудливого кода Javascript или jQuery, я покажу вам как это сделать только с помощью CSS.

      Структура HTML

      Чтобы расположить блок div горизонтально в центре другого блока с помощью CSS, вы должны знать, как построить свой HTML-код (сколько контейнеров вам нужно и как использовать каждый из них).Вот как должна выглядеть окончательная работа:

      В моем примере я буду использовать основной контейнер, внутри которого будет изображение и еще один

      , который будет заголовком изображения (название и описание). Вы можете прочитать больше о свойстве позиции CSS здесь.

       <дел>
      Некоторые изображения
      
      <дел>
      <дел>
       

      Центральные элементы Div с абсолютной позицией

      Небольшое описание вашего изображения внутри слайдера

    Изображение должно быть нормальным, а контейнер заголовка должен располагаться в абсолютном центре над нашим изображением. Я добавлю прозрачный фон, чтобы вам было лучше видно. Этот контейнер будет центрирован по горизонтали с использованием фиксированной ширины (также может быть адаптирован для работы на адаптивных мобильных устройствах).

    Видеоруководство

    Вы можете просмотреть приведенное ниже видеоруководство, чтобы проверить, как код работает вживую. Или вы можете игнорировать видео и читать под ним.

    CSS для горизонтального позиционирования элементов с абсолютным центром

    Для позиционирования элемента с абсолютным центром по горизонтали вам потребуется контейнер с фиксированной шириной, свойствам left и right должны быть присвоены значения 0 (ноль), а полям (правое и левое) ) должен быть установлен на автоматический.

    Не забудьте добавить относительную позицию в основной контейнер. Вот как должен выглядеть ваш CSS:

     .mainContainer {
    положение: родственник;
    }
    . absoluteContainer {
    положение: абсолютное;
    слева: 0;
    справа: 0;
    Топ 10%;
    поле слева: авто;
     поле справа: авто;
    максимальная ширина: 740 пикселей;
    } 

    Чтобы объяснить приведенный выше код,

    с абсолютной позицией будет соблюдать правило ширины или 740px или любую другую ширину, которую вы хотите, поля будут автоматически выравнивать элемент по центру, но это не будет работать, пока вы не имеют левые и правые свойства равные нулю.

    Заключение

    Этот трюк отлично работает даже на мобильных телефонах, если вы используете правильный CSS. Вы можете использовать его для позиционирования html-элементов по абсолютному центру по горизонтали внутри контейнера полной ширины (например, слайдер с подписями для каждого изображения) без каких-либо дополнительных скриптов, только чистый CSS. Видео урок скоро будет.

    Live Demo

    Загрузка файлов

    Как центрировать что-либо с помощью CSS

    Недавно мы углубились в самые основные концепции компоновки CSS и изучили различия между абсолютным и относительным позиционированием. Мы собираемся продолжить это с другим разговором о макете CSS, на этот раз основанным на фундаментальном вопросе, который задает почти каждый новый разработчик: как вы центрируете что-то?

    Существует множество различных типов веб-элементов и ситуаций компоновки, каждая из которых требует уникального решения для центрирования (как по вертикали, так и по горизонтали). Сегодня мы рассмотрим кучу этих сценариев, чтобы вы могли понять, как они работают, и уйти с уверенностью, чтобы сосредоточиться на чем угодно!

    Для кого это?

    В последнее время я получил много отзывов от дизайнеров, которые борются с основными методами и концепциями компоновки в CSS.Общее мнение многих новичков в CSS заключается в том, что они просто «возятся» с кодом, пока все, наконец, не заработает.

    Побывав там несколько раз, я знаю, что это чрезвычайно разочаровывающий период вашего профессионального роста. Знать, что ответ прямо перед вами, и не иметь возможности понять его, мучительно и отнимает много времени.

    Если это звучит знакомо, надеюсь, я смогу облегчить вам этот период, дав несколько полезных и практических советов о том, как справиться с некоторыми распространенными сценариями компоновки.Если вы ниндзя CSS, который может кодировать веб-сайт с завязанными глазами, эта статья, вероятно, не для вас. Если вы дизайнер, который просто хочет лучше понять, как взять то, что находится в вашем файле Photoshop, и превратить его в CSS, вы попали по адресу. Давайте начнем.

    Горизонтальное центрирование элемента

    Первый сценарий, который мы рассмотрим, является одним из самых распространенных: центрирование элемента по горизонтали в окне просмотра или окне браузера. Для начала давайте создадим простой div и придадим ему базовый стиль.

    Как видите, по умолчанию наш div появляется в верхнем левом углу области просмотра. Хитрость здесь в том, что нам нужно, чтобы div оставался в центре окна, независимо от размера окна в данный момент. Это означает, что мы не можем использовать абсолютное позиционирование, чтобы поместить его в определенную точку, потому что это не будет центрировано ни на каких других возможных размерах окна.

    Вместо этого нам нужно использовать значение «авто», которое можно применить к полям. Вот как это работает:

    Как видите, применение одной строки CSS переместило наш блок прямо в центр его родителя, которым в данном случае является тело.Для этого я использовал небольшое сокращение CSS. Если вам нужно напомнить, сокращение поля начинается сверху и движется по часовой стрелке.

    Вы можете сократить это еще больше, если у вас есть только два значения, которые вам нужно назначить. В этом случае первый слот будет применяться к верхнему и нижнему полям, а второй слот — к левому и правому полям. Вот еще один взгляд на наш центрированный div, на этот раз с полями, объявленными с использованием трех отдельных, но совершенно эквивалентных методов.

    Как видите, у нашего элемента отсутствуют верхнее и нижнее поля, но левое и правое поля установлены на auto , благодаря чему элемент идеально центрируется.

    Что нужно помнить

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

    Важно отметить, что хотя этот трюк будет работать с большинством блочных элементов, а не только с элементами div, он не поможет вам с вертикальным центрированием. В качестве примера давайте добавим абзац внутрь div, а затем попытаемся центрировать этот абзац в пространстве.

    div {

      высота: 400 пикселей;

      ширина: 400 пикселей;

      фон: #eee;

      поле: авто;

    }

     

    p {

      ширина: 60%;

      поле: авто;

      шрифт: 14px/1.5 Helvetica, без засечек;

    }

    Как видите, у меня установлены автоматические поля как для абзаца, так и для его родительского блока. Это центрировало все по горизонтали, но никак не повлияло на положение по вертикали.

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

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

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

    Здесь мы видим, что для абсолютно позиционированного элемента, содержащегося внутри относительно позиционированного элемента, нам нужно установить свойство left , подставив в эту формулу несколько чисел. Вот тестовый пример:

    .container {

      высота: 300 пикселей;

      ширина: 300 пикселей;

      фон: #eee;

      поле: 10 пикселей, авто;

      положение: относительное;

    }

     

    . поле {

      высота: 100 пикселей;

      ширина: 100 пикселей;

      фон: #222;

      позиция: абсолютная;

    }

    Посмотрим, сможем ли мы центрировать черный ящик по горизонтали. Используя нашу формулу, мы видим, что свойство left должно быть установлено на 100px.

    .container {

      высота: 300 пикселей;

      ширина: 300 пикселей;

      фон: #eee;

      поле: 10 пикселей, авто;

      положение: относительное;

    }

     

    .поле {

      высота: 100 пикселей;

      ширина: 100 пикселей;

      фон: #222;

      позиция: абсолютная;

      слева: 100 пикселей;

    }

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

    С гибкой шириной

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

    Для этого нам нужно использовать процентное соотношение левого значения . Очевидный ответ — использовать 50%, но на самом деле это не сработает, потому что вы не учитываете ширину элемента, который центрируете. Чтобы заставить его работать, нам нужно добавить отрицательное левое поле, равное половине ширины дочернего элемента.

    Используя эту логику, мы применяем левое поле минус пятьдесят пикселей вместе с левым значением 50%, и наш div снова точно центрируется по оси X.

    1

    2

    2

    3

    4

    4

    5

    6

    70002

    8

    10

    11

    12

    13

    12

    14

    15

    14

    15

    16

    17

    18

    . container {

      высота: 300 пикселей;

      ширина: 70 %;

      фон: #eee;

      поле: 10 пикселей, авто;

      положение: относительное;

    }

     

    .поле {

      высота: 100 пикселей;

      ширина: 100 пикселей;

      фон: #222;

      позиция: абсолютная;

      

      /*Метод центрирования 2*/

      margin: 0px 0 0 -50px;

      осталось: 50 %;

    }

    Важно отметить, что это также будет работать, если у нашего дочернего элемента будет плавная ширина. Мы используем те же шаги, что и раньше, и получаем что-то вроде следующего:

    1

    2

    2

    3

    4

    4

    5

    6

    70002

    8

    10

    11

    12

    13

    12

    14

    15

    14

    15

    16

    17

    18

    .контейнер {

      высота: 300 пикселей;

      ширина: 70 %;

      фон: #eee;

      поле: 10 пикселей, авто;

      положение: относительное;

    }

     

    . box {

      высота: 100 пикселей;

      ширина: 70 %;

      фон: #222;

      позиция: абсолютная;

      

      /*Метод центрирования 2*/

      margin: 0px 0 0 -35%; /* Половина от 70% /*

      left: 50%;

    }

    Мертвая точка элемента

    Теперь, когда у нас есть несколько простых и сложных методов центрирования, пришло время решить задачу идеального центрирования элемента как по горизонтали, так и по вертикали.

    К счастью, чтобы осуществить это, мы можем использовать тот же метод, который мы только что изучили, нам просто нужно учитывать рост. На этот раз мы также собираемся центрировать родительский и дочерний элементы как по вертикали, так и по горизонтали. Вот код для этого:

    1

    2

    2

    3

    4

    4

    5

    6

    70002

    8

    10

    11

    12

    13

    12

    14

    15

    14

    15

    16

    17

    18

    19

    20

    21

    22

    . контейнер {

      высота: 300 пикселей;

      ширина: 300 пикселей;

      фон: #eee;

      позиция: абсолютная;

      

      поле: -150 пикселей 0 0 -150 пикселей;

      осталось: 50 %;

      вверху: 50 %;

    }

     

    .box {

      высота: 100 пикселей;

      ширина: 100 пикселей;

      фон: #222;

      позиция: абсолютная;

      

      /*Метод центрирования 2*/

      margin: -50px 0 0 -50px;

      осталось: 50 %;

      вверху: 50 %;

    }

    Есть несколько вещей, на которые вам следует обратить внимание.Во-первых, на этот раз и родитель и дочерний элемент абсолютно позиционированы. Отсюда я использовал наш трюк с отрицательными полями со свойством left в контейнере div, затем сделал то же самое для box div.

    В результате наш контент полностью центрирован и останется таким, когда браузер изменит размер в любом направлении (даже по вертикали!). Нажмите на изображение ниже, чтобы поработать с живой демонстрацией.

    Центрирование текста

    В качестве следующего трюка я научу вас центрированию текста.Мы начнем с простого элемента h2 внутри контейнера div.

    Теперь, я уверен, вы уже знаете, как центрировать этот текст по горизонтали в пространстве. Обычно это одна из первых вещей, которую вы изучаете в CSS. Просто установите для свойства text-align значение center.

    .container {

      высота: 400 пикселей;

      ширина: 400 пикселей;

      фон: #eee;

      поле: 50 пикселей автоматически;

    }

     

    h2 {

      шрифт: 40px/1 Helvetica, без засечек;

      text-align: center;

    }

    Легко, верно? Но теперь предположим, что мы хотим также центрировать эту строку текста по вертикали.Если бы это был абзац, мы бы, вероятно, приняли во внимание описанные выше методы, но, поскольку это всего лишь одна строка, мы можем использовать изящный трюк.

    Все, что нам нужно сделать, это установить для свойства line-height высоту контейнера. Я сделал это ниже, используя сокращенный синтаксис шрифта.

    .container {

      высота: 200 пикселей; /*Установите это значение для высоты строки*/

      width: 400px;

      фон: #eee;

      поле: 150 пикселей автоматически;

    }

     

    h2 {

      шрифт: 40px/200px Helvetica, без засечек;

      text-align: center;

    }

    Предупреждение: Этот трюк работает только с одной строкой текста и является немного хакерским, поэтому может не подходить для всех ситуаций.

    Центрирование фонового изображения

    Последнее, чему мы собираемся научиться центрировать, — это фоновое изображение CSS. Чтобы начать с этого, мы создадим еще один контейнер div, но на этот раз мы оставим его пустым и добавим изображение с помощью CSS.

    .container {

      высота: 300 пикселей;

      ширина: 300 пикселей;

      поле: 150 пикселей автоматически;

      background: #eee url(http://lorempixum.com/100/100/nature/4) без повторов;

    }

    Как видите, место по умолчанию для изображения, если не задано повторение, — это верхний левый угол.Однако оказывается, что вы можете переместить его в один из девяти заранее назначенных слотов. Они показаны ниже:

    Мы выполняем это перемещение с помощью свойства background-position . Просто вызовите это свойство и установите любое из перечисленных выше значений.

    .container {

      высота: 300 пикселей;

      ширина: 300 пикселей;

      поле: 150 пикселей автоматически;

      фон: #eee url(http://lorempixum.com/100/100/nature/4) без повторов;

      background-position: сверху по центру;

    }

    В качестве альтернативы мы можем использовать для этого сокращенный синтаксис. Просто добавьте одно из значений в конце потока значений свойства background .

    .container {

      высота: 300 пикселей;

      ширина: 300 пикселей;

      поле: 150 пикселей автоматически;

      фон: #eee url(http://lorempixum.com/100/100/nature/4) центр неповторения;

    }

    Заключение

    Вот оно! Теперь вы должны быть полностью уверены в своей способности решать почти любую ситуацию с центрированием с помощью CSS, от точного центрирования блока div до вертикального центрирования строки текста внутри его контейнера и за его пределами.

    .

    alexxlab

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *