float does not work in a flex container
HtmlCssFlexboxHtml Problem Overview
I want to position text (foo link) in right of the footer element.
I need footer display to remain flex
.
But when I set it to flex
, float:right
for span doesn't work anymore.
<footer style="display: flex;">
<span style="text-align: right;float: right;">
<a>foo link</a>
</span>
</footer>
Html Solutions
Solution 1 - Html
The float
property is ignored in a flex container.
From the flexbox specification:
> 3. Flex Containers: the flex
and inline-flex
display
> values
>
> A flex container establishes a new flex formatting context for its
> contents. This is the same as establishing a block formatting context,
> except that flex layout is used instead of block layout.
>
> For example, floats do not intrude into the flex container, and the
> flex container’s margins do not collapse with the margins of its
> contents.
>
> float
and clear
do not create floating or clearance of flex item, and do not take it out-of-flow.
Instead, just use flex properties:
footer {
display: flex;
justify-content: flex-end;
}
<footer>
<span>
<a>foo link</a>
</span>
</footer>
If you have more items in the footer, and need other alignment options, then here are two guides:
Solution 2 - Html
It works if you add margin-left: auto;
like I did here in the jsfiddle: https://jsfiddle.net/dhsgvxdx/3/
<body>
<footer style="display: flex;">
<span style="text-align: right;float: right; margin-left: auto;">
<a>foo link</a>
</span>
</footer>
</body>
Solution 3 - Html
If this footer is only to contain a right-aligned item, you can simply apply justify-content: flex-end
to the flex container. This way, you do not have to add any styles to its children.
footer {
display: flex;
justify-content: flex-end;
}
Solution 4 - Html
By default, flex items are laid out in the source order. However, the order property controls the order in which they appear in the flex container.
.item {
order: 3; /* default is 0 */
}