Mere
Flexbox: centrer horisontalt og vertikalt
Sådan centreres div horisontalt og vertikalt i containeren ved hjælp af flexbox. I nedenstående eksempel vil jeg have hvert nummer under hinanden (i rækker), som er centreret vandret.
.flex-container {
padding: 0;
margin: 0;
list-style: none;
display: flex;
align-items: center;
justify-content: center;
}
row {
width: 100%;
}
.flex-item {
background: tomato;
padding: 5px;
width: 200px;
height: 150px;
margin: 10px;
line-height: 150px;
color: white;
font-weight: bold;
font-size: 3em;
text-align: center;
}
<div class="flex-container">
<div class="row">
<span class="flex-item">1</span>
</div>
<div class="row">
<span class="flex-item">2</span>
</div>
<div class="row">
<span class="flex-item">3</span>
</div>
<div class="row">
<span class="flex-item">4</span>
</div>
</div>
579
3
Jeg tror, du ønsker noget i retning af følgende.
Se demo på: http://jsfiddle.net/audetwebdesign/tFscL/
Dine
.flex-item
-elementer skal være på blokniveau (div
i stedet forspan
), hvis du vil have højde og top/bottom padding til at fungere korrekt.På
.row
skal du også indstille bredden tilauto
i stedet for100%
.Dine
.flex-container
-egenskaber er fine.Hvis du ønsker, at
.row
skal være centreret lodret i visningsporten, skal du tildele 100% højde tilhtml
ogbody
, og du skal også fjernebody
-marginerne.Bemærk, at
.flex-container
har brug for en højde for at se effekten af den vertikale justering, ellers beregner containeren den mindste højde, der er nødvendig for at omslutte indholdet, hvilket er mindre end visningsportens højde i dette eksempel.Fodnote: Egenskaberne
flex-flow
,flex-direction
ogflex-wrap
kunne have gjort dette design lettere at implementere. Jeg mener ikke, at.row
-containeren er nødvendig, medmindre du ønsker at tilføje noget styling omkring elementerne (baggrundsbillede, rammer osv.).En nyttig ressource er: http://demo.agektmr.com/flexbox/
Sådan centrerer du elementer lodret og vandret i Flexbox
Nedenfor er to generelle centreringsløsninger.
Den ene for vertikalt justerede flexelementer (
flex-direction: column
) og den anden for horisontalt justerede flexelementer (flex-direction: row
).I begge tilfælde kan højden af de centrerede div'er være variabel, udefineret, ukendt, ukendt, hvad som helst. Højden af de centrerede divs er ligegyldig.
Her er HTML'en for begge:
CSS (undtagen dekorative stilarter)
[]]2
[DEMO]](http://jsfiddle.net/8o29y7pd/)
Når flexartikler er stablet vandret:
Tilpas reglen
flex-direction
fra ovenstående kode.[]]3
[DEMO]](http://jsfiddle.net/8o29y7pd/3/)
Centrering af indholdet af flexelementerne
Anvendelsesområdet for en [flex formateringskontekst] (https://www.w3.org/TR/css-flexbox-1/#flex-containers) er begrænset til et forælder-barn-forhold. Efterkommere af en flexcontainer ud over børnene deltager ikke i flexlayout og ignorerer flexegenskaber. Flex-egenskaber kan ikke arves efter børn.
Derfor skal du altid anvende
display: flex
ellerdisplay: inline-flex
på et overordnet element for at anvende flexegenskaber på barnet.Hvis du vil centrere tekst eller andet indhold i et flexelement vertikalt og/eller horisontalt, skal du gøre elementet til en (indlejret) flexcontainer og gentage centreringreglerne.
Flere detaljer her: https://stackoverflow.com/q/25311541/3597276
Alternativt kan du anvende
margin: auto
på indholdselementet i flexelementet.Få mere at vide om flex
auto
-marginer her: [Metoder til justering af Flex-elementer] (https://stackoverflow.com/a/33856609/3597276) (se boks nr. 56).Centrering af flere linjer af flexelementer
Når en flexcontainer har flere linjer (på grund af ombrydning), er egenskaben
align-content
nødvendig for justering på tværs af akserne.Fra specifikationerne:
Flere detaljer her: https://stackoverflow.com/q/42613359/3597276
Browserunderstøttelse
Flexbox understøttes af alle større browsere [undtagen IE < 10] (http://caniuse.com/#search=flex). Nogle nyere browserversioner, såsom Safari 8 og IE10, kræver leverandørpræfikser. For en hurtig måde at tilføje præfikser på er det muligt at bruge Autoprefixer. Flere oplysninger i dette svar.
Centreringsløsning for ældre browsere
For en alternativ centreringsløsning ved hjælp af CSS-tabeller og positioneringsegenskaber se dette svar: https://stackoverflow.com/a/31977476/3597276
Glem ikke at bruge vigtige browserspecifikke attributter:
align-items: center; -->
justify-content: center; -->
Du kan læse disse to links for bedre at forstå flex: http://css-tricks.com/almanac/properties/j/justify-content/ og http://ptb2.me/flexbox/
Held og lykke.