To pytanie dotyczy przeglądarki z pełną obsługą css3, w tym Flexbox.
Mam pojemnik elastyczny z kilkoma przedmiotami. Wszystkie są uzasadnione do flex-start, ale chcę, aby ostatni .end
element był uzasadniony do flex-end. Czy istnieje dobry sposób na zrobienie tego bez modyfikowania kodu HTML i bez uciekania się do pozycjonowania bezwzględnego?
.container {
display: flex;
flex-direction: column;
outline: 1px solid green;
min-height: 400px;
width: 100px;
justify-content: flex-start;
}
p {
height: 50px;
background-color: blue;
margin: 5px;
}
<div class="container">
<p></p>
<p></p>
<p></p>
<p class="end"></p>
</div>
auto
ilustracje marginesów tutaj: stackoverflow.com/a/33856609/3597276Odpowiedzi:
Dlatego możesz użyć
margin-top: auto
do rozłożenia przestrzeni między innymi elementami a ostatnim elementem.Spowoduje to umieszczenie ostatniego elementu na dole.
p:last-of-type { margin-top: auto; }
Pokaż fragment kodu
.container { display: flex; flex-direction: column; border: 1px solid #000; min-height: 200px; width: 100px; } p { height: 30px; background-color: blue; margin: 5px; } p:last-of-type { margin-top: auto; }
<div class="container"> <p></p> <p></p> <p></p> </div>
Podobnie możesz również użyć
margin-left: auto
lubmargin-right: auto
do tego samego wyrównania w poziomie.p:last-of-type { margin-left: auto; }
Pokaż fragment kodu
.container { display: flex; width: 100%; border: 1px solid #000; } p { height: 50px; width: 50px; background-color: blue; margin: 5px; } p:last-of-type { margin-left: auto; }
<div class="container"> <p></p> <p></p> <p></p> <p></p> </div>
źródło
margin: 0 auto
do wyśrodkowania w poziomie. Elementy Flexbox uwzględniają margines i uważam, żemargin: auto
zasadniczo zapewni to możliwie największą przestrzeń między rodzeństwem. Zobacz: w3.org/TR/css-flexbox-1/#auto-marginsmargin: auto
na elemencie elastycznym mówi mu, aby stworzyć jak najwięcej miejsca w tym kierunku.Prior to alignment via justify-content and align-self, any positive free space is distributed to auto margins in that dimension.
Ta zasada flexbox działa również w poziomie
Podczas obliczania elastycznych baz i elastycznych długości, automatyczne marginesy są traktowane jako 0.
Przed wyrównaniem za pomocą justify-content i align-self każda dodatnia wolna przestrzeń jest rozdzielana na automatyczne marginesy w tym wymiarze.
Ustawienie automatycznego lewego marginesu dla ostatniej pozycji wykona pracę.
.last-item { margin-left: auto; }
Przykład kodu:
.container { display: flex; width: 400px; outline: 1px solid black; } p { height: 50px; width: 50px; margin: 5px; background-color: blue; } .last-item { margin-left: auto; }
<div class="container"> <p></p> <p></p> <p></p> <p class="last-item"></p> </div>
Codepen Snippet
Może to być bardzo przydatne w przypadku stopek pulpitu.
Tak jak tutaj Envato z logo firmy.
Codepen Snippet
źródło