Reputation: 47101
DEMO can be found at:
http://www.bootply.com/VZ7gvA7ndE#
I set the height of div
to 100px and want to show the label
at the bottom of the div
. I use
#contain-word-lab {
vertical-align: bottom;
margin-bottom: 5px;
}
However, this doesn't work at all. The label
still align to the top of the div
.
Does anyone have any ideas about this? Why vertical-align
doesn't work here? Thanks!
Upvotes: 8
Views: 43644
Reputation: 99564
vertical-align: bottom
is not working aloneSince the height of the parent element is greater than the computed height of the label, Using vertical-align: bottom
won't move that (inline) element to the bottom of the parent.
Because in an inline flow, vertical-align
determines how the elements are positioned based on their parent's baseline; And using that property on the label won't alter the position of baseline of its parent.
Inline level elements (inline
, inline-block
) are sitting in their baseline by default. And if they have different heights, the tallest element will determine where the others whould be placed.
I.e. In an inline flow, the tallest element will affect/move the baseline of the parent:
Hence in cases where the parent has an explicit height
, if we could have an inline child which has the exact same height as the parent (a full-height child), it would affect the inline flow and move the baseline down:
And in order to keep elements (including letters having descenders) within the parent, we should align them vertically by vertical-align: bottom;
declaration.
10.8 Line height calculations: 'vertical-align' property
baseline
Align the baseline of the box with the baseline of the parent box. If the box does not have a baseline, align the bottom margin edge with the parent's baseline.
bottom
Align the bottom of the aligned subtree with the bottom of the line box.
Therefore you could create a full-height element (Personally I'd rather go with pseudo-elements) within the parent to align the label at the bottom.
#contain-word-div:after {
content: "";
display: inline-block;
height: 100%; /* Let it be as height as the parent */
vertical-align: bottom; /* Align the element at the bottom */
}
#contain-word-lab {
display: inline-block;
vertical-align: bottom; /* Align the element at the bottom */
}
Upvotes: 26
Reputation: 139
quick example
if you add
position:absolute;
bottom:0px;
to the label it likes to keep it at the bottom
Upvotes: 8
Reputation: 6442
vertical-align
tends to work best when the containers are table/table-like elements (eg. table
, tr
, td
, th
) or inline text elements (eg span
). However, because table
elements for layout are not a good idea. We can make other elements function like them using the display:table;
and display:table-cell;
css properties.
Try applying the following css:
#contain-word-div {
height: 100px;
border: 1px solid black; /* added just for visualising position */
display:table;
}
#contain-word-lab {
display:table-cell;
vertical-align: bottom;
padding-bottom: 5px; /* use padding to give the label more height rather than trying to push the "cell" upwards */
}
Upvotes: 1
Reputation: 1643
The "bottom" won't work anyway :) Try just bottom
, without ".
Plus your label needs a height too. Now it's auto height is used and this is exactly the font-size. I'd suggest adding a line-height: 100px;
to your label.
Upvotes: 0
Reputation: 13998
Apply position:relative
to the parent div and make your label as position:absolute
.
#contain-word-div {
height: 100px;
position:relative;
}
#contain-word-lab {
position:absolute;
bottom:5px;
}
Upvotes: 3
Reputation: 3289
Try to do following
#contain-word-lab {
vertical-align='bottom';/***Remove This***/
bottom:2px;
position:absolute;
}
Upvotes: 0
Reputation: 86174
vertical-align
only applies to table cells. If you want to position an element at the bottom of its parent, you need to give it position: absolute;
and bottom: 0;
.
Upvotes: 0
Reputation: 39
set it as position:absolute;
#contain-word-lab {
position:absolute;
bottom:5px;
}
Upvotes: 3