StyleSheet — qu'est-ce que c'est, création de styles dans React Native

Auteur : IT Sectr Publié le : 2026-07-06 Temps de lecture : 10 min

StyleSheet — une API React Native pour créer et gérer les styles de composants, similaire aux feuilles de style CSS dans le développement web. StyleSheet.create optimise les performances en convertissant les objets de style en identifiants numériques et en réduisant le transfert de données via le pont JavaScript-Native. Contrairement aux styles inline, la création via create a lieu une fois lors de l'initialisation du module. En savoir plus sur l'API dans la documentation de Meta.

Points clés

  • StyleSheet — API pour la création déclarative de styles avec optimisation via des identifiants numériques
  • StyleSheet.create convertit un objet de styles en IDs, réduisant les données transférées via le pont JS-Native
  • Styles inline créent de nouveaux objets à chaque rendu, StyleSheet.create — une fois au chargement du module
  • Flexbox — la base de la mise en page dans React Native : flexDirection, alignItems, justifyContent et flex
  • Organisation modulaire suggère d'extraire les styles dans des fichiers séparés avec composition via StyleSheet.flatten

Qu'est-ce que StyleSheet ?

StyleSheet — une API intégrée de React Native pour définir les styles de composants. Contrairement au CSS dans le développement web, RN utilise des objets JavaScript pour décrire les styles. StyleSheet.create — la méthode clé — accepte un objet de style et retourne un objet avec des identifiants numériques.

StyleSheet fait partie du noyau de React Native et ne nécessite pas l'installation de paquets supplémentaires. Selon Meta (2026), 95% des projets React Native utilisent StyleSheet.create pour les styles statiques. Alternatives : styled-components, Emotion, NativeWind (Tailwind pour RN) — mais le StyleSheet intégré reste la norme pour le noyau.

Histoire et évolution

Dans les premières versions de React Native (2015), les styles étaient définis exclusivement comme des objets inline. StyleSheet.create est apparu dans RN 0.4 comme une optimisation. Le concept est issu du CSS : séparez les styles de la logique pour la lisibilité et les performances. Au fil des ans, l'API s'est étendue : absoluteFill, hairlineWidth, flatten ont été ajoutés.

StyleSheet.create vs styles inline

La différence entre StyleSheet.create et les styles inline est cruciale pour les performances. Un style inline est un objet JavaScript ordinaire créé à chaque rendu du composant. StyleSheet.create — un objet créé une fois lors du chargement du module et converti en un ID numérique.

Lors du passage d'un style inline, React Native envoie l'objet entier via le pont JavaScript-Native à chaque fois. Pour un composant avec des styles complexes, cela signifie des dizaines de propriétés transférées à chaque rendu. StyleSheet.create ne passe qu'un identifiant numérique, réduisant la charge du pont.

js
// StyleSheet.create — approche optimisée
const styles = StyleSheet.create({
  container: {
    flex: 1,
    padding: 16,
    backgroundColor: '#f5f5f5',
    borderRadius: 8,
  },
  title: {
    fontSize: 18,
    fontWeight: 'bold',
    color: '#333',
  },
});

// Style inline — crée un nouvel objet à chaque rendu
<View style={{
  flex: 1,
  padding: 16,
  backgroundColor: '#f5f5f5',
  borderRadius: 8,
}} />

<Text style={styles.title}>Title</Text>

Quand utiliser inline : pour les styles dynamiques qui dépendent de l'état (pressé, sélectionné, actif). Pour les styles statiques, utilisez toujours StyleSheet.create. Règle : statique → create, dynamique → fonction inline.

Mise en page Flexbox avec StyleSheet

Flexbox — le seul mécanisme de mise en page dans React Native (CSS Grid n'est pas supporté, float est absent). StyleSheet.create est utilisé pour décrire les conteneurs flex et leurs éléments enfants. Propriétés principales : flex (coefficient de remplissage), flexDirection (row | column), justifyContent, alignItems.

Par défaut, flexDirection dans React Native est column (dans CSS — row). C'est la première chose à retenir lors du passage du développement web. Tous les composants View sont des conteneurs flex par défaut. Pour centrer un élément, utilisez alignItems: 'center' + justifyContent: 'center'.

js
const styles = StyleSheet.create({
  container: {
    flex: 1,
    flexDirection: 'column',
    justifyContent: 'center',
    alignItems: 'center',
    padding: 20,
  },
  row: {
    flexDirection: 'row',
    justifyContent: 'space-between',
    alignItems: 'center',
    width: '100%',
  },
  box: {
    width: 50,
    height: 50,
    backgroundColor: 'blue',
  },
});

Important : dans React Native, toutes les tailles sont spécifiées sans unités (juste un nombre). Les pourcentages fonctionnent mais seulement pour la largeur et la hauteur relatives au parent. margin et padding acceptent des nombres. Pour la réactivité, utilisez flex au lieu de pourcentages — c'est plus fiable sur différents écrans.

API StyleSheet : create, flatten, hairlineWidth, absoluteFill

StyleSheet API inclut plusieurs méthodes en plus de create. StyleSheet.flatten fusionne un tableau de styles en un seul objet — utile pour la composition et le passage de styles à des composants tiers. StyleSheet.hairlineWidth retourne la largeur de ligne minimale visible sur l'appareil.

StyleSheet.absoluteFill — un style prédéfini { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 }. Utilisé pour les couches de superposition, les fenêtres modales et le positionnement absolu sur tout l'écran. StyleSheet.absoluteFillObject — la même chose mais sous forme d'objet pour extension.

js
// flatten — fusionner les styles
const base = StyleSheet.create({
  button: { padding: 12, borderRadius: 8 },
  primary: { backgroundColor: 'blue' },
});

const combined = StyleSheet.flatten([base.button, base.primary]);
// { padding: 12, borderRadius: 8, backgroundColor: 'blue' }

// hairlineWidth — ligne minimale
const styles = StyleSheet.create({
  separator: {
    height: StyleSheet.hairlineWidth,
    backgroundColor: '#ccc',
  },
  overlay: {
    ...StyleSheet.absoluteFillObject,
    backgroundColor: 'rgba(0,0,0,0.5)',
  },
});

StyleSheet.hairlineWidth est utile pour les séparateurs et les bordures — il ressemble toujours à 1 pixel physique quelle que soit la densité de l'écran. Sur les écrans Retina, cela représente 0,5 point logique, sur les écrans normaux — 1 point. N'utilisez pas hairlineWidth pour les éléments qui doivent avoir une taille strictement spécifique.

Mise en page responsive avec Dimensions API

Dimensions API est utilisée avec StyleSheet pour une mise en page responsive sur différentes tailles d'écran. Dimensions.get('window') retourne la largeur et la hauteur de la fenêtre. Pour les mises à jour réactives lors de la rotation de l'écran, utilisez le hook useWindowDimensions de React Native.

Bien que StyleSheet.create ne supporte pas les media queries comme CSS, vous pouvez calculer des valeurs basées sur Dimensions dans create ou utiliser des styles dynamiques via une fonction. Pour les points de rupture, créez des styles séparés pour différentes plages de largeur.

js
import { useWindowDimensions } from 'react-native';

const ResponsiveCard = () => {
  const { width } = useWindowDimensions();
  const isLarge = width > 768;

  return (
    <View style={[styles.card, isLarge && styles.cardLarge]}>
      <Text>Responsive card</Text>
    </View>
  );
};

const styles = StyleSheet.create({
  card: {
    width: '100%',
    padding: 16,
  },
  cardLarge: {
    width: '50%',
    alignSelf: 'center',
  },
});

useWindowDimensions se met automatiquement à jour lors de la rotation de l'écran et du redimensionnement de la fenêtre sur les tablettes avec Split View. Pour SSR (React Native Web), assurez-vous que Dimensions.get est appelé après le montage du composant pour éviter les divergences entre le serveur et le client.

Organisation des styles dans un projet

L'organisation StyleSheet dans un projet affecte la maintenabilité et la réutilisation du code. Trois approches : styles locaux dans le composant (styles.js à côté du composant), styles globaux (theme.js avec des constantes de couleur, d'espacement, de typographie) et styles modulaires via composition.

Structure recommandée : theme.js avec des constantes de couleur, taille et typographie ; Component.styles.js à côté de chaque composant pour ses styles spécifiques ; StyleSheet.flatten pour combiner les styles de base et spécifiques. Pour les grands projets, utilisez un Design System avec génération de thème.

js
// theme.js — constantes globales
export const colors = {
  primary: '#6200EE',
  background: '#FFFFFF',
  text: '#1C1B1F',
  surface: '#F5F5F5',
};

export const spacing = {
  xs: 4, sm: 8, md: 16, lg: 24, xl: 32,
};

export const typography = {
  h1: { fontSize: 24, fontWeight: 'bold', lineHeight: 32 },
  body: { fontSize: 16, lineHeight: 24 },
};

// Button.styles.js
import { colors, spacing, typography } from './theme';

export default StyleSheet.create({
  button: {
    backgroundColor: colors.primary,
    paddingVertical: spacing.sm,
    paddingHorizontal: spacing.lg,
    borderRadius: 8,
  },
  text: {
    ...typography.body,
    color: '#FFFFFF',
    textAlign: 'center',
  },
});

Avantages de l'organisation modulaire : source unique de vérité pour les couleurs et les espacements, refactoring simplifié (changez primary — tous les boutons se mettent à jour), réutilisation des styles via flatten, lisibilité et prévisibilité du code. Pour les projets TypeScript, ajoutez des types pour le thème via declare module.

Questions fréquentes

Peut-on utiliser StyleSheet.create dynamiquement ?

StyleSheet.create n'est pas conçu pour les styles dynamiques — il est appelé une fois lors du chargement du module. Pour les styles qui dépendent des props ou de l'état, utilisez des objets inline ou une fonction qui retourne un tableau de styles.

Quelle est la différence entre StyleSheet.create et object ?

StyleSheet.create optimise les performances : les styles sont convertis en IDs numériques et passés via le pont JS-Native comme des nombres. Les objets ordinaires sont passés à chaque rendu. Pour les styles statiques, utilisez toujours create.

Comment hériter des styles dans React Native ?

Il n'y a pas d'héritage direct. Utilisez StyleSheet.flatten pour fusionner des tableaux de styles ou l'opérateur spread pour étendre un style de base. Pour Text, les styles parents ne sont pas hérités par les éléments enfants — chaque Text nécessite des styles explicites.

StyleSheet supporte-t-il les media queries ?

Non, StyleSheet ne supporte pas les CSS media queries. Pour la réactivité, utilisez useWindowDimensions ou Dimensions API avec des styles conditionnels. La bibliothèque react-native-responsive aide avec les points de rupture.

Peut-on utiliser des frameworks CSS avec React Native ?

StyleSheet ne supporte pas CSS. Pour une syntaxe similaire à Tailwind, utilisez NativeWind. Pour styled-components, il existe react-native-adaptation. Pour la plupart des projets, le StyleSheet intégré suffit pour créer une UI de qualité.

Résumé

  • StyleSheet — une API intégrée React Native pour définir des styles via des objets JavaScript avec optimisation par identifiants numériques
  • StyleSheet.create est préférable aux styles inline pour les données statiques : les styles sont créés une fois, pas à chaque rendu
  • Flexbox — la base de la mise en page dans RN avec flexDirection par défaut : column (contrairement à CSS)
  • StyleSheet.flatten fusionne les tableaux de styles, absoluteFill remplit le conteneur parent, hairlineWidth donne 1 pixel physique
  • useWindowDimensions offre une adaptabilité à différents écrans et rotations d'appareil
  • Organisation modulaire avec theme.js et Component.styles.js améliore la maintenabilité du code
  • StyleSheet.hairlineWidth est indispensable pour les séparateurs — il s'adapte à la densité de pixels de l'appareil

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi