Allez directement au contenu principal

Maîtrisez les gradients linéaires React Native : des UI éblouissantes en 2026

Apprenez à mettre en œuvre des effets de gradient linéaire react native impressionnants. Ce guide 2026 couvre Expo, RN Bare, les arrières-plans, les boutons, les masques de texte, les animations.

Maîtrisez les gradients linéaires React Native : des UI éblouissantes en 2026

Vous avez probablement rencontré l'une des deux situations.

Vous avez soit un écran qui ressemble à un plateau et qui vous semble inachevé, et vous souhaitez un fond ou un bouton qui ressemble à un produit réel plutôt qu'à un squelette. Ou vous avez déjà essayé d'ajouter un gradient React Native, et maintenant vous êtes coincé dans un limbo de configuration car la moitié des exemples utilisent Expo et l'autre moitié suppose un projet natif bare.

C'est là que la plupart des tutoriels s'arrêtent d'être utiles. Le composant API est simple. Le choix de l'environnement n'est pas. colors prop et plus sur le fait que vous êtes dans un workflow géré par Expo ou que vous gérez vous-même les liens natifs, les pods et les mocks de test.

Tableau de Contenu

Pourquoi votre application React Native a besoin de gradients

Un grand nombre d'interfaces utilisateur mobiles échouent pour la même raison. Le layout est correct, l'espace est correct, la typographie est acceptable, mais l'écran ressent toujours comme mort. Les remplissages solides font que tout ressemble à des placeholders à moins que le reste du système visuel ne fasse beaucoup de travail.

A un composant React Native de gradient linéaire fixe cela avec très peu de code. Il ajoute de la profondeur, crée une séparation entre les sections et donne aux éléments de haute priorité un poids visuel clair. Un bon fond de gradient peut rendre une page de connexion intentionnelle. Un bon bouton de gradient peut rendre l'action principale évidente sans recourir à des ombres lourdes ou des bordures trop bruyantes.

Par 2019, expo-linear-gradient et react-native-linear-gradient sont apparus dans plus de 42 % des projets React Native, which is a strong signal that gradients aren’t a niche effect anymore. They’re standard UI tooling in production apps, not decoration bolted on at the end, as noted in Adoption de gradient React Native.

Quels gradients réussissent

  • Créer de la profondeur : Une écran avec un fond plat souvent semble inachevé. Un mélange subtil de haut en bas donne à la surface un sentiment de couches.
  • Guidé l'attention : Les CTAs primaires, les cartes d'inscription et les en-têtes d'hero se démarquent sans ajouter de bruit visuel.
  • Remplacer les actifs d'image : Dans de nombreux cas, un gradient vous donne un polissage sans envoyer d'images de fond supplémentaires.

Règle pratique : Use gradients where hierarchy matters. Backgrounds, hero cards, CTA surfaces, and media overlays benefit most. Form fields, dense lists, and body copy containers usually don’t.

Il y a aussi un angle de conception de produit ici. Les équipes travaillant sur plusieurs plateformes dépensent déjà du temps pour essayer de garder les interfaces cohérentes. Si cela fait partie de votre pile, ces pratiques UI et UX multiplateformes pour les applications mobiles s'alignent bien avec le même raisonnement : moins d'actifs, plus de surfaces réutilisables et des systèmes visuels qui tiennent la route sur plusieurs écrans.

Choisir votre chemin : Expo vs Réact Native sans les éléments de base

C'est cette branche qui cause le plus de douleur. La mise en page API ressemble presque à l'identique dans les deux bibliothèques, mais la configuration n'est pas.

Si vous êtes dans une application Expo gérée, utilisez expo-linear-gradientSi vous êtes dans une application React Native nue, utilisez react-native-linear-gradientN'essayez pas de brouiller les lignes à moins que vous sachiez exactement pourquoi vous le faites.

Infographie de comparaison entre les workflows Expo gérés et React Native nus pour l'implémentation de gradients linéaires.

Expo setup

Expo est le chemin plus doux. L'installation est simple, la correspondance de version est gérée pour vous, et vous n'avez pas à vous soucier de la liaison native.

Installez-le comme ceci :

npx expo install expo-linear-gradient

Utilisez-le comme ceci :

import React from 'react';
import { StyleSheet, View, Text } from 'react-native';
import { LinearGradient } from 'expo-linear-gradient';

export default function App() {
  return (
    <LinearGradient
      colors={['#0f172a', '#1d4ed8']}
      style={styles.container}
    >
      <Text style={styles.text}>Hello gradient</Text>
    </LinearGradient>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
  text: {
    color: '#fff',
    fontSize: 24,
    fontWeight: '700',
  },
});

Expo est la bonne choix lorsque vous voulez un démarrage rapide, des paramètres sains et moins d'arêtes natives. C'est aussi pourquoi les équipes explorant des workflows Expo avancés finissent souvent par utiliser un Client de développement Expo pour capacités natives personnalisées seulement lorsque le chemin géré ne couvre plus les besoins de l'application.

Configuration React Native de base

React Native Bare donne un accès direct aux modules natifs, mais vous assumez les aspérités.

Installez le package :

npm install react-native-linear-gradient

Pour iOS, installez les pods :

cd ios && pod install

Utilisation de base :

import React from 'react';
import { StyleSheet, Text } from 'react-native';
import LinearGradient from 'react-native-linear-gradient';

export default function App() {
  return (
    <LinearGradient
      colors={['#111827', '#7c3aed']}
      style={styles.container}
    >
      <Text style={styles.text}>Hello gradient</Text>
    </LinearGradient>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
  text: {
    color: '#fff',
    fontSize: 24,
    fontWeight: '700',
  },
});

Où les projets de base se cassent généralement

La pièce manquante dans la plupart des tutoriels est la mise en œuvre de tests et la configuration native. ce résumé de discussion Stack Overflow, 68 % des threads Stack Overflow sur ce sujet en 2024 à 2025 impliquent des erreurs de modules natifs dans les configurations React Native de baseet la même source note des problèmes récurrents avec la simulation Jest et les conflits CocoaPods iOS.

Si vous utilisez Jest dans une application bare, ajoutez le mock explicitement :

// jest.setup.js
import mockRNLinearGradient from 'react-native-linear-gradient/jest/linear-gradient-mock';

jest.mock('react-native-linear-gradient', () => mockRNLinearGradient);

Et référez le fichier de configuration dans votre config Jest :

module.exports = {
  preset: 'react-native',
  setupFiles: ['<rootDir>/jest.setup.js'],
};

Bare React Native works well for gradients. It just doesn’t forgive incomplete setup. Most failures aren’t visual bugs. They’re linking, pods, or test environment issues.

Voici la table de décision pratique :

Type de projet Bibliothèque Best fit
Application Expo gérée expo-linear-gradient Chemins les plus rapides, moins de configuration
Application React Native nue react-native-linear-gradient Contrôle natif complet
Application nue avec Jest react-native-linear-gradient + mock Nécessaire pour maintenir les tests stables

Techniques de Gradient Fond pour les Éléments d'Interface

Une approche courante consiste à utiliser le même petit ensemble de modèles de gradient à répéter sans cesse. Fond d'écran. Boutons. Titres. Si ces trois éléments sont solidaires, vous pouvez les réutiliser sur un grand nombre d'écrans.

Une personne travaillant sur un ordinateur portable affichant une interface de tableau de bord moderne avec des éléments de conception de gradient colorés.

Un modèle mental utile est celui-ci :

  • colors contrôle la palette
  • start et end direction de contrôle
  • locations contrôles où se produisent les transitions

Si votre écran d'accueil ou d'entrée utilise un gradient, il s'intègre naturellement aux modèles plus larges de séquence de démarrage décrits dans cet article. Guide de l'écran de démarrage React Native.

guide de l'écran d'accueil React Native

C'est le modèle le plus simple et le plus réutilisable.

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { LinearGradient } from 'expo-linear-gradient';
// For bare RN, switch to:
// import LinearGradient from 'react-native-linear-gradient';

export default function WelcomeScreen() {
  return (
    <LinearGradient
      colors={['#0f172a', '#1e293b', '#2563eb']}
      start={{ x: 0, y: 0 }}
      end={{ x: 1, y: 1 }}
      style={styles.container}
    >
      <View style={styles.content}>
        <Text style={styles.title}>Welcome back</Text>
        <Text style={styles.subtitle}>Your workspace is ready.</Text>
      </View>
    </LinearGradient>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
  content: {
    flex: 1,
    justifyContent: 'center',
    paddingHorizontal: 24,
  },
  title: {
    color: '#fff',
    fontSize: 32,
    fontWeight: '800',
    marginBottom: 8,
  },
  subtitle: {
    color: 'rgba(255,255,255,0.8)',
    fontSize: 16,
  },
});

A un mélange diagonal, on ressent généralement plus de dynamisme qu'à un vertical par défaut. C'est pourquoi start={{ x: 0, y: 0 }} et end={{ x: 1, y: 1 }} constituent un bon choix par défaut lorsque l'écran est principalement décoratif.

Ne choisissez pas les couleurs en isolation. Testez-les derrière du texte réel, des icônes et des styles de barre de statut. Un ensemble de couleurs qui ressemble bien dans Figma peut échouer instantanément dès que du contenu s'y trouve.

Les boutons de gradient qui fonctionnent toujours comme des boutons

L'erreur la plus courante ici est de mettre le comportement tactile directement sur le gradient et d'oublier l'état désactivé, le feedback de pression ou la cohérence de la marge. Gardez le bouton semantique et laissez le gradient être la couche visuelle.

import React from 'react';
import {
  Pressable,
  StyleSheet,
  Text,
  ViewStyle,
  StyleProp,
} from 'react-native';
import { LinearGradient } from 'expo-linear-gradient';

type Props = {
  title: string;
  onPress: () => void;
  disabled?: boolean;
  style?: StyleProp<ViewStyle>;
};

export function GradientButton({
  title,
  onPress,
  disabled = false,
  style,
}: Props) {
  return (
    <Pressable onPress={onPress} disabled={disabled} style={style}>
      {({ pressed }) => (
        <LinearGradient
          colors={
            disabled
              ? ['#94a3b8', '#94a3b8']
              : pressed
              ? ['#7c3aed', '#2563eb']
              : ['#8b5cf6', '#3b82f6']
          }
          start={{ x: 0, y: 0.5 }}
          end={{ x: 1, y: 0.5 }}
          style={styles.button}
        >
          <Text style={styles.label}>{title}</Text>
        </LinearGradient>
      )}
    </Pressable>
  );
}

const styles = StyleSheet.create({
  button: {
    minHeight: 52,
    borderRadius: 14,
    alignItems: 'center',
    justifyContent: 'center',
    paddingHorizontal: 20,
  },
  label: {
    color: '#fff',
    fontSize: 16,
    fontWeight: '700',
  },
});

Pour les boutons, un gradient horizontal lit mieux qu'un diagonal. Il maintient l'étiquette stable et évite de faire ressentir le contrôle comme incliné.

Le texte de gradient avec une masque

C'est le modèle le plus flashant de l'ensemble, et il est utile lorsque vous le maintenez en retenue. Les titres de héros, les bannières d'amélioration et les titres d'état vide sont de bons candidats. Le texte de paragraphe ne l'est pas.

Vous aurez besoin @react-native-masked-view/masked-view.

npm install @react-native-masked-view/masked-view

Construisez ensuite le masque de texte :

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import MaskedView from '@react-native-masked-view/masked-view';
import { LinearGradient } from 'expo-linear-gradient';

export default function GradientHeadline() {
  return (
    <View style={styles.container}>
      <MaskedView
        maskElement={
          <View style={styles.maskWrapper}>
            <Text style={styles.title}>Premium analytics</Text>
          </View>
        }
      >
        <LinearGradient
          colors={['#22c55e', '#06b6d4', '#3b82f6']}
          start={{ x: 0, y: 0 }}
          end={{ x: 1, y: 0 }}
          locations={[0, 0.5, 1]}
        >
          <Text style={[styles.title, styles.hiddenText]}>Premium analytics</Text>
        </LinearGradient>
      </MaskedView>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    padding: 24,
  },
  maskWrapper: {
    backgroundColor: 'transparent',
  },
  title: {
    fontSize: 34,
    fontWeight: '800',
    letterSpacing: -1,
  },
  hiddenText: {
    opacity: 0,
  },
});

locations le plus important lorsque vous voulez que l'une des couleurs occupe plus d'espace visuel que l'autre. Si le mélange ressent la boue, réduisez d'abord le nombre de couleurs. Cela fixe généralement la conception plus rapidement que de réglage chaque arrêt.

Apporter les Gradients à la Vie avec les Animations

Les gradients statiques vous donnent du poli. Les gradients animés vous donnent des retours d'information.

La plus grande utilisation pratique n'est pas un arrière-plan flashant. C'est un chargeur qui scintille. Cet effet indique aux utilisateurs que l'application est active, que les données arrivent et que le layout qu'ils voient est intentionnel plutôt que cassé.

Une main tenant un smartphone affichant un tableau de bord de banque mobile élégant avec un design en gradient.

Un composant de lueur complète également d'autres modèles de mouvement. Si votre application utilise déjà des icônes animées ou des chargeurs, ce Guide Lottie pour React Native est utile pour décider quand un gradient qui scintille est suffisant et quand un atout d'animation plus riche fait plus de sens.

Un chargeur de glissement qui ressemble à du natif

La version la plus simple fiable utilise react-native-reanimated pour faire déplacer une bande de gradient sur un élément masqué.

Installez Reanimated si ce n'est pas déjà fait dans votre application, puis créez un wrapper avec overflow: 'hidden'Dans lequel, animez une couche de gradient de gauche à droite.

import React, { useEffect } from 'react';
import { StyleSheet, View, ViewStyle, StyleProp } from 'react-native';
import { LinearGradient } from 'expo-linear-gradient';
import Animated, {
  useAnimatedStyle,
  useSharedValue,
  withRepeat,
  withTiming,
  Easing,
} from 'react-native-reanimated';

const AnimatedView = Animated.createAnimatedComponent(View);

type Props = {
  width?: number | string;
  height?: number;
  borderRadius?: number;
  style?: StyleProp<ViewStyle>;
};

export function ShimmerPlaceholder({
  width = '100%',
  height = 16,
  borderRadius = 8,
  style,
}: Props) {
  const translateX = useSharedValue(-220);

  useEffect(() => {
    translateX.value = withRepeat(
      withTiming(220, {
        duration: 1200,
        easing: Easing.linear,
      }),
      -1,
      false
    );
  }, [translateX]);

  const animatedStyle = useAnimatedStyle(() => ({
    transform: [{ translateX: translateX.value }],
  }));

  return (
    <View
      style={[
        styles.container,
        { width, height, borderRadius },
        style,
      ]}
    >
      <AnimatedView style={[styles.shimmer, animatedStyle]}>
        <LinearGradient
          colors={['rgba(255,255,255,0)', 'rgba(255,255,255,0.35)', 'rgba(255,255,255,0)']}
          start={{ x: 0, y: 0.5 }}
          end={{ x: 1, y: 0.5 }}
          style={styles.gradient}
        />
      </AnimatedView>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    overflow: 'hidden',
    backgroundColor: '#e5e7eb',
  },
  shimmer: {
    ...StyleSheet.absoluteFillObject,
    width: 220,
  },
  gradient: {
    flex: 1,
  },
});

C'est le fait que vous n'essayez pas d'animer la définition du gradient lui-même qui fait fonctionner cela. Vous animez une couche de gradient sur un tampon statique. C'est plus simple, plus facile à raisonner et généralement plus stable sur les appareils.

Voici une présentation visuelle de l'effet en pratique :

Le composant animé

Quelques notes d'implémentation sont importantes :

  • Utilisez la découpe : Le parent doit overflow: 'hidden'ou le halo se déversera en dehors des coins arrondis.
  • Gardez la bande étroite : Une couche animée plus petite est plus facile à ajuster qu'animer la surface entière.
  • Correspond au couleur de base à l'écran : Les chargeurs de squelette doivent s'adapter au layout environnant, et pas ressembler à un widget séparé.

Les dégradés animés fonctionnent mieux lorsque les utilisateurs ne les remarquent même pas. Si le bruissement devient le plus fort élément de l'écran, il fait trop.

Performance Accessibilité et Quirks de Plateforme

Une fois les gradients passent des écrans de démo en production, les préoccupations changent. Le code semble toujours simple, mais le comportement de rendu, la lisibilité et la cohérence de la plateforme commencent à compter plus que l'effet initial.

Si vous resserrerez davantage la responsivité de l'application, cela mobile app performance optimization guide réduit les tâches inutiles, mesure sur des appareils réels et optimise les surfaces les plus fréquentées par les utilisateurs.

Liste de vérification de performance

Les gradients natifs sont généralement efficaces, mais vous pouvez toujours les mal utiliser.

  • Préférez les gradients aux grandes images décoratives : Ils sont souvent plus propres à envoyer et plus faciles à adapter à plusieurs tailles d'écran.
  • Avoid stacking many full-screen layers: Un seul dégradé de fond est acceptable. Plusieurs dégradés superposés translucides, flous et animations lourdes peuvent être coûteux.
  • Mémorisez les composants réutilisables : Si une carte de gradient est utilisée dans une liste, maintenez les props stables et évitez de la re-renderiser en raison d'états parent non liés.

Une bonne règle est de garder les gradients structuraux, pas excessifs. Utilisez-les pour définir les surfaces, pas chaque ligne dans un flux dense.

Liste de vérification d'accessibilité

Les gradients peuvent nuire à la lisibilité rapidement car le contraste change en surface.

  • Testez le texte contre la zone la plus claire : Si le texte blanc ne fonctionne que sur la face sombre de la combinaison, il ne fonctionne pas.
  • Ajoutez un écran lorsque cela est nécessaire : Un léger surimpression sombre entre l'arrière-plan et le texte est souvent préférable à un changement de palette entier.
  • Réservez le texte de gradient pour les grandes copies d'écran : Cela se présente bien en titre. C'est une mauvaise option pour les petits labels, les textes d'aide ou tout élément essentiel à une tâche.

Vérifiez le point le plus défavorable du gradient, pas le plus joli.

Liste de contrôles de particularités de plateforme

iOS et Android rendent généralement le même gradient de manière très proche, mais pas toujours parfaitement.

Problème Ce qui aide généralement
Le gradient ressemble différemment sur les plateformes Utilisez moins de couleurs et un contraste plus net entre les étapes.
Les coins arrondis ne coupent pas le gradient Placez overflow: 'hidden' sur le conteneur
Le gradient ne s'affiche pas du tout Vérifiez la largeur, la hauteur ou flex: 1 tout d'abord

Regardez également votre barre d'état et votre traitement de zone de sécurité. Un gradient qui semble équilibré dans l'émulateur peut paraître surchargé sur un appareil avec un trou si le contenu et le fond ne tiennent pas compte de cet espace supplémentaire.

Résolution de problèmes et meilleures pratiques finales

Voici la version concise que je garderais dans une note de projet.

  • Correspondre la bibliothèque au flux de travail : expo-linear-gradient pour les applications Expo gérées react-native-linear-gradient pour React Native non géré
  • Considérez les dégradés avec intention. Backgrounds, CTAs, overlays, and hero text are strong use cases.
  • Contrôler intentionnellement la direction : Horizontale pour les boutons, diagonale pour les arrières-plans décoratifs, masquée uniquement pour les textes importants.
  • Concevoir pour le contenu, pas les états vides : Tester avec du texte réel, des icônes et un traitement de la barre d'état.
  • Traiter le setup bare comme un setup natif : Les Pods, la liaison et les mocks Jest ne sont pas des détails optionnels.

Trois échecs courants se présentent à nouveau.

Le gradient ne s'affiche pas.

Cause : le composant n'a pas de taille visible.

Fix : donnez-lui flex: 1une hauteur explicite, ou un parent avec des dimensions. Un gradient sans boîte de mise en page ne s'affichera pas de manière significative.

La compilation iOS se brise après l'installation.

Cause : les pods n'ont pas été installés ou le graphique de dépendance native est désynchronisé.

Fix : exécutez pod install dans ios, nettoyez le dossier de compilation si nécessaire, puis rebuild l'application. Dans les projets bare, l'installation de package seule n'est généralement pas suffisante.

Les tests échouent avec des erreurs de module natif.

Pourquoi : Jest essaie de charger le module natif réel.

Fixe : mock react-native-linear-gradient avec react-native-linear-gradient/jest/linear-gradient-mock dans votre fichier de configuration de Jest.

Si vous gardez une seule idée de ce guide, gardez celle-ci : la gradation elle-même est facile. La mise en place prête à la production est l'effort principal. Une fois que vous avez choisi la bonne bibliothèque pour l'architecture de votre application, tout ce qui suit devient beaucoup plus prévisible.


Si votre équipe développe des applications mobiles hybrides et souhaite envoyer les mises à jour de JavaScript, CSS, copie, configuration et actifs sans attendre la revue de l'App Store. Capgo vaut la peine d'être regardé. Il donne aux équipes de CapacitorJS et Electron des mises à jour en direct contrôlées, des canaux de déploiement, une protection de rollback et une visibilité sur les versions sans transformer votre processus de déploiement en boîte noire.

Mises à jour instantanées pour les applications Capacitor

Quand un bug de la couche web est en ligne, expédiez la correction par Capgo au lieu d'attendre des jours pour l'approbation de la boutique d'applications. Les utilisateurs reçoivent la mise à jour en arrière-plan tandis que les modifications natives restent dans la voie de revue normale.

Un soutien humain de Martin

Commencez maintenant

Dernières actualités de notre blog

Capgo vous donne les meilleures informations dont vous avez besoin pour créer une application mobile vraiment professionnelle.