StyleSheet APIとFlexboxによるスタイリング
CSS class namesを使わず、StyleSheet.createとFlexboxでモバイル向けのスタイルを記述します。
「StyleSheet APIとFlexboxによるスタイリング」はCoddyKit上の無料React Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
React NativeにはCSSがありません
React Nativeでは、JavaScriptのスタイリングAPIを使用します。CSSファイル、クラス名、カスケードはありません。スタイルはJavaScriptオブジェクトとして定義し、styleプロパティを通じて適用します。
StyleSheet.create()
パフォーマンスを向上させ、IDEの自動補完を利用するには、スタイルオブジェクトを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 }]} />React NativeのFlexbox
React Nativeでは、レイアウトにFlexboxをデフォルトで使用しますが、Webとはデフォルト値が異なります。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とwidth/heightの使い分け
比例したサイズを指定するにはflex: Nを使います。flex: 1は残りのスペースをすべて埋め、flex: 2はflex: 1の兄弟要素の2倍のスペースを確保します。
// 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>絶対位置指定
重ねて表示する要素には、top、right、bottom、leftとともにposition: 'absolute'を使います。相対位置の親要素内で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のカラー文字列(hex、rgb、名前付きカラー)と、システムカラー用のPlatformColor APIを使用できます。
import { PlatformColor } from 'react-native';
// System color — adapts to dark mode automatically:
const labelColor = PlatformColor('label', '#000'); // iOS 'label' semantic colorPropsを使った動的なスタイル
コンポーネント内で、Propsからスタイルを計算します。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' } });理解度チェック
React NativeでのflexDirectionのデフォルト値は何ですか(Webとは異なります)。
まとめ
最適化されたスタイルにはStyleSheet.create()を使い、styleプロパティを通じて適用します。React NativeのFlexboxではflexDirection: 'column'がデフォルトで、flex: 1は残りのスペースを埋めます。OS固有のシャドウスタイルにはPlatform.select()を使います。
よくある質問
「StyleSheet APIとFlexboxによるスタイリング」レッスンは無料ですか?
はい。「StyleSheet APIとFlexboxによるスタイリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「StyleSheet APIとFlexboxによるスタイリング」で何を学びますか?
CSS class namesを使わず、StyleSheet.createとFlexboxでモバイル向けのスタイルを記述します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「StyleSheet APIとFlexboxによるスタイリング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- React Native Core ComponentsとWeb DOMの比較
- StyleSheet APIとFlexboxによるスタイリング
- Expo Routerによるナビゲーション
- Device APIへのアクセス:Camera、Location、Push Notifications