Html div relative bottom

How to align content of a div to the bottom

The header section is fixed height, but the header content may change. I would like the content of the header to be vertically aligned to the bottom of the header section, so the last line of text «sticks» to the bottom of the header section. So if there is only one line of text, it would be like:

----------------------------- | Header title | | | | header content (resulting in one line) -----------------------------
----------------------------- | Header title | | header content (which is so | much stuff that it perfectly | spans over three lines) -----------------------------

29 Answers 29

Relative+absolute positioning is your best bet:

#header < position: relative; min-height: 150px; >#header-content < position: absolute; bottom: 0; left: 0; >#header, #header *
 

Title

And in the last place, where this might not be the case, they would be of long standing, would have taken deep root, and would not easily be extirpated. The scheme of revising the constitution, in order to correct recent breaches of it, as well as for other purposes, has been actually tried in one of the States.

But you may run into issues with that. When I tried it I had problems with dropdown menus appearing below the content. It’s just not pretty.

Читайте также:  Прицелы моды для css v34

Honestly, for vertical centering issues and, well, any vertical alignment issues with the items aren’t fixed height, it’s easier just to use tables.

Источник

Свойство position

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

position: static

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

Его можно также явно указать через CSS-свойство:

Такая запись встречается редко и используется для переопределения других значений position .

Здесь и далее, для примеров мы будем использовать следующий документ:

 
Без позиционирования ("position: static").

Заголовок

А тут - всякий разный текст.
. В две строки!

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

Элемент с position: static ещё называют не позиционированным.

position: relative

Относительное позиционирование сдвигает элемент относительно его обычного положения.

Для того, чтобы применить относительное позиционирование, необходимо указать элементу CSS-свойство position: relative и координаты left/right/top/bottom .

Этот стиль сдвинет элемент на 10 пикселей относительно обычной позиции по вертикали:

position: relative; top: 10px;
 h2 
Заголовок сдвинут на 10px вниз.

Заголовок

А тут - всякий разный текст.
. В две строки!

Координаты

Для сдвига можно использовать координаты:

  • top – сдвиг от «обычной» верхней границы
  • bottom – сдвиг от нижней границы
  • left – сдвиг слева
  • right – сдвиг справа

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

Возможны отрицательные координаты и координаты, использующие другие единицы измерения. Например, left: 10% сдвинет элемент на 10% его ширины вправо, а left: -10% – влево. При этом часть элемента может оказаться за границей окна:

 h2 
Заголовок сдвинут на 10% влево.

Заголовок

А тут - всякий разный текст.
. В две строки!

Свойства left/top не будут работать для position:static . Если их всё же поставить, браузер их проигнорирует. Эти свойства предназначены для работы только с позиционированными элементами.

position: absolute

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

  1. Элемент исчезает с того места, где он должен быть и позиционируется заново. Остальные элементы, располагаются так, как будто этого элемента никогда не было.
  2. Координаты top/bottom/left/right для нового местоположения отсчитываются от ближайшего позиционированного родителя, т.е. родителя с позиционированием, отличным от static . Если такого родителя нет – то относительно документа.
  • Ширина элемента с position: absolute устанавливается по содержимому. Детали алгоритма вычисления ширины описаны в стандарте.
  • Элемент получает display:block , который перекрывает почти все возможные display (см. Relationships between „display“, „position“, and „float“).

Например, отпозиционируем заголовок в правом-верхнем углу документа:

 h2 
Заголовок в правом-верхнем углу документа.

Заголовок

А тут - всякий разный текст.
. В две строки!

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

Так как при position:absolute размер блока устанавливается по содержимому, то широкий Заголовок «съёжился» до прямоугольника в углу.

Иногда бывает нужно поменять элементу position на absolute , но так, чтобы элементы вокруг не сдвигались. Как правило, это делают, меняя соседей – добавляют margin/padding или вставляют в документ пустой элемент с такими же размерами.

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

Браузер растянет такой элемент до границ.

Источник

position div to bottom of containing div

relative, yes, and then it doesn’t know how large it needs to be to hold the child-div content, unfortunately, so unless that is a static-value, back to the original question. How to place one div at the bottom of another div (implied: «without breaking everything»).

3 Answers 3

Absolute positioning looks for the nearest relatively positioned parent within the DOM, if one isn’t defined it will use the body.

absolute searches for the nearest relative parent. By default it’s the body of the document . So if no parent DOM object ( .outside ) has the property of being relative your .inside will go to to the bottom of the body tag.

«Absolute positioning looks for the nearest relatively positioned parent within the DOM, if one isn’t defined it will use the body.» You just explained so much for me! Now I really start to understand CSS. THANK YOU!

Absolute actually searches for the nearest non default (= static) positioned ancestor, which is often relatively positioned. It also doesn’t have to be a direct parent but can for example be a grandparent.

This depends on constant heights, which is VERY BAD. A simple change of font, font size, padding, margins and god knows what else demands experimentation to guess the new height.

Assign position:relative to .outside , and then position:absolute; bottom:0; to your .inside .

I can not use position: absolute; for second div. that is my restriction, can you give me other options?

Elements that are positioned relatively are still considered to be in the normal flow of elements in the document. In contrast, an element that is positioned absolutely is taken out of the flow and thus takes up no space when placing other elements. The absolutely positioned element is positioned relative to nearest positioned ancestor. If a positioned ancestor doesn’t exist, the initial container is used.

The «initial container» would be , but adding the above makes .outside positioned.

Linked

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.7.27.43548

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

Align DIV to bottom of the page

I have a DIV that needs to be aligned to the bottom of a search result page, problem is whenever there is no search result or less rows of search result displayed on the page, the DIV goes up from the bottom of the page. enter image description herebut it should be placed like this enter image description hereand whenever there are more rows and the page can be scrolled down, the DIV should be place like this. enter image description hereMy currrent code looks like this

  
// DIV stuff
#bottom-stuff < padding: 0px 30px 30px 30px; margin-left:150px; position: relative; >#bottom

6 Answers 6

Right I think I know what you mean so lets see.

HTML:

 
Results will go here
Footer will always be at the bottom

CSS:

html, body < margin:0; padding:0; height:100%; >div < outline: 1px solid; >#con < min-height:100%; position:relative; >#content < height: 1000px; /* Changed this height */ padding-bottom:60px; >#footer

This demo have the height of content height: 1000px; so you can see what it would look like scrolling down the bottom.

This demo has the height of content height: 100px; so you can see what it would look like with no scrolling.

So this will move the footer below the div content but if content is not bigger then the screen (no scrolling) the footer will sit at the bottom of the screen. Think this is what you want. Have a look and a play with it.

Updated fiddles so its easier to see with backgrounds.

Источник

css — Align relative positioned div to bottom of other

When new menu items be added, they should make menu go up, not down, this is why I need to do what I said above. The fist image below illustrates how I want to do and second how it actually is (lighter parts are within the darker and yes, it is a mobile layout):

First Image:

First Image

Second Image:

Second Image

And please, no JavaScript, just pure CSS. Thanks for attention, bye.

3 Answers 3

try changing display property of the #header to table, display of the #logo and #menu to ‘table-cell’ and verticaly align them to the bottom — it should do what you need

selector in your css #header #logo is too much because identifiers cannot duplicate so #logo is really enough

I need to use display: inline-block; in #header to it be centered by text-align: center; on #page. And display: table/table-cell; didn’t works as I expect. #menu is vertically centered and a big space is added between it and #logo, at least is what your example shows. Because of all this details, desired alignment is being so hard to me. Thanks for answering!

#header will be always centered firstly because it has left and right margin set to auto , secondly its width is set to 100% which means that you will never see if it is centered or aligned left or right. My example works exactly as you wanted — #menu is vertically aligned to the bottom and all the spaces you have seen were made by margins and padding of an ul element. I just added margin:0;padding:0; to css of UL and now it looks exactly as your image: jsfiddle.net/6xBvR/2

Seems to work but I tried here and margin:0; padding:0; in ul is making no difference. See: i.imgur.com/gsBjp4c.jpg And #logo seems to be a little above #menu on bottom border. Note: all elements have margin and padding set to 0 here (applied to global selector).

It is because alignment of an img . To fix it just add to css one more rule: #logo img < vertical-align:bottom; >. If you want to control spacing between #logo and #menu set width:1% on #logo and now you can control it with margin-right of the img . jsfiddle.net/6xBvR/5

Many thanks! Your soluctions worked fine, except I couldn’t make #menu to fill restaming space to #logo . I got perfect result using Flexbox, which I think is a more beautiful way to do. As Flexbox isn’t yet fully supported by browsers, I’ll use your way as a fallback if I get #menu filling the space (I tried several ways, but no one solved).

Источник

Оцените статью