Stylowanie za pomocą API StyleSheet i Flexbox
Pisanie stylów mobilnych za pomocą StyleSheet.create i Flexbox bez nazw klas CSS.
Stylowanie za pomocą API StyleSheet i Flexbox to bezpłatna lekcja React Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.
Brak CSS w React Native
React Native korzysta z interfejsu API JavaScript do stylowania — nie ma plików CSS, nazw klas ani kaskadowania. Style są obiektami JavaScript stosowanymi za pomocą właściwości style.
StyleSheet.create()
Obiekty stylów należy opakować w StyleSheet.create(), aby uzyskać lepszą wydajność (style są sprawdzane i optymalizowane tylko raz) oraz autouzupełnianie w IDE.
import { StyleSheet, View, Text } from 'react-native';
function Card() {
return (
<View style={styles.card}>
<Text style={styles.title}>Hello</Text>
</View>
);
}
const styles = StyleSheet.create({
card: { padding: 16, backgroundColor: '#fff', borderRadius: 8, shadowColor: '#000', shadowOpacity: 0.1, elevation: 2 },
title: { fontSize: 18, fontWeight: 'bold', color: '#111' },
});Style wbudowane
Style należy stosować bezpośrednio za pomocą właściwości style. Składnia tablicowa łączy wiele obiektów stylów — późniejsze style zastępują wcześniejsze.
<View style={{ padding: 16, backgroundColor: '#f5f5f5' }} />
// Array merging:
<Text style={[styles.base, isActive && styles.active, { marginTop: 8 }]} />Flexbox w React Native
React Native domyślnie używa Flexboxa do tworzenia układu, ale stosuje inne wartości domyślne niż wersja webowa: flexDirection ma domyślnie wartość 'column' (a nie 'row'), natomiast flex: 1 wypełnia dostępną przestrzeń.
const styles = StyleSheet.create({
container: {
flex: 1, // fill available space
flexDirection: 'column', // default in RN (web default is 'row')
justifyContent: 'center', // main axis alignment
alignItems: 'center', // cross axis alignment
},
});Układ wierszowy
Proszę użyć flexDirection: 'row', aby ułożyć elementy potomne poziomo, naśladując CSS display: flex; flex-direction: row.
const styles = StyleSheet.create({
row: {
flexDirection: 'row',
alignItems: 'center',
gap: 12, // gap is supported in RN 0.71+
},
});
<View style={styles.row}>
<Image source={avatar} />
<Text>{username}</Text>
</View>flex a width/height
Do proporcjonalnego określania rozmiaru proszę użyć flex: N. flex: 1 wypełnia całą pozostałą przestrzeń, a flex: 2 otrzymuje dwa razy więcej miejsca niż elementy siostrzane z flex: 1.
// Sidebar takes 1/3, content takes 2/3:
<View style={{ flexDirection: 'row', flex: 1 }}>
<View style={{ flex: 1, backgroundColor: '#eee' }}>Sidebar</View>
<View style={{ flex: 2 }}>Content</View>
</View>Pozycjonowanie absolutne
W przypadku elementów nakładanych proszę użyć position: 'absolute' wraz z top, right, bottom i left — działa to tak samo jak pozycjonowanie absolutne w CSS względem rodzica o pozycjonowaniu względnym.
const badge = StyleSheet.create({
badge: {
position: 'absolute',
top: -4,
right: -4,
width: 16,
height: 16,
borderRadius: 8,
backgroundColor: 'red',
},
});Style zależne od platformy
Proszę użyć Platform.OS lub Platform.select(), aby zastosować różne style na iOS i Androidzie.
import { Platform } from 'react-native';
const styles = StyleSheet.create({
shadow: {
...Platform.select({
ios: { shadowColor: '#000', shadowOpacity: 0.2, shadowRadius: 4 },
android: { elevation: 4 },
}),
},
});Kolory
React Native akceptuje ciągi kolorów CSS (szesnastkowe, rgb i nazwane), a także API PlatformColor do obsługi kolorów systemowych.
import { PlatformColor } from 'react-native';
// System color — adapts to dark mode automatically:
const labelColor = PlatformColor('label', '#000'); // iOS 'label' semantic colorStyle dynamiczne z props
Style należy wyliczać na podstawie props wewnątrz komponentu. Do StyleSheet należy przekazać funkcję albo wyliczyć obiekt stylu bezpośrednio.
function Badge({ color, size = 16 }: { color: string; size?: number }) {
return (
<View
style={[
styles.badge,
{ backgroundColor: color, width: size, height: size, borderRadius: size / 2 },
]}
/>
);
}
const styles = StyleSheet.create({ badge: { position: 'absolute' } });Szybkie sprawdzenie
Jaka jest domyślna wartość flexDirection w React Native, inna niż w wersji webowej?
Podsumowanie
Proszę używać StyleSheet.create() do tworzenia zoptymalizowanych stylów i stosować je za pomocą właściwości style. Wartością domyślną Flexboxa w React Native jest flexDirection: 'column', a flex: 1 wypełnia pozostałą przestrzeń. Do definiowania stylów cieni zależnych od systemu operacyjnego proszę użyć Platform.select().
Często zadawane pytania
Czy lekcja „Stylowanie za pomocą API StyleSheet i Flexbox” jest bezpłatna?
Tak — pełny tekst „Stylowanie za pomocą API StyleSheet i Flexbox” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Stylowanie za pomocą API StyleSheet i Flexbox”?
Pisanie stylów mobilnych za pomocą StyleSheet.create i Flexbox bez nazw klas CSS. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć React Academy?
Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Stylowanie za pomocą API StyleSheet i Flexbox”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?
Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawowe komponenty React Native a DOM w przeglądarce
- Stylowanie za pomocą API StyleSheet i Flexbox
- Nawigacja z Expo Router
- Dostęp do API urządzenia: aparat, lokalizacja i powiadomienia push