Table des matières
Configuration du projet avec next.js
Générateur de fond de gradient animé CSS
Gradients animés dans CSS
React Composants pour la génération de dégradé
Maison interface Web tutoriel CSS Construire un générateur de choses frontales cool

Construire un générateur de choses frontales cool

Mar 21, 2025 am 10:15 AM

Construire un générateur de choses frontales cool

Créer un outil pour générer des effets frontaux impressionnants est un moyen fantastique d'apprendre, de perfectionner vos compétences et potentiellement de reconnaître, quel que soit votre niveau d'expérience frontal. De nombreux générateurs en ligne populaires existent, tels que le générateur de héros de Sarah Drasner et le générateur de grille CSS, le générateur CSS GlassMorphism de Themesburg, et les composants de la vaste collection de l'AI, y compris leur générateur d'ombres de texte.

Cet article montre la construction d'un générateur de dégradé de fond animé.

Configuration du projet avec next.js

Ce projet utilise Next.js pour sa facilité d'utilisation. Commencez par créer une nouvelle application Next.js:

 NPX Create-next-App animé-Gradient-Background-Generator
Copier après la connexion

Modifier pages/index.js pour servir de shell de l'application:

 Importez la tête de "Suivant / Head";
import {SettingsProvider} depuis "../context/settingscontext";
Contrôles d'importation à partir de "../components/Controls";
Importer la sortie de "../components/output";

Exporter la fonction default home () {
  retour (
    
      
        <title>Générateur de fond de gradient animé CSS</title>
        <meta content="Un outil pour créer des gradients d'arrière-plan animés en CSS pur." name="description">
        <link href="/favicon.ico" rel="icon">
      
      <settingsprovider>
        <main style="{{" padding: textalign:>
          <h1 id="Générateur-de-fond-de-gradient-animé-CSS">Générateur de fond de gradient animé CSS</h1>
          <controls></controls>
          <output></output>
        </main>
      </settingsprovider>
    >
  ));
}
Copier après la connexion

Gradients animés dans CSS

La base du générateur est basée sur un exemple de Manuel Pinto, avec des arrière-plans animés de dégradé CSS. Le noyau CSS est:

 corps {
  Contexte: Linear-Gradient (-45DEG, # EE7752, # E73C7E, # 23A6D5, # 23D5AB);
  taille arrière: 400% 400%;
  Animation: le gradient 15s facilite l'infini;
}

@KeyFrames Gradient {
  0% {
    Position d'arrière-plan: 0% 50%;
  }
  50% {
    Position d'arrière-plan: 100% 50%;
  }
  100% {
    Position d'arrière-plan: 0% 50%;
  }
}
Copier après la connexion

React Composants pour la génération de dégradé

Le générateur permettra aux utilisateurs de configurer:

  • Un éventail de couleurs dégradées
  • Angle de gradient
  • Vitesse d'animation

Le fichier context/SettingsContext.js gère ces paramètres à l'aide d'un composant d'ordre supérieur et de valeurs par défaut:

 Importer React, {UseState, createContext} depuis "react";

const les paramètres Context = createContext ({couleurs: []});

const Settingsprovider = ({enfants}) => {
  const [coulorselection, setColorsElelection] = UseState ([
    "DeepskyBlue",
    "Darkviolet",
    "bleu",
  ]));
  const [angle, setangle] = useState (300);
  const [Speed, setSpeed] = UseState (5);

  retour (
    <settingscontext.provider value="{{" colorselection setcolorselection angle setangle speed setspeed>
      {enfants}
    </settingscontext.provider>
  ));
};

Export {SettingsContext, SetfitSprovider};
Copier après la connexion

La demande comprendra:

  • Contrôles: ajuste les paramètres.
  • AnimatedBackground: affiche le gradient généré.
  • Sortie: montre le code CSS généré.

Le fichier components/Controls.js (partiellement affiché, l'implémentation complète nécessite des composants Colors.js et AddColor.js détaillés ci-dessous):

 importer réagir à partir de "réagir";
Importer des couleurs à partir de "./colors";
Importez AddColor depuis "./addcolor";
Importer Anglerange de "./anglerange";
Importer SpeedRange à partir de "./speedRange";
importer aléatoire à partir de "./random";


const Controls = (accessoires) => (
  <div>
    <colors></colors>
    <addcolor></addcolor>
    <anglerange></anglerange>
    <speedrange></speedrange>
    <random></random>
  </div>
));

Exporter les contrôles par défaut;
Copier après la connexion

Le composant components/Colors.js (gestion de la sélection des couleurs et suppression):

 Importer React, {UseContext} depuis "React";
import {SettingsContext} depuis "../context/settingscontext";

const Colors = () => {
  const {coloreselection, setColOrselection} = useContext (settingsContext);

  const ondelete = (DeleteColor) => {
    setColorsElelection (couleurs de couleurs.filter ((couleur) => couleur! == DeleteColor));
  };

  retour (
    <div>
      {coulorselection.map ((couleur) => (
        <div key="{color}" style="{{" display: width: height: marginright: marginbottom: background: color borderradius: position:>
          <button onclick="{()"> ondelete (couleur)}
            style = {{
              Contexte: "Crimson",
              Couleur: "blanc",
              Borderradius: "50%",
              Position: "Absolu",
              en haut: "-8px",
              à droite: "-8px",
              Border: "Aucun",
              Fontsize: "18px",
              LineHeight: 1,
              Largeur: "24px",
              hauteur: "24px",
              curseur: "pointeur",
            }}
          >
            ×
          </button>
        </div>
      ))}
    </div>
  ));
};

exporter les couleurs par défaut;
Copier après la connexion

Le composant components/AddColor.js (en utilisant react-color pour la sélection des couleurs):

 // ... (instructions d'importation)

const addColor = () => {
  const [displayPicker, setDisplayPicker] = useState (false);
  const {coloreselection, setColOrselection} = useContext (settingsContext);

  const handlecolorchange = (couleur) => {
    setColorselection ([... coloreselection, colore.hex]);
    setDisplayPicker (false);
  };

  retour (
    <div>
      <button onclick="{()"> setDisplayPicker (! DisplayPicker)}>
        Ajouter la couleur
      </button>
      {displayPicker && (
        <chromepicker color="#fff" onchangecomplete="{handleColorChange}"></chromepicker>
      )}
    </div>
  ));
};

Exporter par défaut addColor;
Copier après la connexion

Les components/AngleRange.js et components/SpeedRange.js Composants (Angle de manipulation et réglages de vitesse):

 // anglerange.js
Importer React, {UseContext} depuis "React";
import {SettingsContext} depuis "../context/settingscontext";

const anglerange = () => {
  const {angle, setangle} = useContext (settingsContext);

  retour (
    <div style="{{" marginbottom:>
      <label htmlfor="angle">Angle:</label>
      <input type="range" id="angle" min="0" max="360" value="{angle}" onchange="{(e)"> setangle (parseInt (e.target.value, 10))}
      />
      <span>{angle} degrés</span>
    </div>
  ));
};

Exporter Anglerange par défaut;

// SpeedRange.js (structure similaire, en utilisant SetSpeed ​​au lieu de setangle)
Copier après la connexion

Le composant components/Random.js (pour générer des paramètres aléatoires):

 Importer React, {UseContext} depuis "React";
import {SettingsContext} depuis "../context/settingscontext";

const random = () => {
  const {setColOrselection, setangle, setSpeed} = useContext (settingsContext);

  const generaterandomcolor = () => {
    retourner "#" Math.floor (math.random () * 16777215) .ToString (16);
  };

  const generaterandomsettings = () => {
    Cons numColors = 3 Math.floor (math.random () * 3);
    const Colors = array.from ({longueur: numColors}, generaterandomColor);
    setColorselection (couleurs);
    setangle (math.floor (math.random () * 360));
    setSpeed ​​(math.floor (math.random () * 10) 1);
  };

  retour (
    <button onclick="{generateRandomSettings}">Générer des paramètres aléatoires</button>
  ));
};

Exporter par défaut aléatoire;
Copier après la connexion

Le composant components/AnimatedBackground.js (applique les styles générés):

 Importer React, {UseContext} depuis "React";
import {SettingsContext} depuis "../context/settingscontext";

const AnimatedBackground = ({enfants}) => {
  const {coloreselection, speed, angle} = useContext (settingsContext);

  const Background = `linéaire-gradient ($ {angle} deg, $ {coloreselection.join (
    ","
  )}) `;
  const BackgroundSize = `$ {coulorselection.length * 60}% $ {
    coloreselection.length * 60
  }% `;
  const Animation = `Gradient-Animation $ {
    ColordeSelection.length * Math.abs (vitesse - 11)
  } s faciliter infin ';

  retour (
    <div style="{{" background backgroundsize animation minheight:>
      {enfants}
    </div>
  ));
};

Exporter par défaut AnimatedBackground;
Copier après la connexion

Le composant components/Output.js (affiche et permet de copier le CSS généré):

 importer react, {useContext, useState} de "react";
import {SettingsContext} depuis "../context/settingscontext";

const Output = () => {
  const [copié, setCopied] = useState (false);
  const {coloreselection, speed, angle} = useContext (settingsContext);

  const generatecss = () => {
    const Background = `linéaire-gradient ($ {angle} deg, $ {coloreselection.join (
      ","
    )}) `;
    const BackgroundSize = `$ {coulorselection.length * 60}% $ {
      coloreselection.length * 60
    }% `;
    const Animation = `Gradient-Animation $ {
      ColordeSelection.length * Math.abs (vitesse - 11)
    } s faciliter infin ';

    Retour '
      .Gradient-Background {
        Contexte: $ {fond};
        Background-Size: $ {backgroundSize};
        Animation: $ {animation};
      }

      @KeyFrames Gradient-Animation {
        0% {Position d'arrière-plan: 0% 50%; }
        50% {Position de fond: 100% 50%; }
        100% {position de fond: 0% 50%; }
      }
    `;
  };

  const handlecopy = () => {
    navigator.clipboard.writeText (generatecss ());
    setcopied (true);
    setTimeout (() => setcopied (false), 2000); // Réinitialiser après 2 secondes
  };

  retour (
    <div style="{{" margintop:>
      <pre class="brush:php;toolbar:false">{generatecss ()}
Copier après la connexion
)); }; Exporter la sortie par défaut;

N'oubliez pas d'ajouter les images clés de gradient-animation à votre CSS global (par exemple, styles/globals.css ). Enfin, enveloppez votre contenu principal dans le composant AnimatedBackground dans pages/index.js . N'oubliez pas d'installer react-color : npm install react-color . Cette ventilation détaillée fournit un générateur plus robuste et convivial. N'oubliez pas d'ajuster le style au besoin pour une présentation optimale.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1667
14
Tutoriel PHP
1273
29
Tutoriel C#
1255
24
Une comparaison des fournisseurs de formulaires statiques Une comparaison des fournisseurs de formulaires statiques Apr 16, 2025 am 11:20 AM

Essayons de savoir un terme ici: "fournisseur de formulaire statique". Vous apportez votre HTML

Une preuve de concept pour rendre Sass plus rapidement Une preuve de concept pour rendre Sass plus rapidement Apr 16, 2025 am 10:38 AM

Au début d'un nouveau projet, la compilation SASS se produit en un clin d'œil. Cela se sent bien, surtout quand il est associé à BrowSersync, qui recharge

Actualités hebdomadaires de la plate-forme: attribut HTML Loading, les principales spécifications Aria et le passage de iframe à Shadow Dom Actualités hebdomadaires de la plate-forme: attribut HTML Loading, les principales spécifications Aria et le passage de iframe à Shadow Dom Apr 17, 2025 am 10:55 AM

Dans cette semaine, le Roundup des nouvelles de la plate-forme, Chrome présente un nouvel attribut pour le chargement, les spécifications d'accessibilité pour les développeurs Web et la BBC Moves

Certains pratiques avec l'élément de dialogue HTML Certains pratiques avec l'élément de dialogue HTML Apr 16, 2025 am 11:33 AM

C'est moi qui regarde l'élément HTML pour la première fois. J'en ai été conscient depuis un certain temps, mais il ne l'a pas encore pris pour un tour. Il a un peu cool et

Forme de papier Forme de papier Apr 16, 2025 am 11:24 AM

L'achat ou la construction est un débat classique de la technologie. Construire des choses vous-même peut être moins cher car il n'y a pas d'article de ligne sur votre facture de carte de crédit, mais

Où devrait «abonner au podcast» vers le lien? Où devrait «abonner au podcast» vers le lien? Apr 16, 2025 pm 12:04 PM

Pendant un certain temps, iTunes était le grand chien du podcasting, donc si vous avez lié "Abonnez-vous au podcast" pour aimer:

Options pour héberger vos propres analyses non-javascript Options pour héberger vos propres analyses non-javascript Apr 15, 2025 am 11:09 AM

Il existe de nombreuses plates-formes d'analyse pour vous aider à suivre les données des visiteurs et d'utilisation sur vos sites. Peut-être plus particulièrement Google Analytics, qui est largement utilisé

C'est tout dans la tête: gérer la tête de document d'un site alimenté par réact avec un casque React C'est tout dans la tête: gérer la tête de document d'un site alimenté par réact avec un casque React Apr 15, 2025 am 11:01 AM

Le chef de document n'est peut-être pas la partie la plus glamour d'un site Web, mais ce qui y va est sans doute tout aussi important pour le succès de votre site Web que son

See all articles