Progression
0 %
0/32 étapes terminées
Fondamental · 7 min de lecture
Les styles sans CSS
Objets, StyleSheet et composition
1Définition
En React Native, un style est un objet JavaScript passé à la prop style. Il n'y a ni sélecteurs, ni classes, ni cascade : chaque composant reçoit explicitement ses styles.
2Principes fondamentaux
01
Des objets en camelCase
background-color devient backgroundColor. Les valeurs sont des nombres (sans unité), des chaînes (couleurs, pourcentages) ou des tableaux (transform).
02
StyleSheet.create
Il regroupe les styles nommés d'un fichier. Il clarifie le code et signale les propriétés invalides pendant le développement.
03
Composition par tableau
style={[base, variante, condition && actif]} : les valeurs sont fusionnées de gauche à droite, les false et null sont ignorés.
04
Les props de style personnalisées
Pour qu'un composant accepte des styles de l'extérieur, fais-lui recevoir une prop style et ajoute-la en dernier dans son tableau.
3Exemples pratiques
Un bouton à variantes
1import { View, Text, Pressable, StyleSheet } from 'react-native';2 3function Bouton({ label, variante = 'plein', style }) {4 return (5 <Pressable style={[styles.base, variante === 'contour' && styles.contour, style]}>6 <Text style={[styles.label, variante === 'contour' && styles.labelContour]}>{label}</Text>7 </Pressable>8 );9}10 11export default function App() {12 return (13 <View style={{ flex: 1, justifyContent: 'center', padding: 24, gap: 14 }}>14 <Bouton label="Continuer" />15 <Bouton label="Plus tard" variante="contour" />16 <Bouton label="Supprimer" style={{ backgroundColor: '#d02f1c' }} />17 </View>18 );19}20 21const styles = StyleSheet.create({22 base: { padding: 16, borderRadius: 14, alignItems: 'center', backgroundColor: '#00a4a9', borderWidth: 2, borderColor: '#171718' },23 contour: { backgroundColor: 'transparent' },24 label: { fontWeight: '800', fontSize: 16 },25 labelContour: { color: '#171718' },26});La prop style passée en dernier permet au parent d'ajuster le bouton sans toucher au composant.
4Erreurs courantes
Écrire des unités
À éviter
{ fontSize: '16px', margin: '8px' }À faire
{ fontSize: 16, margin: 8 }Pourquoi : Les dimensions sont des nombres. Une chaîne avec « px » est invalide.
Créer un nouvel objet de style lourd à chaque rendu
À éviter
<View style={{ ...styles.carte, ...(actif ? styles.actif : {}) }} />À faire
<View style={[styles.carte, actif && styles.actif]} />Pourquoi : Le tableau est plus lisible, et React Native sait fusionner les styles efficacement.
Chercher un équivalent des classes CSS
À éviter
<Text className="titre">…</Text>À faire
<Text style={styles.titre}>…</Text>Pourquoi : React Native n'a pas de className natif : on référence des objets de style. (Des bibliothèques comme NativeWind ajoutent une syntaxe à la Tailwind, mais ce n'est pas le cœur de React Native.)
5Subtilités à connaître
- ◆Les ombres diffèrent :
shadowColor,shadowOpacity,shadowRadiussur iOS ;elevationsur Android. Les versions récentes acceptent aussiboxShadow. - ◆
transformprend un tableau :transform: [{ rotate: '8deg' }, { scale: 1.1 }]. - ◆
useColorScheme()renvoie'light'ou'dark'pour adapter tes styles au thème du téléphone.
6Vérifie ta compréhension
Question 1/3
Score 0
Comment écrire une marge de 8 ?
Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.