bottom — CSS | MDN
CSS свойство bottom
частично определяет вертикальную позицию позиционируемого элемента. Оно не влияет на непозиционируемые элементы (т.е. bottom
не применится, если задано position: static
).
The source for this interactive example is stored in a GitHub repository. If you’d like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Исходный код этого интерактивного примера хранится в GitHub репозитории. Если вы хотите внести свой вклад в проект интерактивных примеров, скопируйте https://github.com/mdn/interactive-examples и отправьте нам запрос на перенос.
Эффект свойства bottom
зависит от того, как позиционируется элемент (то есть от значения свойства position
):
- Когда задано
position: absolute
илиfixed
— свойствоbottom
- Когда задано
position: relative
— свойствоbottom
устанавливает расстояние, на которое нижний край элемента перемещается выше его обычной позиции. - Когда задано
position: sticky
— свойствоbottom
работает так, как приposition: relative
во время нахождения элемента внутри области просмотра, и какposition: fixed
вне области просмотра. - Когда задано
position: static
— свойствоbottom
не имеет никакого эффекта.
Когда заданы оба свойства top
и bottom
, а свойство
не задано, auto
или равно 100%
, то оба свойства top
и bottom
учитываются. Если свойство height
задано, то свойство top
будет учтено, а bottom
— проигнорировано.
bottom: 3px;
bottom: 2.4em;
bottom: 10%;
bottom: auto;
bottom: inherit;
bottom: initial;
bottom: unset;
Значения
<length>
- Отрицательная, нулевая или положительная величина, которая представляет:
- для абсолютно позиционируемых элементов &mdash расстояние до нижнего края содержащего их блока;
- для относительно позиционируемых элементов
<percentage>
- Процент от высоты родительского блока.
auto
- Ключевое слово, которое указывает, что:
- для абсолютно спозиционированных элементов — позиция элемента опирается на свойство
top
, покаheight: auto
обрабатывается как высота в зависимости от содержимого; если так же иbottom: auto
, то элемент располагается так же, как при статическом позиционировании. - для относительно спозиционированных элементов — расстояние элемента от его обычной позиции основано на свойстве
; если значениеtop
такжеauto
, элемент вообще не перемещается по вертикали.
- для абсолютно спозиционированных элементов — позиция элемента опирается на свойство
inherit
- Это ключевое слово указывает, что значение будет соответствовать вычисленному значению родительского блока (необязательно непосредственного родителя). Вычисляемое значение обрабатывается так же, как
<length>
,<percentage>
или ключевое словоauto
.
Формальный синтаксис
Этот пример демонстрирует разницу в поведении свойства bottom
, когда position
является absolute
и fixed
.
HTML
<h3>Эксперимент</h3> <p>Здесь<br>мы<br>набираем<br>побольше<br>высоты<br>для<br>вящей<br>наглядности<br>нашего<br>скромного,<br>но<br>очень<br>убедительного<br>эксперимента.<br>- Вот.</p> <div><p>Я фиксирован</p></div> <div><p>Я абсолютен</p></div>
CSS
p {
font-size: 30px;
line-height: 2em;
}
div {
width: 48%;
text-align: center;
background: rgba(55,55,55,.4);
border: 1px solid blue;
}
.absolute {
position: absolute;
bottom: 0;
left: 0;
}
.fixed {
position: fixed;
bottom: 0;
right: 0;
}
Результат
BCD tables only load in the browser
Выравнивание блока 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.
Подробнее здесь.
Vertical Centering in CSS
Yuhu’s Definitive Solution with Unknown Height
Though there is a CSS property vertical-align, it doesn’t work like attribute valign in HTML tables. CSS property vertical-align doesn’t seem to be able to solely solve this problem:
Definition of the problem
- there is an area (e.g. <div>) with known height in the page
- an internal object (typically long text in <div>) is inside the area
and
- I want to center the object vertically within the area
- without using HTML tables.
No general solution was known until September 2004. I have found it going home on Wilson street.
Display an example of the vertical centering in your browser.
Update 2015 — flex
As new browsers support display: flex, it is much easier to vertical center an item with CSS than before.
<style>
#containter {
height: 400px;
display: flex;
/* flex-direction: column;*/
align-items: center;
}
#content {}
</style>
<div>
<div>
any text<br>
any height<br>
any content, for example generated
from DB<br>
everything is vertically centered
</div>
</div>
See this example in browser.
Uncommenting justify-content: center or flex-direction: column you can get other types of centering (horizontal, both). For instance justify-content: center with align-items: center leads to centered content both vertically and horizontally.
The most important rule is display: flex. This relatively new value switches the display of the containter to a special mode, enabling its direct descendant to use and align in all the space of the containter (using special properties like align-items and others). The container has set some width, i.e. width: 400px just for purpose of this example. There is no need to style the content element, but it must be direct descendant of the container.
Support of display: flex is very good in modern browsers. Last not-supporting browsers are Internet Explorer 9 and 10 (version 10 has a special syntax of flex). If it is important for you to optimize for those and older browsers, you should read the rest of this page.
Original content from 2004 with updates:
The idea
Solution for standard browsers like Mozilla, Opera, Safari etc. (including IE 8, 9, 10 and younger) is completely different. Entire area (top <div>) is set to be displayed as a table (display: table; part of CSS2). The internal object is set as table-cell (display: table-cell). Now — there is the key idea — it is possible to use vertical-align property for such table-displayed element in standard browsers. (Internet Exlorer 6, 7 and quirk mode ignores those properties or doesn’t know their values.)
Then both syntax are merged. I use the Pixy’s underscore hack, but with sign #. A CSS property written with the char # on the start (i.e. #position) is visible for IE 7 and older. Such written property is invisible for any other standard browser (e.g. Explorer 6 or 7 interprets #position: absolute; unlike other browsers). This so called «underscore hack» seems to be valid, but if you don’t want to use it, you may use the more structured code below in my second example (unfortunately, not working for IE 7). Other types of browsers and Internet Explorer 8 and younger don’t need to be hacked, as they support display: table-cell properly.
Compatibility
The code below works in Internet Explorer 5.0, 5.5, 6.0, 7, 8, 9 and 10 beta, in Gecko browsers (Mozilla, Firefox, Netscape 7), in Opera 7, 8 and up, every Chrome, Konqueror 3.3.1. (maybe lower too), and in Safari (Win, iOS). The page can be HTML, HTML5 or XHTML, standard or quirk mode.
The valid example doesn’t work in IE 7 standard mode (update 2012: about 3 % of clients). If you find any easy workaround for IE 7, please let me know.
Understandable code:
<!DOCTYPE HTML>
<html>
<head>
<title>Universal vertical center with CSS</title>
<style>
.greenBorder {border: 1px solid green;} /* just borders
to see it */
</style>
</head>
<body>
<div>
<div>
<div>
any text<br>
any height<br>
any content, for example
generated from DB<br>
everything is vertically centered
</div>
</div>
</div>
</body>
</html>
See this example in
browser
Legend for colors:
CSS styles for every browser
CSS styles for standard browsers
CSS style only for Internet Explorer 6, 7 and quirk (with # hack)
The result looks:
any text
any height
any content, for example generated from DB
everything is vertically centered
See this example in browser
Let’s make it structural and without hacks
(NOTE: this valid solution described below doesn’t work in Internet Explorer 7 (standard mode), because IE7 doesn’t understand table- values in display property. The centered object is too high. BUT: IE 7 is used by only about 3 % of users (2012) and the number will decrease. If you still do mind IE7 users, please use the non-valid solution above, write in quirk mode, or use html conditional comments for separating the properties for IE 7 somehow.)
The first example above is not nice, but I hope you have understood it. It’s possible to write code differently. For example this way:
<div>
<div>
<div>
any text
any height
any content, for example generated from DB
everything is vertically centered
</div>
</div>
</div>
And the structured valid style:
<style type=»text/css»>
#outer {height: 400px; overflow: hidden; position:
relative;}
#outer[id] {display: table; position: static;}
#middle {position: absolute; top: 50%;}
/* for quirk explorer only*/
#middle[id] {display: table-cell; vertical-align:
middle; width: 100%; position: static;}
#inner {position: relative; top: -50%}
/* for quirk explorer only */
/* optional: #inner[id] {position: static;} */
</style>
See the valid example in browser (it looks the same way as the last one).
Color legend:
CSS style for Internet Explorer 6 only (or quirk)
CSS styles for standard browsers
CSS2 selector #value[id]
is equivalent to selector #value
,
but Internet Explorer 6 ignores these types of selectors with [id].
Generally: syntax *[foo]
means any element with attribute foo
. Any
HTML element #something must have the attribute id by definition set to «something».
That’s the trick — #value[id]
works in standard browsers only
(similarly works .value[class])
There’s CSS property position set to absolute or relative for Internet
Explorer. The code position: static
get’s it back to default
value in standard browsers (property top doesn’t work then).
Both vertical and horizontal centering
The core code will be the same, you just need to add some extra CSS rules. If is your page in standard mode, add this code:
<style>
#outer {width: 100%;}
#inner {width: 200px; margin-left: auto; margin-right: auto;}
</style>
As you probably see, this is the most common horizontal centering method — auto left and right margin. Because margins needs the space in Firefox and Opera, you need to set a width to the #outer div. If 100% doesn’t fit your needs, use any other value.
The important thing is to set some proper width to #inner. This tutorial is about vertical centering of an object with unknown height. I assume that you know the width of the object (in most cases you will simply decide how wide it should be). You may use the pixel values, or the percentage width. If the centered object is only an unknown-size image, you don’t need to set width.
If you use quirk mode page rendering (mode depends on !Doctype, as you know), added code should be a bit longer, because quirk mode of Exploder doesn’t understand auto margins, but has one nice bug in text-align interpretation instead. This code should work for both standard and quirk mode:
<style>
#outer {width: 100%;}
#middle {width: 100%; text-align: center;}
#inner {width: 200px; margin-left: auto; margin-right: auto; text-align:
left;}
</style>
Please take note that this is just part of code, which you have to add to the previous example. If you are lazy to combine codes, please see the complete example in browser: vertical and horizontal centering. You know, I’m lazy too.
How to center vertically on window’s height
The same way, and just add the style:
<style>
body, html {height: 100%;}
#outer {height: 100%; overflow: visible;} /* or without overflow */
...
</style>
It seems that #outer declaration should be sufficient, but it is not. Body and html declaration sets 100% of the window’s height as a base for next percentage. Now it is better not to set overflow: hidden (like in the examples above), because when the content would be taller than window, then it would be impossible to scroll on.
Related
Previous attempt to center vertically:
Examples:
Read in other language:
Centralizando verticalmente com CSS — Brazilian Portuguese translation of this article by Maurício Samy Silva
Вертикальне центрування в CSS — Ukrainian translation by Agnessa Petrova from A2Goos team
Вертикальное центрирование в CSS — Russian translation by Aleksandr Molochan
Czech version of this article (original, not updated)
All other articles on this website www.jakpsatweb.cz is in Czech.
About
First published Sep 21, 2004, updated Oct 23, 2006 and May 25 2008. Major update Dec 6 2012 including bugfix of code in valid example. June 2015 major update about flex. I’ll update this article with more information if you wish.
Author:
Dušan Janovský
aka Yuhů
[email protected]
www.jakpsatweb.cz
From Prague, Czech Republic, search algorithms specialist in Seznam.cz
search engine. Wi
Tw
Fb
Как центрировать абсолютно позиционированный элемент с помощью CSS
Эта статья была написана в 2010 году и остается одной из наших самых популярных статей. Если вы хотите узнать больше о методах CSS, вы можете найти эту недавнюю статью о селекторах уровня 4 в CSS.
Центрирование абсолютно позиционированного элемента — это задача CSS, которая возникает время от времени. Решение кажется очевидным после того, как я это сделал, но я все еще ловлю себя на том, что гуглил проблему каждые несколько месяцев.
Горизонтальное центрирование статического элемента в CSS обычно выполняется установкой левого и правого полей на auto
, например:
.myelement {
маржа: 0 авто;
}
Однако это не сработает с абсолютно позиционированным элементом. Его местоположение определяется по отношению к ближайшему родительскому элементу, который имеет значение позиции
, равное абсолютному
, относительному
или фиксированному
.
В следующем примере относительный красный квадрат имеет ширину
, равную 40% доступного пространства.Верхний левый угол абсолютно позиционированного синего квадрата расположен на 30 пикселей в поперечнике и на 10 пикселей вниз:
.outer {
положение: относительное;
ширина: 40%;
высота: 120 пикселей;
маржа: 20 пикселей автоматически;
граница: 2px solid # c00;
}
.внутренний {
позиция: абсолютная;
ширина: 100 пикселей;
высота: 100 пикселей;
верх: 10 пикселей;
слева: 30 пикселей;
цвет фона: # 00c;
}
Если нас не беспокоят точные размеры нашего синего поля, мы могли бы опустить настройку ширины
и установить те же значения слева
и справа
.Это будет эффективно центрировать нашу синюю рамку:
.outer {
положение: относительное;
ширина: 40%;
высота: 120 пикселей;
маржа: 20 пикселей автоматически;
граница: 2px solid # c00;
}
.внутренний {
позиция: абсолютная;
высота: 100 пикселей;
слева: 30 пикселей;
верх: 10 пикселей;
вправо: 30 пикселей;
цвет фона: # 00c;
}
Итак, как мы можем центрировать нашу коробку, если она имеет фиксированные размеры? Ответ требует немного нестандартного мышления:
- Сначала используем
left: 50%
. В отличие от положения фонового изображения, при этом левый край синего поля переместится в центр. - Поскольку наше поле находится слишком далеко вправо, мы используем отрицательное левое поле, равное половине ширины поля. В нашем примере мы должны установить
margin-left
на-50px
, чтобы сместить поле обратно в нужное место.
Вот код:
.outer {
положение: относительное;
ширина: 40%;
высота: 120 пикселей;
маржа: 20 пикселей автоматически;
граница: 2px solid # c00;
}
.внутренний {
позиция: абсолютная;
ширина: 100 пикселей;
высота: 100 пикселей;
верх: 10 пикселей;
осталось: 50%;
маржа слева: -50 пикселей;
цвет фона: # 00c;
}
Синий прямоугольник останется по центру независимо от того, как изменится ширина внешнего элемента.
Если вам понравился этот пост, вам понравится SitePoint Premium; место, где можно научиться новым навыкам и методам от опытных разработчиков. Участники получают мгновенный доступ ко всем электронным книгам SitePoint и интерактивным онлайн-курсам, таким как CSS Master.
Комментарии к статье закрыты. Есть вопрос о CSS? Почему бы не спросить об этом на нашем форуме?
Позиция— CSS: каскадные таблицы стилей
Свойство position
CSS устанавливает, как элемент располагается в документе.Свойства верхний
, правый
, нижний
и левый
определяют окончательное расположение позиционированных элементов.
Исходный код этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, клонируйте https://github.com/mdn/interactive-examples и отправьте нам запрос на перенос.
Позиция Свойство
задается как одно ключевое слово, выбранное из списка значений ниже.
Значения
-
статический
- Элемент позиционируется в соответствии с обычным потоком документа. Свойства
верхний
,правый
,нижний
,левый
иz-index
не имеют эффекта . Это значение по умолчанию. -
родственник
- Элемент позиционируется в соответствии с обычным потоком документа, а затем смещается на относительно себя на основе значений
вверху
,справа
,внизу
ислева
.Смещение не влияет на положение других элементов; таким образом, пространство, отведенное для элемента в макете страницы, такое же, как если бы позиция былаstatic
. - Это значение создает новый контекст наложения, когда значение
z-index
не равноauto
. Его влияние на элементыtable - * - group
,table-row
,table-column
,table-cell
иtable-caption
не определено. -
абсолютное
- Элемент удаляется из обычного потока документов, и пространство для него не создается в макете страницы.Он позиционируется относительно ближайшего предка, если таковой имеется; в противном случае он размещается относительно исходного содержащего блока. Его окончательное положение определяется значениями
верхний
,правый
,нижний
илевый
. - Это значение создает новый контекст наложения, когда значение
z-index
не равноauto
. Поля абсолютно позиционированных блоков не сжимаются с другими полями. -
фиксированный
- Элемент удаляется из обычного потока документов, и пространство для него не создается в макете страницы.Он позиционируется относительно начального содержащего блока, установленного окном просмотра, за исключением случаев, когда один из его предков имеет
преобразование
,перспективу
илифильтр
, для которого установлено значение, отличное отнет
(см. CSS Transforms Spec) , и в этом случае этот предок ведет себя как содержащий блок. (Обратите внимание, что существуют несоответствия браузера с перспективойфильтром
, способствующей формированию блока.) Его окончательное положение определяется значениямиверхний
,правый
,нижний
илевый
. - Это значение всегда создает новый контекст наложения. В печатных документах элемент размещается в той же позиции на каждой странице .
-
липкий
- Элемент позиционируется в соответствии с нормальным потоком документа, а затем смещается относительно своего ближайшего предка с прокруткой и содержащего блока (ближайшего предка на уровне блока), включая элементы, связанные с таблицей, на основе значений
верхних
,справа
,снизу
ислева
.Смещение не влияет на положение других элементов. - Это значение всегда создает новый контекст наложения. Обратите внимание, что липкий элемент «прилипает» к своему ближайшему предку, у которого есть «механизм прокрутки» (создается, когда
overflow
—hidden
,scroll
,auto
илиoverlay
), даже если этот предок не t ближайший предок, выполняющий прокрутку. Это эффективно предотвращает любое «липкое» поведение (см. Проблему GitHub на W3C CSSWG).
Типы позиционирования
- Позиционируемый элемент — это элемент, для которого вычисленное значение положения
относительному
,абсолютному
,фиксированному
илилипкому
. (Другими словами, это что угодно, кромеstatic
.) - Элемент относительно позиционирования — это элемент, для которого вычисленное значение положения
относительно
. Свойстваверхний
инижний
определяют вертикальное смещение от его нормального положения; свойстваleft
иright
определяют смещение по горизонтали. - Абсолютно позиционированный элемент — это элемент, для которого вычисленное значение положения
абсолютное
илификсированное
. Свойстваверхний
,правый
,нижний
илевый
задают смещения от краев содержащего блок элемента. (Содержащий блок является предком, относительно которого позиционируется элемент.) Если у элемента есть поля, они добавляются к смещению. Элемент устанавливает новый контекст форматирования блока (BFC) для своего содержимого. - Элемент с липким позиционированием — это элемент, для которого вычисленное значение положения
липкое
. Он рассматривается как относительно позиционированный до тех пор, пока содержащий его блок не пересечет указанный порог (например, установкаtop
на значение, отличное от auto) в его корне потока (или в контейнере, в котором он прокручивается), после чего он рассматривается как «застрявший» до тех пор, пока встречает противоположный край содержащего его блока.
В большинстве случаев абсолютно позиционированные элементы, которые имеют высоту
и ширину
, установленную на auto
, имеют размер, соответствующий их содержимому.Однако можно сделать так, чтобы незамещенные, абсолютно позиционированные элементы заполняли доступное вертикальное пространство, указав как верхний
, так и нижний
и оставив неуказанным высоту
(то есть авто
). Их также можно сделать так, чтобы они заполняли доступное горизонтальное пространство, указав слева
и справа
и оставив width
как auto
.
За исключением только что описанного случая (с абсолютно позиционированными элементами, заполняющими доступное пространство):
- Если указаны и
верхний
, инижний
(технически, неавто
), выигрываетверхний
. - Если указаны оба
слева
исправа
,слева
побеждает, когданаправление
равнолитра
(английский, горизонтальный японский и т. Д.) Исправа
побеждает, когданаправление
равноrtl
(персидский, Арабский, иврит и др.).
Убедитесь, что элементы, позиционированные с абсолютным значением
или фиксированным значением
, не закрывают другое содержимое при масштабировании страницы для увеличения размера текста.
Производительность и доступность
Элементы прокрутки, содержащие фиксированных
или липких
содержимого, могут вызвать проблемы с производительностью и доступностью.Когда пользователь выполняет прокрутку, браузер должен перерисовать закрепленный или фиксированный контент в новом месте. В зависимости от содержимого, которое необходимо перерисовать, производительности браузера и скорости обработки устройства, браузер может не справиться с перерисовкой со скоростью 60 кадров в секунду , вызывая проблемы доступности для людей с повышенной чувствительностью и дрянь для всех. Одно из решений — добавить will-change: преобразовать
к позиционированным элементам, чтобы отобразить элемент на его собственном слое, улучшив скорость перерисовки и, следовательно, улучшив производительность и доступность.
статический | родственник | абсолютный | липкий | фиксированный
Относительное позиционирование
Относительно позиционированные элементы смещены на заданную величину от их нормального положения в документе, но без влияния смещения на другие элементы. В приведенном ниже примере обратите внимание, как другие элементы размещены, как если бы «Два» занимали пространство своего обычного расположения.
HTML
Один
Два
Три
Четыре
CSS
* {
размер коробки: рамка-рамка;
}
.коробка {
дисплей: встроенный блок;
ширина: 100 пикселей;
высота: 100 пикселей;
фон: красный;
цвет белый;
}
#два {
положение: относительное;
верх: 20 пикселей;
слева: 20 пикселей;
фон: синий;
}
Абсолютное позиционирование
Элементы, расположенные относительно друг друга, остаются в обычном потоке документа. Напротив, элемент, который находится в абсолютном позиционировании, извлекается из потока; таким образом, другие элементы позиционируются так, как если бы его не было. Абсолютно позиционированный элемент позиционируется относительно своего ближайшего предка (т.е.е. ближайший предок, который не равен static
). Если позиционированный предок не существует, он позиционируется относительно ICB (начальный содержащий блок — см. Также определение W3C), который является содержащим блоком корневого элемента документа.
HTML
Абсолютное позиционирование
Я элементарный элемент уровня блока. Соседние элементы уровня блока располагаются на новых строках ниже меня.
По умолчанию мы покрываем 100% ширины нашего родительского элемента, и мы достигаем высоты нашего дочернего содержимого.Наша общая ширина и высота - это наше содержимое + отступ + ширина / высота границы.
Нас разделяют наши поля. Из-за сжатия поля мы разделяем ширину одного из наших полей, а не обоих.
встроенные элементы , подобные этому и this , располагаются на одной строке друг с другом и смежными текстовыми узлами, если на той же строке есть место. Переполняющиеся встроенные элементы переносятся на новую строку, если это возможно - как эта, содержащая текст , или просто переходите к новой строке, если нет, как это будет с этим изображением:
CSS
* {
размер коробки: рамка-рамка;
}
тело {
ширина: 500 пикселей;
маржа: 0 авто;
}
п {
фон: цвет морской волны;
граница: сплошной синий цвет 3px;
отступ: 10 пикселей;
маржа: 10 пикселей;
}
охватывать {
фон: красный;
граница: сплошной черный 1px;
}
.positioned {
позиция: абсолютная;
фон: желтый;
верх: 30 пикселей;
слева: 30 пикселей;
}
Результат
Фиксированное позиционирование
Фиксированное позиционирование аналогично абсолютному позиционированию, за исключением того, что содержащий блок элемента является начальным содержащим блоком, установленным окном просмотра , если только какой-либо предок не имеет преобразование
, перспективы
или фильтр
свойство установить значение, отличное от none
(см. Спецификацию преобразований CSS), что затем заставляет этого предка занять место элементов, содержащих блок.Это можно использовать для создания «плавающего» элемента, который остается в том же положении независимо от прокрутки. В приведенном ниже примере поле «Один» зафиксировано на расстоянии 80 пикселей от верхнего края страницы и 10 пикселей от левого края. Даже после прокрутки он остается на том же месте относительно области просмотра.
HTML
Lorem ipsum dolor sit amet, conctetur adipiscing elit. Nam congue Tortor Eget pulvinar lobortis.
Vestibulum ante ipsum primis в 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 placerat egestas. 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 toror.
Sed tempor nisl a lorem conquat, 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, conctetur adipiscing elit. Nam congue Tortor Eget pulvinar lobortis.
Vestibulum ante ipsum primis в 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 placerat egestas. 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 toror.
Sed tempor nisl a lorem conquat, 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.
Один
CSS
* {
размер коробки: рамка-рамка;
}
.коробка {
ширина: 100 пикселей;
высота: 100 пикселей;
фон: красный;
цвет белый;
}
#один {
положение: фиксированное;
верх: 80 пикселей;
слева: 10 пикселей;
фон: синий;
}
.outer {
ширина: 500 пикселей;
высота: 300 пикселей;
переполнение: прокрутка;
отступ слева: 150 пикселей;
}
Результат
Липкое позиционирование
Липкое позиционирование можно рассматривать как гибрид относительного и фиксированного позиционирования. Элемент с фиксированным позиционированием считается относительно позиционированным до тех пор, пока он не пересечет заданный порог, после чего он считается фиксированным до тех пор, пока не достигнет границы своего родителя.Например …
#one {position: sticky; верх: 10 пикселей; }
… позиционирует элемент с идентификатором относительно до тех пор, пока область просмотра не будет прокручена таким образом, чтобы элемент находился на расстоянии менее 10 пикселей от верха. За пределами этого порога элемент будет зафиксирован на 10 пикселей сверху.
Обычно липкое позиционирование используется для заголовков в алфавитном списке. Заголовок «B» будет отображаться сразу под элементами, начинающимися с «A», пока они не будут прокручены за пределы экрана.Вместо того, чтобы перемещаться за пределы экрана вместе с остальным контентом, заголовок «B» будет оставаться закрепленным в верхней части области просмотра до тех пор, пока все элементы «B» не будут прокручены за пределы экрана, после чего он будет закрыт буквой «C». заголовок и так далее.
Вы должны указать порог как минимум с одним из верхний
, правый
, нижний
или левый
, чтобы закрепленное позиционирование работало должным образом. В противном случае его нельзя будет отличить от относительного позиционирования.
HTML
- А
- Эндрю В.К.
- Аппарат
- Arcade Fire
- У подъезда
- Азиз Ансари
- C
- Chromeo
- Обычный
- Свести
- Хрустальные замки
- Курсив
- E
- Взрывы в небе
- Т
- Тед Лео & amp; Фармацевты
- Т-Пейн
- Трижды
- Телевидение по радио
- Два галанта
CSS
* {
размер коробки: рамка-рамка;
}
dl> div {
фон: #FFF;
отступ: 24px 0 0 0;
}
dt {
фон: # B8C1C8;
нижняя граница: сплошной 1px # 989EA4;
border-top: 1px solid # 717D85;
цвет: #FFF;
шрифт: полужирный 18px / 21px Helvetica, Arial, без засечек;
маржа: 0;
отступ: 2px 0 0 12px;
позиция: -webkit-sticky;
положение: липкое;
верх: -1px;
}
dd {
шрифт: полужирный 20px / 45px Helvetica, Arial, без засечек;
маржа: 0;
отступ: 0 0 0 12 пикселей;
белое пространство: nowrap;
}
dd + dd {
верхняя граница: сплошной 1px #CCC;
}
Результат
таблицы BCD загружаются только в браузере
Position · Bootstrap v5.0
Значения позиций
Доступны классы быстрого позиционирования, но они не реагируют.
...
...
...
...
...
Элементы упорядочения
Легко располагайте элементы с помощью утилит для позиционирования кромок. Формат: {свойство} - {позиция}
.
Где свойство является одним из:
-
верх
— для вертикальноговерх
положение -
начало
— для горизонтальнойлевой позиции
(в LTR) -
нижняя
— для вертикальнойнижняя
позиция -
конец
— для горизонтальнойправой позиции
(в LTR)
Где позиция является одной из:
-
0
— для0
положение кромки -
50
— для50%
положение кромки -
100
— для100%
положение кромки
(Вы можете добавить дополнительные значения позиций, добавив записи в переменную карты Sass $ position-values
.)
Центральные элементы
Кроме того, вы также можете центрировать элементы с помощью служебного класса преобразования .translate-middle
.
Этот класс применяет преобразования translateX (-50%)
и translateY (-50%)
к элементу, что в сочетании с утилитами позиционирования кромок позволяет вам полностью центрировать элемент.
Добавляя классы .translate-middle-x
или .translate-middle-y
, элементы можно размещать только в горизонтальном или вертикальном направлении.
Примеры
Вот несколько реальных примеров этих классов:
Письма +99 непрочитанных сообщений Маркер Оповещения о непрочитанных сообщениях
Эти классы можно использовать с существующими компонентами для создания новых. Помните, что вы можете расширить его функциональность, добавив записи в переменную $ position-values
.
CSS Вертикальное выравнивание для всех (включая чайники)
«Вертикальное выравнивание CSS держит меня в напряжении!»
Ровно в 9 утра.Дождливый понедельник смыл воскресенье. Я почувствовал тяжесть серой недели работы впереди, когда стряхнул свои заметки о сложном случае переменных CSS. Я не мог дышать, пока в офис не ворвался бородатый, крупный мужчина с боевым носом. Он был в ярости. И он был моим коллегой. Похоже, он не спал с момента анонса CSS3. Может быть, дело было в его бледном цвете лица, но я знал, что у этого парня были всевозможные ночные проблемы.
«Куда торопиться, приятель?»
Он бросил свой ноутбук на мой стол, чтобы показать мне экран, заполненный пульсирующими лягушками и пустыми листьями кувшинок.
«У меня есть для вас хороший. У меня проблемы с центрированием моего контента. Это плохо, очень плохо. Я не мог уснуть. И знаете что? Все борются с этим, это может быть серьезным случаем. — подумайте о коллективном иске и обо всем остальном ».
Глупый наркотик не знал, во что ввязывается. Центрирование контента по вертикали было огромным беспорядком, заваленным бюрократизмом. И он пошел вверх, вплоть до IE6. Но мне было жаль бедного ублюдка. Что я могу сказать; Я любитель слезливых историй.
«Успокойтесь, Рикардо. Алекс Сантос, эсквайр, мастер CSS, к вашим услугам».
. . .
Это могло быть не совсем так. Может быть, просто возможно, я приукрасил сказку.
Видите ли, мой коллега Рикардо — крупный бородатый парень — самопровозглашенный манекен CSS. Однажды он сказал мне, что все еще использует
В любом случае, сделать ваш контент правильно выровненным, красивым и в принципе потрясающим — непростая задача в CSS.Я видел достаточно людей, которые боролись с этим, и продолжаю замечать некоторые «критические» ошибки, когда дело касается настоящего адаптивного дизайна.
Но не бойтесь: если вы боролись с вертикальным выравниванием CSS — как мой коллега, возможно, — вы попали в нужное место.
Давайте поговорим о свойстве CSS Vertical Align
Когда я начал заниматься фронтенд-разработкой, у меня были небольшие проблемы с этим свойством. Я подумал, что его следует использовать как классическое свойство text-align.О, если бы это было так просто …
Свойство CSS вертикального выравнивания плавно работает с таблицами, но не с div или любыми другими элементами. Когда вы используете его в div, он выравнивает элемент вместе с другими div, а не содержимое — что мы обычно хотим). Это работает только с дисплеем : inline-block;
.
Вот пример:
См. Pen 1 # Example_OutSystems Experts — Vertical-align on divs от Александра Сантоса (@alexandre_santos) на CodePen.
Мы хотим центрировать контент, а не сам Div!
У вас есть два подхода. Если у вас есть только некоторые элементы div с текстом, такие как панель навигации, вы можете использовать свойство line-height
, что означает, что вам нужно знать высоту элемента, но вам не нужно устанавливать высоту. Таким образом, ваш текст всегда будет по центру.
Однако у этого подхода есть загвоздка. Если в вашем тексте более одной строки, высота строки будет умножена на количество имеющихся у вас строк.Это, вероятно, оставит вас с уродливой страницей в ваших руках, а этого никто не хочет.
Взгляните на этот пример:
См. Pen 2 # Example_OutSystems Experts — Navbar with line-height от Александра Сантоса (@alexandre_santos) на CodePen.
Если контент, который вы хотите центрировать, состоит из нескольких строк, лучше всего использовать таблицы div. Вы можете использовать настоящие таблицы, но это семантически неверно. Кроме того, если вам нужны перерывы для адаптивных целей, лучше использовать элементы div.
Для того, чтобы это работало, у вас должен быть родительский контейнер с display: table;
, и внутри этого контейнера у вас будет количество столбцов, которое вы хотите выровнять по центру, с display: table-cell;
(и vertical-align: middle;
) свойство.
Давайте посмотрим на пример:
См. Pen 3 # Example_OutSystems Experts — Выравнивание ячеек таблицы по вертикали Александра Сантоса (@alexandre_santos) на CodePen.
Почему это работает с макетом таблицы, а не с элементами div? Потому что, когда у вас есть таблица, строки имеют одинаковую высоту.Таким образом, когда содержимое ячейки не использует всю доступную высоту, браузер автоматически добавляет вертикальный отступ для центрирования содержимого.
Свойство Position
Начнем с основ:
-
положение: статическое;
— это значение по умолчанию. Элемент отображается в соответствии с порядком HTML. -
позиция: абсолютная;
— используется для определения точной позиции, в которой должен находиться элемент. Эта позиция всегда связана с ближайшим предком в относительной позиции (не статической).Знаете ли вы, что произойдет, если вы не определите точное положение элемента? Вы теряете над этим контроль! Он отображается случайным образом, полностью игнорируя документооборот. По умолчанию он отображается в верхнем левом углу. -
позиция: относительная;
— используется для позиционирования элемента относительно его нормального положения (статика). Эта позиция сохраняет порядок потока документа. -
позиция: фиксированная;
— используется для позиционирования элемента относительно окна браузера, чтобы он всегда был виден в области просмотра.
Примечание : Некоторые свойства, такие как top
и z-index
, работают, только если элемент имеет позицию (не статичную).
Давайте сделаем наши грязные руки еще грязнее!
Вы хотите выровнять рамку по центру страницы?
Сначала получите элемент с относительным положением и желаемыми размерами. Например: 100% ширины и высоты.
Второй шаг может отличаться в зависимости от ваших целевых браузеров, но вы можете использовать один из двух вариантов:
- Старый вариант : Вам нужно знать точный размер коробки, чтобы удалить половину ширины и половину высоты коробки.Как это:
См. Pen 4 # Example_OutSystems Experts — Абсолютное позиционирование с рамкой размера, автор Александр Сантос (@alexandre_santos) на CodePen.
- Классная новая опция CSS3 : добавьте свойство преобразования со значением перевода -50%, и оно всегда будет центрировано. Как это:
См. Перо 5 # Example_OutSystems Experts — Абсолютное позиционирование без рамки от Александра Сантоса (@alexandre_santos) на CodePen.
По сути, если вы хотите центрировать контент, никогда, (никогда, никогда, никогда!) Не используйте top: 40%
или left: 300px
.Это отлично работает на ваших тестовых экранах, но не по центру. Не совсем.
Помните фиксированное положение? Вы можете сделать то же самое, что и с абсолютным положением, но вам не нужно относительное положение в родительском элементе — оно всегда будет относительно окна браузера.
CSS Vertical Align Criers: вы слышали о Flexbox?
Вы можете использовать макет flexbox, вариант, о котором мой мальчик Динис писал некоторое время назад. Ах да, это намного лучше, чем любой из других доступных вариантов.С помощью flexbox манипулировать элементами по-разному — это детская игра. Даже Рикардо мог это сделать.
Проблема в том, что вам нужно отказаться от некоторых браузеров, например IE9 и ниже. Отпусти. Отпусти … не могу больше сдерживаться. (Да, теперь он застрял в вашей голове. Пожалуйста.)
Вот пример того, как центрировать коробку по вертикали:
См. Pen 6 # Example_OutSystems Experts — Макет Flexbox без поля размера от Александра Сантоса (@alexandre_santos) на CodePen.
Используя макет flexbox, вы можете иметь более одного центрированного блока и правильно выровнять его. Но это уже история для другого раза!
А как насчет CSS Grid?
CSS Grid Layout — самая мощная система компоновки, доступная в CSS. Основное отличие от Flexbox заключается в том, что он работает в двухмерной системе, то есть может обрабатывать как столбцы, так и строки, в отличие от Flexbox, который в значительной степени является одномерной системой. По этой причине это может быть подходящим для создания более сложных макетов, таких как шаблон галереи в пользовательском интерфейсе OutSystems.
При этом его можно использовать просто для центрирования элементов в контейнере! Вот пример того, как центрировать коробку по вертикали:
См. Перо CodePen Home 7 # Example_OutSystems Experts — Макет сетки без поля размера, автор Бернардо Кардосо (@BenCardoso) на CodePen.
Подобно Flexbox, этот подход также требует отказа от старых браузеров, хотя поддержка в основных из них совершенно стабильна.
Чтобы узнать больше о CSS Grid, ознакомьтесь с этим полным руководством и некоторыми практическими примерами.
No More CSS Vertical Align Tears
Вертикальное выравнивание во многом похоже на детский шампунь Джонсона: без разрывов. Если вы последуете тому, чему научились с помощью этих нескольких примеров, вы также сможете быстро освоить вертикальное выравнивание.
. . .
Некоторое время спустя я проходил мимо дома Рикардо, но его там не было. Кто-то сказал мне, что он заснул на одной из многих удобных кушеток нашей компании.
Похоже на технический нокаут.
Но когда я посмотрел на экран его ноутбука…
Какого черта он делал? Играть в игры, пока он должен был работать?
Это очень много цветов для понедельника, который начался таким серым.
Ссылки и дополнительная литература
Flexbox и абсолютное позиционирование
Недавно я пытался создать приложение для видеоконференцсвязи с открытым исходным кодом специально для онлайн-встреч. Кажется, как и любой другой разработчик на планете. Приложения для видеоконференцсвязи — это новые чат-боты.Может быть.
Это также было хорошей причиной для меня лучше узнать OpenTok, поскольку раньше у меня не было сценария использования для сборки. Я, вероятно, запишу весь процесс в виде длинного поста, состоящего из нескольких частей, когда я на самом деле приведу его в разумную форму MVP.
Но этот мини-пост о Flexbox и абсолютном позиционировании, а также о незначительной ошибке (по крайней мере, я так думаю, что я зарегистрировал ее) в Firefox DevTools.
Что происходит, когда вы
позиционируете: absolute
гибкий элемент?Я не мог быть единственным, кто пробовал это, верно? Хотя для меня это был первый раз, когда я действительно использовал такую комбинацию, хотя я читал об этом, когда изучал спецификацию Flexbox.
Вот почему я знал, что есть подробный раздел 4.1. Абсолютно позиционированные Flex Children. Я сделал , а не , запомнил спецификацию, я просто знал, что такой раздел существует, хорошо?
Позвольте мне выделить ключевые моменты, которые я считаю наиболее подходящими:
… абсолютно позиционированный дочерний элемент гибкого контейнера не участвует в гибкой компоновке.
однако:
Статическое положение абсолютно позиционированного дочернего элемента гибкого контейнера определяется таким образом, что дочерний элемент позиционируется, как если бы он был единственным гибким элементом в гибком контейнере, при условии, что и дочерний элемент, и гибкий контейнер были коробки фиксированного размера их использованного размера.
, что означает:
… если вы установите, например,
align-self: center;
на абсолютно позиционированном дочернем элементе гибкого контейнера, автоматические смещения на дочернем элементе центрируют его по поперечной оси гибкого контейнера.
Давайте разберемся с этим. Первая часть довольно проста. Если вы позиционируете гибкий элемент абсолютно, он больше не участвует в гибком макете. Это означает, что любые свойства гибкости элемента становятся спорными. Вы можете удалить их, если хотите.
В следующей части объясняется, что абсолютно позиционированный элемент ведет себя как единственный гибкий элемент в гибком контейнере. Итак, сократите свою мысленную модель до:
Свойства выравнивания блока по-прежнему применяются к гибкому элементу, даже если он абсолютно позиционирован, что означает, что использование align-self
будет иметь эффект. Подробную информацию о том, как нормальное поведение
работает в этом случае, можно найти в соответствующем разделе модуля выравнивания CSS Box Level 3.
Дополнительная информация, в которую я не буду вдаваться: 8.Детали размеров и позиционирования, которые детализируют абсолютное позиционирование элементов размером . (Возможно, это может быть сообщение в блоге в будущем)
Firefox DevTools имеет функцию, которая сообщает вам, почему определенный CSS неактивен. Это довольно круто, и я использую его для свойств, связанных с макетом, когда я создаю что-то. Однако он говорит, что свойство align-self
не активно, потому что абсолютно позиционированный элемент не является гибким элементом.
Но это имеет эффект.И сам браузер ведет себя так, как ожидалось. Полагаю, это ошибка DevTools? Я не уверен, поэтому я зарегистрировал ошибку и надеюсь, что кто-то ее отследит.
Браузер работает отлично К сожалению, ваш браузер не поддерживает встроенные видео. К сожалению, ваш браузер не поддерживает встроенные видео, но не волнуйтесь, вы можете загрузить его и посмотреть в своем любимом видеоплеере!TL; DR о том, почему я отказался от гибкого элемента
На данный момент, как работает мое приложение, все видеопотоки попадают в единственный родительский контейнер.Я хочу иметь возможность сосредоточиться на одном потоке и сделать его дисплеем большого размера (общий шаблон пользовательского интерфейса в большинстве клиентов видеоконференцсвязи).
Это происходит, когда CSS-класс .focused
добавляется к выбранному контейнеру элемента потока, но поскольку все потоки находятся на одном уровне, это своего рода хакерский способ добиться такого эффекта. Посмотрим, смогу ли я изменить разметку, но пока не знаю, как это сделать.
В любом случае, проект, над которым я работаю, находится на GitHub, если кому-то хоть немного интересно.
Он медленно работает и очень незавершенный, и если вы думаете, что выглядит достойно , это потому, что я убегаю от своих более сложных проблем и вместо этого работаю над макетом. ¯ \ _ (ツ) _ / ¯
css
Как центрировать что угодно с помощью CSS
Недавно мы погрузились в основные концепции макета CSS и исследовали различия между абсолютным и относительным позиционированием. Мы собираемся продолжить это с другим докладом о макете CSS, на этот раз основанном на фундаментальном вопросе, который задает почти каждый новый разработчик: как вы центрируете что-то?
Существует множество различных типов веб-элементов и ситуаций макета, каждая из которых требует уникального решения для центрирования (как по вертикали, так и по горизонтали).Сегодня мы рассмотрим несколько этих сценариев, чтобы вы могли понять, как они работают, и уйти с уверенностью, чтобы сосредоточить что угодно!
Для кого это?
В последнее время я получил много отзывов от дизайнеров, которые испытывают трудности с базовыми методами и концепциями верстки в CSS. По общему мнению, многие новички в CSS просто «возятся» с кодом, пока все, наконец, не заработает.
Побывав там несколько раз, я знаю, что это чрезвычайно тяжелый период вашего профессионального роста.Знание того, что ответ находится прямо перед вами, и неспособность понять его мучительно и отнимает много времени.
Если это звучит знакомо, надеюсь, я смогу помочь вам выйти из этого периода с помощью некоторых надежных и практических советов о том, как работать с некоторыми распространенными сценариями макета. Если вы CSS-ниндзя, умеющий кодировать веб-сайт с завязанными глазами, эта статья, вероятно, не для вас. Если вы дизайнер, который просто хочет лучше понять, как взять то, что есть в вашем файле Photoshop, и превратить его в CSS, вы попали в нужное место.Давайте начнем.
Центрировать элемент по горизонтали
Первый сценарий, который мы атакуем, на сегодняшний день является одним из наиболее распространенных: центрирование элемента по горизонтали в области просмотра или в окне браузера. Для начала давайте выделим простой div и придадим ему базовый стиль.
Как видите, по умолчанию наш div появляется в верхнем левом углу окна просмотра. Уловка здесь в том, что нам нужно, чтобы div оставался в центре окна, независимо от того, какой размер окна сейчас.Это означает, что мы не можем использовать абсолютное позиционирование, чтобы разместить его в определенной точке, потому что оно не будет центрировано на любых других возможных размерах окна.
Вместо этого нам нужно использовать значение «авто», которое можно применить к полям. Вот как это работает:
Как видите, применение единственной строки CSS перебросило наш блок прямо в центр его родителя, которым в данном случае является тело. Для этого я использовал сокращение CSS. Если вам нужно что-то напомнить, сокращение полей начинается сверху и движется по часовой стрелке.
Вы можете сократить его еще больше, если вам нужно назначить только два значения. В этом случае первый слот будет применяться к верхнему и нижнему полям, а второй слот будет применяться к левому и правому полям. Вот еще один взгляд на наш центрированный div, на этот раз с полями, объявленными с использованием трех отдельных, но совершенно эквивалентных методов.
Как видите, в нашем элементе отсутствуют верхнее и нижнее поля, но для левого и правого поля установлено значение auto , что обеспечивает идеальное центрирование элемента.
Что нужно помнить
При использовании трюка с автоматическими полями следует помнить несколько важных вещей. Прежде всего, у должна быть определенная ширина, объявленная для элемента, который вы центрируете. Объявление высоты не обязательно, вы можете разрешить содержимому определять высоту, если хотите, что является настройкой по умолчанию, но всегда должна быть установлена ширина.
Важно отметить, что хотя этот трюк будет работать с большинством элементов уровня блока, а не только с div, он не поможет вам с вертикальным центрированием.В качестве примера давайте поместим абзац в div, а затем попытаемся центрировать этот абзац в пространстве.
div { высота: 400 пикселей; ширина: 400 пикселей; фон: #eee; маржа: авто; } п { ширина: 60%; маржа: авто; шрифт: 14px / 1.5 Helvetica, без засечек; }
div { height: 400 пикселей; ширина: 400 пикселей; фон: #eee; маржа: авто; } p { ширина: 60%; маржа: авто; шрифт: 14 пикселей / 1.5 Helvetica, без засечек; } |
Как видите, у меня установлены автоматические поля как для абзаца, так и для его родительского div. Это расположило все по центру по горизонтали, но не повлияло на вертикальное положение.
Центрировать абсолютно позиционированный элемент
Вышеупомянутый метод позволяет автоматически центрировать один элемент внутри другого, но в этом методе предполагается, что вы используете контекст позиционирования по умолчанию: статический. Если у вас применено абсолютное позиционирование, этот метод не работает.
Используя методы абсолютного и относительного позиционирования, которые мы изучили на прошлой неделе, мы можем применить простую формулу для решения этой проблемы.
Здесь мы видим, что для абсолютно позиционированного элемента, содержащегося внутри относительно позиционированного элемента, нам нужно установить свойство left , подставив некоторые числа в эту формулу. Вот тестовый пример:
.container { высота: 300 пикселей; ширина: 300 пикселей; фон: #eee; маржа: 10 пикселей автоматически; положение: относительное; } .коробка { высота: 100 пикселей; ширина: 100 пикселей; фон: # 222; позиция: абсолютная; }
. Контейнер { высота: 300 пикселей; ширина: 300 пикселей; фон: #eee; маржа: 10 пикселей автоматически; позиция: относительная; } .box { height: 100px; ширина: 100 пикселей; фон: # 222; позиция: абсолютная; } |
Давайте посмотрим, сможем ли мы центрировать черный ящик по горизонтали.Используя нашу формулу, мы видим, что для свойства left необходимо установить значение 100 пикселей.
.container { высота: 300 пикселей; ширина: 300 пикселей; фон: #eee; маржа: 10 пикселей автоматически; положение: относительное; } .коробка { высота: 100 пикселей; ширина: 100 пикселей; фон: # 222; позиция: абсолютная; слева: 100 пикселей; }
. Контейнер { высота: 300 пикселей; ширина: 300 пикселей; фон: #eee; маржа: 10 пикселей автоматически; позиция: относительная; } .коробка { высота: 100 пикселей; ширина: 100 пикселей; фон: # 222; позиция: абсолютная; слева: 100 пикселей; } |
С помощью этого кода мы установили расстояние между левой стороной блока и краем его родительского контейнера на 100 пикселей, что идеально центрирует его.
с шириной текучей среды
Приведенный выше метод работает только в том случае, если родительский контейнер имеет статическую ширину. Однако, учитывая популярность адаптивного дизайна, в последнее время все больше и больше контейнеров переходят по гибкому пути.Это означает, что нам понадобится другой способ центрирования дочернего элемента, который не зависит от ширины родительского элемента.
Для этого нам нужно использовать процентное значение для оставшегося значения . Очевидный ответ — использовать 50%, но на самом деле это не сработает, потому что вы не учитываете ширину центрируемого элемента. Чтобы это работало, нам нужно добавить отрицательное левое поле, равное половине ширины дочернего элемента.
Используя эту логику, мы применяем левое поле в пятьдесят отрицательных пикселей вместе с левым значением 50%, и наш div снова идеально центрируется по оси x.
.container { высота: 300 пикселей; ширина: 70%; фон: #eee; маржа: 10 пикселей автоматически; положение: относительное; } .коробка { высота: 100 пикселей; ширина: 100 пикселей; фон: # 222; позиция: абсолютная; / * Метод центрирования 2 * / маржа: 0px 0 0 -50px; осталось: 50%; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 18 | .контейнер { высота: 300 пикселей; ширина: 70%; фон: #eee; маржа: 10 пикселей автоматически; позиция: относительная; } .box { height: 100px; ширина: 100 пикселей; фон: # 222; позиция: абсолютная; / * Метод центрирования 2 * / margin: 0px 0 0 -50px; Осталось: 50%; } |
Важно отметить, что это также работало бы, если бы наш дочерний элемент имел плавную ширину.Мы используем те же шаги, что и раньше, и получаем что-то вроде следующего:
.container { высота: 300 пикселей; ширина: 70%; фон: #eee; маржа: 10 пикселей автоматически; положение: относительное; } .коробка { высота: 100 пикселей; ширина: 70%; фон: # 222; позиция: абсолютная; / * Метод центрирования 2 * / маржа: 0px 0 0 -35%; / * Половина 70% / * осталось: 50%; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 18 | .контейнер { высота: 300 пикселей; ширина: 70%; фон: #eee; маржа: 10 пикселей автоматически; позиция: относительная; } .box { height: 100px; ширина: 70%; фон: # 222; позиция: абсолютная; / * Метод центрирования 2 * / margin: 0px 0 0 -35%; / * Половина 70% / * Осталось: 50%; } |
Мертвая точка элемента
Теперь, когда у нас есть несколько простых и сложных методов центрирования в нашем поясе инструментов, пришло время решить загадку идеального центрирования элемента как по горизонтали, так и по вертикали.
К счастью, для этого мы можем использовать тот же метод, который мы только что изучили, нам просто нужно учитывать высоту. На этот раз мы также собираемся центрировать родительский и дочерний объекты по вертикали и горизонтали. Вот код для этого:
.container { высота: 300 пикселей; ширина: 300 пикселей; фон: #eee; позиция: абсолютная; маржа: -150px 0 0 -150px; осталось: 50%; верх: 50%; } .коробка { высота: 100 пикселей; ширина: 100 пикселей; фон: # 222; позиция: абсолютная; / * Метод центрирования 2 * / маржа: -50px 0 0 -50px; осталось: 50%; верх: 50%; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 18 19 20 21 22 | .контейнер { высота: 300 пикселей; ширина: 300 пикселей; фон: #eee; позиция: абсолютная; поля: -150 пикселей 0 0 -150 пикселей; Осталось: 50%; верх: 50%; } .box { height: 100px; ширина: 100 пикселей; фон: # 222; позиция: абсолютная; / * Метод центрирования 2 * / поля: -50px 0 0 -50px; Осталось: 50%; верх: 50%; } |
Здесь нужно отметить несколько вещей.Во-первых, на этот раз и родительский и дочерний абсолютно позиционированы. Отсюда я использовал наш трюк с отрицательными полями со свойством left в контейнере div, а затем проделал то же самое с блоком div.
В результате наш контент полностью центрирован и останется таким, пока браузер изменяет размер в любом направлении (даже по вертикали!). Нажмите на изображение ниже, чтобы поработать с живой демонстрацией.
Центрирование текста
В качестве следующего трюка я научу вас кое-чему интересному о центрировании текста.Начнем с простого элемента h2 внутри контейнера div.
Теперь я уверен, что вы уже знаете, как центрировать этот текст по горизонтали в пространстве. Обычно это одна из первых вещей, которую вы изучаете в CSS. Просто установите для свойства text-align значение center.
.container { высота: 400 пикселей; ширина: 400 пикселей; фон: #eee; маржа: 50 пикселей автоматически; } h2 { шрифт: 40px / 1 Helvetica, без засечек; выравнивание текста: центр; }
.контейнер { высота: 400 пикселей; ширина: 400 пикселей; фон: #eee; маржа: 50 пикселей автоматически; } h2 { шрифт: 40 пикселей / 1 Helvetica, без засечек; выравнивание текста: по центру; } |
Легко, правда? Но теперь предположим, что мы хотим также центрировать эту строку текста по вертикали. Если бы это был абзац, мы, вероятно, приняли бы во внимание описанные выше методы, но поскольку это всего лишь одна строка, мы можем использовать изящный трюк.
Все, что нам нужно сделать, это установить для свойства line-height высоту контейнера. Я сделал это ниже, используя сокращенный синтаксис шрифта.
.container { высота: 200 пикселей; / * Устанавливаем это значение для высоты строки * / ширина: 400 пикселей; фон: #eee; маржа: 150 пикселей авто; } h2 { шрифт: 40px / 200px Helvetica, без засечек; выравнивание текста: центр; }
. Контейнер { высота: 200 пикселей; / * Устанавливаем это значение для line-height * / width: 400px; фон: #eee; маржа: 150 пикселей авто; } h2 { шрифт: 40px / 200px Helvetica, без засечек; выравнивание текста: по центру; } |
Предупреждение: Этот трюк работает только с одной строкой текста и является немного хакерским, поэтому он может не подходить для всех ситуаций.
Центрирование фонового изображения
Последнее, чему мы научимся центрировать, — это фоновое изображение CSS. Для начала мы создадим еще один контейнерный div, но на этот раз оставим его пустым и добавим изображение с помощью CSS.
.container { высота: 300 пикселей; ширина: 300 пикселей; маржа: 150 пикселей авто; фон: #eee url (http://lorempixum.com/100/100/nature/4) no-repeat; }
.контейнер { высота: 300 пикселей; ширина: 300 пикселей; маржа: 150 пикселей авто; фон: #eee url (http://lorempixum.com/100/100/nature/4) no-repeat; } |
Как видите, по умолчанию изображение появляется в верхнем левом углу, если не задан повтор. Однако оказывается, что вы можете переместить его в один из девяти различных заранее назначенных слотов. Они показаны ниже:
Мы выполняем это перемещение с помощью свойства background-position .Просто вызовите это свойство и установите любое из значений, перечисленных выше.
.container { высота: 300 пикселей; ширина: 300 пикселей; маржа: 150 пикселей авто; фон: #eee url (http://lorempixum.com/100/100/nature/4) no-repeat; background-position: верхний центр; }
. Контейнер { высота: 300 пикселей; ширина: 300 пикселей; маржа: 150 пикселей авто; фон: #eee url (http: // lorempixum.com / 100/100 / nature / 4) без повтора; background-position: вверху по центру; } |
В качестве альтернативы мы можем использовать для этого сокращенный синтаксис. Просто добавьте одно из значений в конец потока значений в фоновом свойстве .
.container { высота: 300 пикселей; ширина: 300 пикселей; маржа: 150 пикселей авто; фон: #eee url (http://lorempixum.com/100/100/nature/4) центр без повтора; }
.контейнер { высота: 300 пикселей; ширина: 300 пикселей; маржа: 150 пикселей авто; фон: #eee url (http://lorempixum.com/100/100/nature/4) центр без повторов; } |
Заключение
Вот и все! Теперь вы должны быть полностью уверены в своей способности справиться практически с любой ситуацией центрирования с помощью CSS, от точного центрирования div до вертикального центрирования строки текста внутри его контейнера и за его пределами.
Как я могу центрировать абсолютно позиционированный элемент в div?
Центр абсолютного деления по вертикали
Это можно сделать с помощью display: table; в родительском div и display: table-cell; вертикальное выравнивание: по центру; в дочернем div
Размещение элементов в Интернете, Центрирование с использованием абсолютного положения · Добавьте слева: 50% к элементу, который нужно центрировать. · Добавьте отрицательное левое поле, равное половине ширины CSS, чтобы расположить абсолютные центральные элементы по горизонтали. Чтобы позиционировать абсолютный центр элемента по горизонтали, вам понадобится контейнер с фиксированной шириной, свойства left и right должны быть установлены на 0 (ноль), а поля (справа и слева) должны быть установлены на auto.Не забудьте добавить относительное положение к основному контейнеру.
Горизонтальное центрирование абсолютного элемента, #somelement {width: 200px; позиция: абсолютная; осталось: 50%; Если вы знаете ширину, вы также можете использовать третий вариант, и он будет по центру. Центрирование абсолютно позиционированного элемента — это проблема CSS, которая возникает время от времени. Посмотрим, как это делается.
Центрировать div по горизонтали и вертикали
Макет CSS — горизонтальное и вертикальное выравнивание, Центрирование элементов в CSS — это постер жалобы CSS.Почему и по горизонтали, и по вертикали 4) Кроме того, в том же перо элемент не может оставаться по центру по вертикали, если у него есть родственный элемент, который растягивает вертикальную высоту родителя. Есть ли способ ЦЕНТРИРОВАТЬ A DIV по вертикали и горизонтали, но, что важно, содержимое не будет обрезано, когда окно меньше содержимого. Div должен иметь цвет фона, ширину и высоту. Я всегда центрировал div с абсолютным позиционированием и отрицательными полями, как в приведенном примере.
Центрирование в CSS: полное руководство, Попробовав много вещей, я нашел способ, который работает. Я делюсь этим здесь, если это кому-то будет полезно. Вы можете увидеть, как это работает: http://jsbin.com/iquviq/30/edit .content {width: элементы по центру по вертикали. Чтобы вертикально центрировать элементы по оси Y, мы можем использовать align-items: center; свойство для вертикального выравнивания наших элементов. Обратите внимание на CSS здесь, поскольку тело является нашим родительским контейнером, мы гарантируем, что он расширяет высоту на 100%, а затем также делаем тег раздела на 100% по высоте.
Центрирование DIV по горизонтали и вертикали, Центрирование элемента по горизонтали и вертикали — очень распространенный вопрос на собеседовании. Предположим, что дочерний элемент окружен родительским элементом. Для горизонтального центрирования блочного элемента (например,
Положение CSS: абсолютное центрирование по горизонтали
Абсолютное центрирование в CSS. Если вы хотите центрировать что-либо…, Если вы хотите центрировать что-либо по горизонтали в CSS, вы можете сделать это просто с помощью text-align: center; (при работе со строчными элементами) или маржа: 0 авто; (при работе с блочным элементом). Установка левого и правого на ноль приведет к горизонтальному растяжению абсолютно позиционированного элемента. Теперь волшебство происходит, когда маржа установлена на авто. margin занимает все лишнее пространство (одинаково с каждой стороны), оставляя содержимое до указанной ширины.Это приводит к выравниванию содержимого по центру. — Arjun 05 нояб. 2013 в 10:44
Горизонтальное центрирование абсолютного элемента, #somelement {width: 200px; позиция: абсолютная; осталось: 50%; На этой странице была еще одна проблема с горизонтальным выравниванием, даже если у нее не было CSS для позиционирования абсолютных центральных элементов по горизонтали. Чтобы позиционировать абсолютный центр элемента по горизонтали, вам понадобится контейнер с фиксированной шириной, свойства left и right должны быть установлены на 0 (ноль), а поля (справа и слева) должны быть установлены на auto.Не забудьте добавить относительное положение к основному контейнеру.
Как центрировать по горизонтали элемент с абсолютным позиционированием внутри, Важно установить элемент заголовка в положение position: relative. попробуйте это: #logo {background: red; высота: 50 пикселей; позиция: абсолютная; ширина: 50 пикселей; осталось: 50%; Мы все видели маржу: 0 авто; для горизонтального центрирования, но запас: авто; отказался работать по центрированию по вертикали… до сих пор! Но на самом деле (предупреждение о спойлере!) Для абсолютного центрирования требуется только заявленная высота и следующие стили :.Абсолютный центр {маржа: авто; позиция: абсолютная; верх: 0; слева: 0; внизу: 0; справа: 0; }
Центр по горизонтали абсолютный div
Как центрировать абсолютный div по горизонтали с помощью CSS ?, Вам нужно установить left: 0 и right: 0. Это указывает, как далеко нужно сместить края полей от сторон окна. Как «верх», но указывает, как Ага. Это правильно, если использовать «выравнивание текста: центр;» и «слева: 0; справа: 0;» позволит вам позиционировать div в абсолютном положении, сохраняя его горизонтально по центру.- Стерлинг Борн, 29 сен. ’14 в 19:32
Горизонтальное центрирование абсолютного элемента, #somelement {width: 200px; позиция: абсолютная; осталось: 50%; На этой странице была еще одна проблема с горизонтальным выравниванием, даже если у нее не было CSS для позиционирования абсолютных центральных элементов по горизонтали. Чтобы позиционировать абсолютный центр элемента по горизонтали, вам понадобится контейнер с фиксированной шириной, свойства left и right должны быть установлены на 0 (ноль), а поля (справа и слева) должны быть установлены на auto.Не забудьте добавить относительное положение к основному контейнеру.
Абсолютное центрирование в CSS. Если вы хотите центрировать что-либо…, Если вы хотите центрировать что-либо по горизонтали в CSS, вы можете сделать это просто с помощью text-align: center; (при работе со встроенными элементами) или Некоторые плакаты упоминали способ центрирования CSS 3 с помощью display: box .. Этот синтаксис устарел и больше не должен использоваться. [См. Также этот пост] .. Итак, для полноты картины, вот последний способ центрирования в CSS 3 с помощью модуля Flexible Box Layout Module.
Расположить элемент посередине div
Как и в прошлый раз, вы должны знать ширину и высоту элемента, который вы хотите центрировать. Установите для свойства display родительского элемента значение relative. Затем установите для свойства display дочернего элемента значение absolute, top до 50% и left до 50%. Это просто центрирует верхний левый угол дочернего элемента по вертикали и горизонтали.
Для блочных элементов вертикальное выравнивание элементов затруднено и зависит от ситуации. Если дочерний элемент может иметь фиксированную высоту, вы можете добавить position: absolute и указать его top, height, margin-top, position.Используйте свойство position с «относительным» значением для родительского элемента, чтобы разместить его относительно его нормального положения.
Чтобы разместить HTML-элемент
Позиционировать абсолютный центр div
Позиционирование элементов в Интернете, Добавьте отрицательное левое поле, равное половине ширины элемента.Мне нужно разместить элемент div (с position: absolute;) в центре моего окна. Но у меня возникают проблемы с этим, потому что ширина неизвестна .. Я пробовал это. Но его нужно отрегулировать, так как ширина отзывчивая.
Абсолютное горизонтальное и вертикальное центрирование в CSS, Далее мы проделаем аналогичный процесс для вертикальной оси. Результат: Пояснение: Здесь левому отводится 50%, чтобы разместить его по центру горизонтали. Преобразование используется для оттягивания элемента на половину его ширины, чтобы поместить его точно по центру от середины элемента.left: 50% относительно родительского элемента, в то время как преобразование translate относится к ширине / высоте элементов.
Центрировать абсолютное позиционирование Div, А затем добавить отрицательное верхнее поле, равное половине его высоты. Как центрировать Div по вертикали и горизонтали с помощью CSS Absolute Positioning и Negative Margins. Это очень похоже на метод выше, чтобы центрировать элемент по вертикали. Как и в прошлый раз, вы должны знать ширину и высоту элемента, который вы хотите центрировать.Установите для свойства display родительского элемента значение relative.
Центр div по вертикали и горизонтали, адаптивный
Выровнять div по горизонтали и вертикали по центру страницы (адаптивный, .container {display: flex; justify-content: center; align-items: center; width: 100%; height: 100vh;}