Przeglądając Githuby i cudze projekty natknąłem się na mega patent na zrobienie layoutu kolumnowego całej strony w Flexboksie. Zazwyczaj do tego lepszy byłby grid, ale ok. Analizujemy.
Dobra, więc mamy jakiś tam reset stylów:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
Autor jeszcze font awesome zaimportował i w tagu html wrzucił fonta, mniejsza. Teraz mamy body:
body {
min-height: 100vh;
background-color: #333;
color: #fff;
padding: 1rem;
display: flex;
flex-direction: column;
}
Nadaliśmy wysokość na cały viewport (minimum), display flex i direction column. To zręby naszego layoutu, teraz elementy będą pokazywać się jeden pod drugim.
My w body zrobimy sobie tag main i on będzie zarówno flex-dzieckiem (body) jak i flex-rodzicem (dla innych elementów). Tak to wygląda:
main {
flex-grow: 1;
margin: auto;
width: 100%;
max-width: 800px;
display: flex;
flex-flow: column nowrap;
}
Może od razu nie czujemy, jak genialne to rozwiązanie, więc rozpiszę:
- Gdyby nie margin auto, main nie byłby wycentrowany (w flex kontenerze marginy centrują i pion i poziom, warto pamiętać)
- Gdyby nie flex grow 1, main nie urósł by ani w dół ani do góry (no chyba, że bez margin auto, wtedy byłby w pozycji 0,0, ale też w dół by nie rósł)
- Jako, że main jest dzieckiem flex layoutu kolumnowego, flex grow dotyczy rośnięcia w height. Zatem potrzebne jest width 100%, aby nam urósł w bok powyżej swój kontent
- Z drugiej strony… potrzebne jest max-width 800px, no chyba, że chcemy, aby rozlał się nam na całą stronę
- Jest też rodzicem flexowym
- Jego dzieci też są stackowane w kolumnach z nowrap, ma być tylko jeden pod drugim (takie mocno mobilne podejście)
- Jeżeli chcemy gdzieś poustawiać coś obok siebie, to robimy tam kolejne dziecko, będące rodzicem (już z row) i mamy elementy obok siebie
Polecam pobawić się czymś takim, bo patent jest mega. Więcej CSS niedługo!