0Pricing
React Academy · Lekcja

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 color

Style 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

  1. Podstawowe komponenty React Native a DOM w przeglądarce
  2. Stylowanie za pomocą API StyleSheet i Flexbox
  3. Nawigacja z Expo Router
  4. Dostęp do API urządzenia: aparat, lokalizacja i powiadomienia push
← Powrót do React Academy