Say I have the following CSS and HTML code:
#header {
height: 150px;
}
<div id="header">
<h1>Header title</h1>
Header content (one or multiple lines)
</div>
The header section is fixed height, but the header content may change. I would like to 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)
-----------------------------
And if there were three lines:
-----------------------------
| Header title
|
| header content (which is so
| much stuff that it perfectly
| spans over three lines)
-----------------------------
How can this be done in CSS?
Relative+absolute positioning is your best bet:
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.
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.
Example: Can you do this HTML layout without using tables?
Inline or inline-block elements can be aligned to the bottom of block level elements if the line-height of the parent/block element is greater than that of the inline element.*
markup:
css:
*make sure you're in standards mode
If you're not worried about legacy browsers use a flexbox.
The parent element needs its display type set to flex
Then you set the child element's align-self to flex-end.
Here's the resource I used to learn: http://css-tricks.com/snippets/css/a-guide-to-flexbox/
Here is another solution using flexbox but without using flex-end for bottom alignment. The idea is to set
margin-bottom
on h1 to auto to push the remaining content to the bottom:We can also do the same with
margin-top:auto
on the text but in this case we need to wrap it inside adiv
orspan
:You can simply achieved flex
Use CSS positioning.
As cletus noted, you need identify the header-content to make this work.