0Pricing
React Academy · Урок

Стилизация с API StyleSheet и Flexbox

Пишите стили для мобильных устройств с помощью StyleSheet.create и Flexbox без имён классов CSS.

«Стилизация с API StyleSheet и Flexbox» — бесплатный урок React Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Нет CSS в React Native

React Native использует JavaScript API для стилизации — без файлов CSS, имён классов и каскадирования. Стили представляют собой объекты JavaScript, применяемые через свойство style.

StyleSheet.create()

Оберните объекты стилей в StyleSheet.create(), чтобы повысить производительность (стили проверяются и оптимизируются один раз) и получить автодополнение в среде разработки.

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. Синтаксис массива объединяет несколько объектов стилей — последующие стили переопределяют предыдущие.

<View style={{ padding: 16, backgroundColor: '#f5f5f5' }} />

// Array merging:
<Text style={[styles.base, isActive && styles.active, { marginTop: 8 }]} />

Flexbox в React Native

React Native по умолчанию использует Flexbox для компоновки, но с другими настройками по умолчанию, чем в вебе: flexDirection по умолчанию равен 'column' (а не 'row'), а flex: 1 заполняет доступное пространство.

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
  },
});

Компоновка в строку

Используйте flexDirection: 'row', чтобы расположить дочерние элементы горизонтально, имитируя 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: N для пропорционального задания размера. flex: 1 заполняет всё оставшееся пространство, а flex: 2 получает вдвое больше места, чем соседние элементы с 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>

Абсолютное позиционирование

Используйте position: 'absolute' вместе с top, right, bottom, left для элементов, накладываемых поверх других, — это идентично абсолютному позиционированию CSS внутри родительского элемента с относительным позиционированием.

const badge = StyleSheet.create({
  badge: {
    position: 'absolute',
    top: -4,
    right: -4,
    width: 16,
    height: 16,
    borderRadius: 8,
    backgroundColor: 'red',
  },
});

Стили для разных платформ

Используйте Platform.OS или Platform.select(), чтобы применять разные стили на iOS и Android.

import { Platform } from 'react-native';

const styles = StyleSheet.create({
  shadow: {
    ...Platform.select({
      ios: { shadowColor: '#000', shadowOpacity: 0.2, shadowRadius: 4 },
      android: { elevation: 4 },
    }),
  },
});

Цвета

React Native принимает строки цветов CSS (в шестнадцатеричном формате, rgb и с именами), а также API PlatformColor для системных цветов.

import { PlatformColor } from 'react-native';

// System color — adapts to dark mode automatically:
const labelColor = PlatformColor('label', '#000'); // iOS 'label' semantic color

Динамические стили на основе свойств

Вычисляйте стили на основе свойств внутри компонента. Передавайте функцию в StyleSheet или вычисляйте объект стилей непосредственно в коде.

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' } });

Проверка знаний

Каково значение flexDirection по умолчанию в React Native, отличающееся от веба?

Итоги

Используйте StyleSheet.create() для оптимизированных стилей и применяйте их через свойство style. В Flexbox React Native по умолчанию используется flexDirection: 'column', а flex: 1 заполняет оставшееся пространство. Используйте Platform.select() для стилей теней, зависящих от OS.

Часто задаваемые вопросы

Урок «Стилизация с API StyleSheet и Flexbox» бесплатный?

Да — полный текст урока «Стилизация с API StyleSheet и Flexbox» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Стилизация с API StyleSheet и Flexbox»?

Пишите стили для мобильных устройств с помощью StyleSheet.create и Flexbox без имён классов CSS. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Стилизация с API StyleSheet и Flexbox»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основные компоненты React Native и веб-DOM
  2. Стилизация с API StyleSheet и Flexbox
  3. Навигация с Expo Router
  4. Доступ к API устройства: камера, местоположение и push-уведомления
← Назад к React Academy