Układ z Flexboxem
Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →
Komponent może określać układ swoich elementów potomnych za pomocą algorytmu Flexbox. Flexbox został zaprojektowany, aby zapewnić spójny układ na różnych rozmiarach ekranów.
Zwykle użyjesz kombinacji właściwości flexDirection, alignItems i justifyContent do osiągnięcia pożądanego układu.
Flexbox działa w React Native tak samo jak w CSS na stronie internetowej, z kilkoma wyjątkami.
Domyślne wartości są inne: flexDirection domyślnie ustawione jest na column zamiast row, alignContent na flex-start zamiast stretch, flexShrink na 0 zamiast 1, a parametr flex obsługuje tylko pojedynczą liczbę.
Flex
Właściwość flex definiuje, jak elementy będą "wypełniać" dostępną przestrzeń wzdłuż głównej osi. Przestrzeń jest dzielona proporcjonalnie do wartości właściwości flex każdego elementu.
W poniższym przykładzie czerwony, pomarańczowy i zielony widok są elementami potomnymi kontenera z ustawionym flex: 1. Czerwony widok używa flex: 1, pomarańczowy flex: 2, a zielony flex: 3. 1+2+3 = 6, co oznacza, że czerwony widok otrzyma 1/6 przestrzeni, pomarańczowy 2/6, a zielony 3/6.
Flex Direction
flexDirection kontroluje kierunek rozmieszczenia elementów potomnych węzła. Określa to tzw. główną oś. Oś poprzeczna jest prostopadła do głównej osi lub jest osią, wzdłuż której układane są zawijane linie.
-
column(wartość domyślna) Wyrównuje elementy potomne od góry do dołu. Jeśli zawijanie jest włączone, następna linia zacznie się po prawej stronie pierwszego elementu na górze kontenera. -
rowWyrównuje elementy potomne od lewej do prawej. Jeśli zawijanie jest włączone, następna linia zacznie się pod pierwszym elementem po lewej stronie kontenera. -
column-reverseWyrównuje elementy potomne od dołu do góry. Jeśli zawijanie jest włączone, następna linia zacznie się po prawej stronie pierwszego elementu na dole kontenera. -
row-reverseWyrównuje elementy potomne od prawej do lewej. Jeśli zawijanie jest włączone, następna linia zacznie się pod pierwszym elementem po prawej stronie kontenera.
Więcej informacji znajdziesz tutaj.
- TypeScript
- JavaScript
Layout Direction
Właściwość direction określa kierunek układania elementów potomnych i tekstu w hierarchii. Kierunek układu wpływa również na to, do których krawędzi odnoszą się wartości start i end. Domyślnie React Native używa kierunku LTR. W tym trybie start oznacza lewą krawędź, a end prawą.
-
LTR(wartość domyślna) Tekst i elementy potomne układane są od lewej do prawej. Marginesy i wypełnienia stosowane do początku elementu są dodawane po lewej stronie. -
RTLTekst i elementy potomne układane są od prawej do lewej. Marginesy i wypełnienia stosowane do początku elementu są dodawane po prawej stronie.
- TypeScript
- JavaScript
Justify Content
justifyContent opisuje, jak wyrównać elementy potomne wzdłuż głównej osi ich kontenera. Na przykład możesz użyć tej właściwości, aby wyśrodkować element potomny poziomo w kontenerze z flexDirection ustawionym na row lub pionowo w kontenerze z flexDirection ustawionym na column.
-
flex-start(wartość domyślna) Wyrównuje elementy potomne do początku głównej osi kontenera. -
flex-endWyrównuje elementy potomne do końca głównej osi kontenera. -
centerWyrównaj elementy potomne w kontenerze do środka wzdłuż głównej osi kontenera. -
space-betweenRozmieść elementy potomne równomiernie wzdłuż głównej osi kontenera, dzieląc dostępną przestrzeń pomiędzy elementy. -
space-aroundRozmieść elementy potomne równomiernie wzdłuż głównej osi kontenera, dzieląc dostępną przestrzeń wokół elementów. W porównaniu dospace-between, użyciespace-aroundspowoduje, że przestrzeń zostanie dodana przed pierwszym elementem i po ostatnim. -
space-evenlyRównomiernie rozłóż elementy w kontenerze wzdłuż głównej osi. Odstępy pomiędzy każdą parą sąsiednich elementów, pomiędzy początkiem kontenera a pierwszym elementem oraz pomiędzy końcem kontenera a ostatnim elementem, są jednakowe.
Więcej informacji znajdziesz tutaj.
- TypeScript
- JavaScript
Wyrównanie elementów (Align Items)
alignItems określa, w jaki sposób wyrównać elementy potomne wzdłuż osi poprzecznej ich kontenera. Działa bardzo podobnie do justifyContent, ale zamiast stosować się do osi głównej, alignItems stosuje się do osi poprzecznej.
-
stretch(wartość domyślna) Rozciągnij elementy potomne w kontenerze, aby dopasować je doheightosi poprzecznej kontenera. -
flex-startWyrównaj elementy potomne w kontenerze do początku osi poprzecznej kontenera. -
flex-endWyrównaj elementy potomne w kontenerze do końca osi poprzecznej kontenera. -
centerWyrównaj elementy potomne w kontenerze do środka osi poprzecznej kontenera. -
baselineWyrównaj elementy potomne w kontenerze wzdłuż wspólnej linii bazowej. Poszczególne elementy potomne mogą być ustawione jako referencyjna linia bazowa dla swoich rodziców.
Aby stretch miał efekt, elementy potomne nie mogą mieć ustalonego wymiaru wzdłuż osi poprzecznej. W poniższym przykładzie ustawienie alignItems: stretch nie daje efektu, dopóki width: 50 nie zostanie usunięte z elementów potomnych.
Więcej informacji znajdziesz tutaj.
- TypeScript
- JavaScript
Wyrównanie pojedynczego elementu (Align Self)
alignSelf ma te same opcje i efekt co alignItems, ale zamiast wpływać na wszystkie elementy potomne w kontenerze, można zastosować tę właściwość do pojedynczego elementu, aby zmienić jego wyrównanie w obrębie rodzica. alignSelf nadpisuje opcje ustawione przez rodzica za pomocą alignItems.
- TypeScript
- JavaScript
Wyrównanie zawartości (Align Content)
alignContent definiuje rozkład linii wzdłuż osi poprzecznej. Ma to efekt tylko wtedy, gdy elementy są zawijane do wielu linii przy użyciu flexWrap.
-
flex-start(wartość domyślna) Wyrównaj zawinięte linie do początku osi poprzecznej kontenera. -
flex-endWyrównaj zawinięte linie do końca osi poprzecznej kontenera. -
stretch(wartość domyślna przy użyciu Yoga w przeglądarce) Rozciągnij zawinięte linie, aby dopasować je do wysokości osi poprzecznej kontenera. -
centerWyrównaj zawinięte linie do środka osi poprzecznej kontenera. -
space-betweenRozmieść zawinięte linie równomiernie wzdłuż osi poprzecznej kontenera, dzieląc dostępną przestrzeń pomiędzy linie. -
space-aroundRozmieść zawinięte linie równomiernie wzdłuż osi poprzecznej kontenera, dzieląc dostępną przestrzeń wokół linii. Każdy koniec kontenera ma o połowę mniejszą przestrzeń w porównaniu do przestrzeni pomiędzy liniami. -
space-evenlyRównomiernie rozłóż zawinięte linie wzdłuż osi poprzecznej kontenera, dzieląc dostępną przestrzeń wokół linii. Każda przestrzeń ma taki sam rozmiar.
Więcej informacji znajdziesz tutaj.
- TypeScript
- JavaScript
Zawijanie elementów (Flex Wrap)
Właściwość flexWrap jest ustawiana na kontenerach i kontroluje zachowanie elementów potomnych, gdy przekraczają rozmiar kontenera wzdłuż osi głównej. Domyślnie elementy potomne są wymuszane do jednej linii (co może powodować zmniejszanie elementów). Jeśli zawijanie jest dozwolone, elementy są zawijane w wiele linii wzdłuż osi głównej w razie potrzeby.
Podczas zawijania linii, alignContent może być użyte do określenia rozmieszczenia linii w kontenerze. Dowiedz się więcej tutaj.
- TypeScript
- JavaScript
Flex Basis, Grow i Shrink
-
flexBasisto niezależny od osi sposób określania domyślnego rozmiaru elementu wzdłuż osi głównej. UstawienieflexBasiselementu potomnego jest analogiczne do ustawieniawidthtego elementu, gdy jego rodzic jest kontenerem zflexDirection: row, lubheightgdy rodzic maflexDirection: column.flexBasiselementu to jego domyślny rozmiar przed jakimikolwiek obliczeniamiflexGrowiflexShrink. -
flexGrowokreśla, jak przestrzeń w kontenerze powinna być rozdzielona między elementy potomne wzdłuż osi głównej. Po rozmieszczeniu elementów potomnych kontener rozdzieli pozostałe miejsce proporcjonalnie do wartości flex grow poszczególnych elementów.flexGrowakceptuje dowolną wartość zmiennoprzecinkową >= 0, z wartością domyślną 0. Kontener rozdzieli pozostałe miejsce między elementy potomne ważone według ich wartościflexGrow. -
flexShrinkokreśla, jak elementy potomne powinny być zmniejszane wzdłuż osi głównej, gdy ich łączny rozmiar przekracza rozmiar kontenera.flexShrinkdziała podobnie doflexGrow, traktując nadmiarowy rozmiar jako ujemną pozostałą przestrzeń. Obie właściwości współdziałają, pozwalając elementom dynamicznie dostosowywać rozmiar.flexShrinkakceptuje dowolną wartość zmiennoprzecinkową >= 0, z wartością domyślną 0 (w środowisku webowym domyślnie 1). Kontener zmniejszy elementy potomne proporcjonalnie do ich wartościflexShrink.
Dowiedz się więcej tutaj.
- TypeScript
- JavaScript
Row Gap, Column Gap i Gap
-
rowGapustawia rozmiar odstępu między wierszami elementu. -
columnGapustawia rozmiar odstępu między kolumnami elementu. -
gapustawia rozmiar odstępu między wierszami i kolumnami. Jest to skrót dlarowGapicolumnGap.
Możesz użyć flexWrap i alignContent razem z gap, aby zapewnić spójne odstępy między elementami.
- TypeScript
- JavaScript
Szerokość i Wysokość
Właściwość width określa szerokość obszaru treści elementu. Analogicznie, właściwość height określa wysokość obszaru treści elementu.
Zarówno width, jak i height przyjmują następujące wartości:
-
auto(wartość domyślna) React Native oblicza szerokość/wysokość na podstawie zawartości (inne elementy potomne, tekst lub obraz). -
pixelsDefiniuje szerokość/wysokość w bezwzględnych pikselach. W zależności od innych stylów, może to nie być ostateczny wymiar węzła. -
percentageDefiniuje szerokość/wysokość jako procent odpowiednio szerokości/wysokości rodzica.
- TypeScript
- JavaScript
Pozycja
Typ position elementu definiuje jego pozycjonowanie względem samego siebie, rodzica lub bloku zawierającego.
-
relative(wartość domyślna) Domyślnie element jest pozycjonowany relatywnie. Oznacza to, że jest układany zgodnie z normalnym przepływem układu, a następnie przesunięty względem tej pozycji na podstawie wartościtop,right,bottomileft. Przesunięcie nie wpływa na pozycję elementów siostrzanych ani nadrzędnych. -
absoluteW pozycjonowaniu absolutnym element nie uczestniczy w normalnym przepływie układu. Jest układany niezależnie od elementów siostrzanych. Jego pozycja jest określana na podstawie wartościtop,right,bottomileft. Wartości te pozycjonują element względem jego bloku zawierającego. -
staticW pozycjonowaniu statycznym element jest układany zgodnie z normalnym przepływem i ignoruje wartościtop,right,bottomorazleft. Ta wartośćpositionpowoduje także, że element nie tworzy bloku zawierającego dla elementów absolutnych, chyba że obecne są inne nadrzędne właściwości stylu (np.transform). Pozwala to pozycjonować elementyabsolutewzględem czegoś innego niż ich rodzic. Uwaga:staticjest dostępne tylko w Nowej Architekturze.
- TypeScript
- JavaScript
Blok zawierający
Blok zawierający elementu to element nadrzędny, który kontroluje jego pozycję i rozmiar. Działanie bloków zawierających w React Native jest bardzo podobne do ich działania w środowisku webowym, z pewnymi uproszczeniami wynikającymi z braku niektórych funkcji webowych.
Wartości top, right, bottom i left absolutnie pozycjonowanego elementu będą obliczane względem jego bloku zawierającego.
Wartości procentowe (np. width: '50%' lub padding: '10%') zastosowane do absolutnie pozycjonowanych elementów są obliczane względem rozmiaru ich bloku zawierającego. Przykładowo, jeśli blok zawierający ma szerokość 100 punktów, to width: 50% spowoduje, że element będzie miał 50 punktów szerokości.
Poniższa lista pomoże określić blok zawierający dla dowolnego elementu:
-
Jeśli element ma typ
positionrelativelubstatic, to jego blokiem zawierającym jest rodzic. -
Jeśli element ma właściwość
positionustawioną naabsolute, to jego blokiem zawierającym jest najbliższy przodek, dla którego spełniony jest jeden z warunków:- Ma właściwość
positiono wartości innej niżstatic - Ma właściwość
transform
- Ma właściwość
Dalsze zagłębienie
Zapoznaj się z interaktywnym yoga playground, który pomoże lepiej zrozumieć Flexbox.
Omówiliśmy podstawy, ale istnieje wiele innych stylów potrzebnych do układania elementów. Pełna lista właściwości kontrolujących układ znajduje się tutaj.
Dodatkowo możesz zobaczyć przykłady od inżynierów Wix.