Стилизация с 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 — локальная установка не требуется.
Все уроки этого курса
- Основные компоненты React Native и веб-DOM
- Стилизация с API StyleSheet и Flexbox
- Навигация с Expo Router
- Доступ к API устройства: камера, местоположение и push-уведомления