CSS, ondanks zijn relatief lage ervaren skill-plafond, lijkt altijd een moordend element in zijn voordeel te hebben. Weet je nog hoe mediaquery's een responsieve lay-out mogelijk maakten en een revolutie teweegbrachten in de front-end ontwikkeling? Nou, vandaag gaan we het hebben over een nieuwe lay-outmodus, genaamd flexbox - nieuw in CSS3. Ik weet zeker dat je eropuit gaat! Laten we aan de slag na de sprong.
Latere wijzigingen in technieken & softwareBepaalde aspecten van toepassingen of technieken die in deze zelfstudie worden gebruikt, zijn gewijzigd sinds de publicatie oorspronkelijk werd gepubliceerd. Dit maakt het misschien een beetje moeilijk om mee te volgen. We raden u aan deze meer recente zelfstudies over hetzelfde onderwerp te bekijken:
Momenteel is de CSS Flexbox-specificatie een werkconcept en dingen zullen veranderen! De voorbeelden in deze zelfstudie kunnen mogelijk in de toekomst niet werken, omdat browsers hun flexboximplementatie aanpassen aan de specificaties. Het doel van deze zelfstudie is om u een basiskennis van CSS flexbox te bieden en aan te tonen hoe u deze in uw webpagina's kunt gebruiken.
Houd er rekening mee dat deze zelfstudie webkit / niet-vendor-prefixed voorbeelden gebruikt ter wille van de bondigheid. Bekijk caniuse.com voor een lijst met browsers die de flexboxmodule ondersteunen en verwijs naar de benodigde voorvoegsels in uw projecten..
CSS Flexbox is in wezen een lay-outmodus. Er zijn bestaande lay-outmodi binnen CSS en ze zijn er al een lange tijd. Een voorbeeld van een lay-outmodus is blok (bijvoorbeeld weergave: blok). Bloklay-outs zijn een prima manier om hele documenten op te maken, veel elementen worden standaard door de browser behandeld als blokniveau. deze omvatten gemeenschappelijke elementen, zoals paragrafen en div
s.
Af en toe, als een element geen blok is, is dat waarschijnlijk zo in lijn. Inline level-elementen bevatten de ankertag, invoertag en de sterke tag. Met de ontwikkelaarstools in Chrome kunt u de 'berekende stijl' van een element bekijken, wat een geweldige manier is om te bepalen welke CSS-eigenschappen en -waarden zijn toegepast op elementen die niet expliciet zijn ingesteld door de ontwikkelaar.
Hier is een snelle tip voor toegang tot de computergestuurde stijl van een element met de methode window.getComputedStyle van JavaScript.
var elem = document.querySelector ('h1 # someId'); window.getComputedStyle (elem) .display; //blok
Block en inline layout modes opzij, CSS heeft ook layled-modi voor lay-outs en lay-outs. Naar de reden van de lay-outmodus wordt verwezen, omdat flexbox een nieuwe lay-outmodus is, waardoor er meer flexibiliteit is bij het ontwerpen van webpagina's.
De lay-out van de flexbox biedt ons eenvoudige technieken om eenvoudig de manier te bepalen waarop items moeten worden ingedeeld.
Om een element te forceren om de flexbox-indeling te gebruiken, voegen we de flexbox
waarde voor de weergave-eigenschap.
#container weergave: flexbox;
Standaard is een flexbox een blokniveauelement; we kunnen een element inline-niveau definiëren zoals:
#container display: inline-flexbox;
Vergelijkbaar met het bovenstaande voorbeeld, wil je de flexbox-lay-out toepassen op de ouder van de kinderen waarvan u de positie wilt bepalen. Laten we kijken naar eenvoudig, levend voorbeeld.
ul / * Oude syntaxis * / weergave: -webkit-box; / * Nieuwe syntaxis * / weergave: -webkit-flexbox;
U zult opmerken dat de elementen van het lijstitem nu horizontaal lopen, vergelijkbaar met hoe ze zouden kunnen weergeven, als we ze hadden gebruikt zweven: links
. De elementen van het lijstitem kunnen nu worden aangeduid als flexbox-items.
Opmerking: een directe afstammeling van een flexbox, die absoluut is gepositioneerd, b.v. gebruik makend van
positie: absoluut
, kan geen flexboxitem zijn, omdat het de gebruikelijke stroom breekt.
U kunt opmerken dat de items (de elementen van het lijstitem) een horizontale stroom hebben aangenomen (de richting van de stroom is ook bekend als de hoofdas). Gelukkig zijn we in staat om deze stroom (en dus wat wordt beschouwd als de hoofdas) te beheersen en het gebruik van drijvers te vermijden!
flex-richting
We kunnen de flex-richting
eigendom en specificeer de richting waarin we onze flexbox-items wensen op te stellen. De accommodatie accepteert rij, rij achteruit, kolom en kolom achteruit
als waarden. De standaardwaarde is rij
.
Met dezelfde markup als het bovenstaande voorbeeld kunnen we nog een CSS-eigenschap toevoegen: waardepaar: (flex-richting: kolom)
ul -webkit-flex-direction: kolom;
Als je meewerkt, ga je gang en probeer het te veranderen kolom
waarde op de flex-richting
eigendom aan column-reverse
, en bekijk hoe de flexbox-items in een kolomvormige lay-out worden weergegeven, maar in de omgekeerde volgorde.
flex-wrap
Standaard is een flexbox een enkele regel. Een die zijn kinderen niet kan bevatten, kan overstromen met de flex-wrap
eigendom; we kunnen de flexbox opdracht geven om multi-line te worden, in welk geval de flexbox-items kunnen omwikkelen. flex-wrap
accepteert de waarden, nowrap
(de standaardwaarde), wikkelen
& wrap-reverse
.
Merk op hoe, in de demo, de items 'overslaan', omdat ze niet kunnen worden ingesloten in hun kleine 100px
ouder. Gebruik de ontwikkelaarstools en wissel de overloop verborgen
en -webkit-flex-wrap
bits. Zonder de flex-wrap
en overloop
eigenschappen, de items hun ouder overlopen.
Er is een handige steno-eigenschap voor flex-richting
en flex-wrap
, zoals hieronder getoond:
flex-richting: rij; flex-wrap: nowrap; // Met behulp van de twee bovenstaande waarden met de flex-flow steno krijgen we: vloed-flow: rij nowrap; // flexrichting: kolom; flex-wrap: wrap; flex-flow: kolomomwikkeling;
Hoewel dit zeker niet het mooiste is dat er is, demonstreert dit voorbeeldmenu enkele toepassingen voor flexbox.
300px
is ingesteld op de flexbox zelf om verpakking te demonstreren.flex-richting: kolom
kan logisch zijn.Wat leuk zou zijn, is om de flexbox-items te instrueren zich te verspreiden en de beschikbare ruimte te gebruiken - zoiets als dit. Dat is waar het flex-eigendom voor is.
Buigen is het vermogen van de container om de breedte of hoogte ervan te wijzigen om de beschikbare ruimte te vullen. "
De buigen
eigendom is een leuke functie; het biedt iets nieuws dat in het verleden moeilijk te bereiken was.
Met deze eigenschap kunnen we een voorkeursgrootte voor onze artikelen instellen. Houd er rekening mee dat de flex-eigenschap wordt toegepast op flexbox-items, niet op de flexbox zelf. De browser zal proberen de grootte van de flexbox-items in te stellen op a per regelbasis. Vervolgens probeert het de resterende vrije ruimte op de items gelijkmatig te verdelen. Als we naar het menu-voorbeeld kijken en de ontwikkelaarstools gebruiken om de berekende breedte van de flexbox-items te ontdekken, zien we dat het 78px. Laten we het verder onderzoeken ...
Je vraagt je waarschijnlijk af, "Hoe kregen de flexbox-items hun extra ruimte wanneer we hun gewenste breedte instelden? 60px
?"
60pxflex
eigendom (dat is een totaal van 180px
).300px
. Dat, minus 180px
(de totale gewenste grootte van de items), is 120px
. Het lijkt er echter niet op dat we daadwerkelijk hebben 120px
van vrije ruimte.margin-right
van 10px
; dat is een totaal van 30px
voor drie items, ons achterlatend 90px
van vrije ruimte.5px
- dat is 5px
van opvulling boven, rechts, onder en links. Dus, vergelijkbaar met de margin-right
eigendom, elk item verbruikt 10px
van opvulling met betrekking tot de breedte. We blijven achter 60px
van vrije ruimte - nou bijna.rand: 1px effen zwart
- 1px
aan de linker- en rechterkant. Een totaal van twee pixels per item, dus voor drie items komt dat 6px
. We zijn nu achtergebleven 54px
van vrije ruimte.54px
van vrije ruimte, kunnen we dat gelijk verdelen over de drie items op de eerste regel - dat is 18px
, per item, wat nu logisch is, waarom, wanneer we een voorkeur hebben voor 60px
, de berekende breedte omgezet in 78px
.Zoals je misschien al geraden had, buigt de laatste regel (met het item 'Contact met ons opnemen') over de volle breedte van de flexbox.
Flexbox-items kunnen verschillende breedten worden gegeven; een item met een buigen
van 2
schijnt zo te zijn twee keer zo flexibel als een item met een buigen
van 1
. Dus als het gaat om het verdelen van vrije ruimte tussen de twee items, is het item met een buigen
van 1
krijgt de helft van de ruimte die het item met een heeft buigen
van 2
ontvangt.
Flexbox geeft ons een eenvoudige manier om bepaalde items te bestellen met behulp van CSS, ongeacht de volgorde waarin ze in het document voorkomen. Hier is een snel voorbeeld.
Gezien de volgende markup:
ul display: -webkit-flexbox; ul li: nth-child (1) -webkit-flex-order: 2;
We kunnen het eerste element van het lijstitem targeten met behulp van de pseudo-klasse nth-child en vervolgens de flex-order
eigendom ervan. Flexbox-items zijn standaard op bestelling 0
. Door het eerste lijstitem op bestelling te plaatsen 2
, de browser toont de items 2 & 3 als eerste, gevolgd door item 1.
We kunnen flexbox-items op de hoofdas uitlijnen met behulp van de flex-pack
eigendom. Deze eigenschap accepteert de volgende waarden:
De demo voor deze zelfstudie bevat enkele voorbeelden van de verschillende soorten uitlijning. Als we naar het jbin-voorbeeld kijken, kunnen we zien dat de items alleen op één as zijn gecentreerd: de hoofdas. Dit is in wezen de as waarop de flexbox-items worden geplaatst.
We kunnen de as veranderen door de flex-richting
eigendom. Door het in te stellen kolom
, het wordt duidelijk dat de hoofdas is veranderd. Om de uitlijning van de dwarsas (de as loodrecht op de hoofdas) die we kunnen gebruiken te beïnvloeden flex-align
.
Ik zou gecentreerd moeten zijn
.flexbox weergave: -webkit-flexbox; -webkit-flex-pack: centrum; -webkit-flex-align: midden; breedte: 50%; hoogte: 100 px; achtergrond: oranje; .flexbox p border: 1px effen groen; opvulling: 5px;
Bekijk zeker de live demo als je in de war bent.
Bedankt voor het lezen en vergeet niet om naar caniuse.com te verwijzen voor een lijst met browsers die de flexbox-module ondersteunen, evenals naar de leveranciersprefixen waarnaar moet worden verwezen.