Lors de la conception de mon jardin numérique, je savais que je voulais un joli mode sombre. Une fois que j'ai dessiné mon SVG, j'ai commencé à créer un composant Web doté des mêmes fonctionnalités que mon basculement en mode sombre dans React. Cela inclut tout ce que j'ai appris lors de l'audit d'accessibilité de mon site.
En plus de changer le thème, la bascule doit prendre en compte la sélection du schéma de couleurs préféré de l'utilisateur et conserver les préférences de l'utilisateur lors des rechargements. Pour des raisons d'accessibilité, l'annonce du lecteur d'écran de la bascule doit avoir un sens (par exemple, "activer le mode sombre"). Puisque je souhaite afficher un SVG au lieu d'une case à cocher avec du texte, je vais devoir ajouter un style de focus et de survol ainsi qu'une étiquette qui apparaît au survol.
Basculer le composant Web
Tout d'abord, j'ai besoin d'une classe Toggle qui crée un élément HTML. À l'aide de l'API d'élément personnalisé, je définirai
À l'aide du constructeur de la classe, j'ai défini le innerHTML de
Une fois le HTML en place, j'ajoute une fonctionconnectedCallback à la classe. Cette partie de l'API des éléments personnalisés définit les fonctions à utiliser dans le composant et exécute le code lorsque le composant est inséré dans le DOM.
// /components/toggle.js class Toggle extends HTMLElement { constructor() { super(); this.innerHTML = ` <label title="dark mode toggle"> <input type="checkbox" id="theme-toggle" class="theme-switch"> <svg id="daisy">{SVG code removed for brevity}</svg> </label> ` this.setAttribute("class", "toggle-component"); } connectedCallback() { function switchTheme(e) { if (e.target.checked) { setTheme('dark'); return; } setTheme('light'); }; function setTheme(themeName) { localStorage.setItem('theme', themeName); document.documentElement.setAttribute('data-theme', themeName); }; function setCheckBox(toggleSwitch, theme) { toggleSwitch.checked = theme === 'dark' ? true : false; } function keepTheme() { const toggleSwitch = document.querySelector('#theme-toggle'); toggleSwitch.addEventListener('change', switchTheme, false); const theme = localStorage.getItem('theme'); if (theme) { setTheme(theme); setCheckBox(toggleSwitch, theme); return; }; const prefersLightTheme = window.matchMedia('(prefers-color-scheme: light)'); if (prefersLightTheme.matches) { setTheme('light'); return; }; setTheme('dark'); setCheckBox(toggleSwitch, 'dark'); }; document.addEventListener("DOMContentLoaded", keepTheme); } } customElements.define("toggle-component", Toggle);
Parce que
Le reste de keepTheme est dédié au choix du bon thème au chargement. Tout d’abord, il vérifie localStorage pour voir si les préférences de l’utilisateur sont déjà définies. Ensuite, il vérifie si le schéma de couleurs préférées est défini sur « clair ». Enfin, il est par défaut en mode sombre. Pour les modes sombre et clair, j'appelle setTheme. Pour le mode sombre, j'appelle également setCheckbox. La case à cocher se monte dans un état non coché. Un lecteur d'écran annoncera "mode sombre" et indiquera si la case est cochée. Pour obtenir une annonce du type « basculement du mode sombre coché » ou « basculement du mode sombre activé », je dois cocher la case par programme lorsque je définis le thème sur « sombre » au chargement.
Basculer le style
J'ai choisi de dessiner un design assez simple pour pouvoir mettre mon code SVG directement dans le composant Web et changer la couleur de remplissage par programme. De cette façon, la couleur d’arrière-plan de la marguerite correspond toujours au thème. Ensuite, j'utilise l'opacité : 0 ; pour masquer la case à cocher et la positionner au milieu de l'image. Enfin, j'ajoute les styles de survol et de mise au point.
// /components/toggle.js class Toggle extends HTMLElement { constructor() { super(); this.innerHTML = ` <label title="dark mode toggle"> <input type="checkbox" id="theme-toggle" class="theme-switch"> <svg id="daisy">{SVG code removed for brevity}</svg> </label> ` this.setAttribute("class", "toggle-component"); } connectedCallback() { function switchTheme(e) { if (e.target.checked) { setTheme('dark'); return; } setTheme('light'); }; function setTheme(themeName) { localStorage.setItem('theme', themeName); document.documentElement.setAttribute('data-theme', themeName); }; function setCheckBox(toggleSwitch, theme) { toggleSwitch.checked = theme === 'dark' ? true : false; } function keepTheme() { const toggleSwitch = document.querySelector('#theme-toggle'); toggleSwitch.addEventListener('change', switchTheme, false); const theme = localStorage.getItem('theme'); if (theme) { setTheme(theme); setCheckBox(toggleSwitch, theme); return; }; const prefersLightTheme = window.matchMedia('(prefers-color-scheme: light)'); if (prefersLightTheme.matches) { setTheme('light'); return; }; setTheme('dark'); setCheckBox(toggleSwitch, 'dark'); }; document.addEventListener("DOMContentLoaded", keepTheme); } } customElements.define("toggle-component", Toggle);
Utilisation du composant Web bascule
Tout ce que j'ai à faire est d'importer ma feuille de style et mon script de composant dans le fichier
d'une page HTML. Ensuite, je peux appeler/* /styles/styles.css */ [data-theme="light"] { --toggle-background: #242D54; } [data-theme="dark"] { --toggle-background: #282e53; } #daisy path { fill: var(--toggle-background); } .theme-switch { position: relative; bottom: 30px; left: 55px; width: 1em; height: 1em; opacity: 0; } .theme-switch:focus + #daisy path, .theme-switch:hover + #daisy path { fill: white; } .theme-switch:focus + #daisy { outline: 3px solid white; outline-offset: 5px; }
Conclusion
Je me suis amusé à faire en sorte que mon mode sombre fonctionne aussi bien dans un composant Web que dans React. Vous pouvez le voir en direct dans mon jardin numérique et le code complet dans le dépôt GitHub.
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!

Ce tutoriel montre la création de formulaires JavaScript professionnels à l'aide du cadre Smart Forms (Remarque: non plus disponible). Bien que le cadre lui-même ne soit pas disponible, les principes et techniques restent pertinents pour d'autres constructeurs de formulaires.

Le CSS Box-Shadow et les propriétés de contour ont gagné le thème. Laissez regarder quelques exemples de la façon dont cela fonctionne dans des thèmes réels et des options que nous devons appliquer ces styles aux blocs et éléments WordPress.

Ceci est le 3ème article d'une petite série que nous avons faite sur l'accessibilité. Si vous avez manqué le deuxième article, consultez "Gestion de la mise au point des utilisateurs avec: Focus-visible". Dans

La construction d'un éditeur de texte en ligne n'est pas triviale. Le processus commence par rendre l'élément cible modifiable, gérer des exceptions potentielles de syntaxerror en cours de route. Créer votre éditeur Pour créer cet éditeur, vous devrez modifier dynamiquement le contenu

L'API de transition Svelte fournit un moyen d'animer les composants lorsqu'ils entrent ou quittent le document, y compris les transitions Svelte personnalisées.

Si vous avez récemment commencé à travailler avec GraphQL ou examiné ses avantages et ses inconvénients, vous avez sans aucun doute entendu des choses comme "GraphQL ne prend pas en charge la mise en cache" ou

Cet article explore les meilleurs scripts de générateur de formulaires PHP disponibles sur le marché Envato, en comparant leurs fonctionnalités, leur flexibilité et leurs design. Avant de plonger dans des options spécifiques, comprenons ce qu'est un constructeur de formulaires PHP et pourquoi vous en utiliseriez un. Un formulaire PHP

Ce tutoriel vous guide dans la création d'un système de téléchargement de fichiers à l'aide de Node.js, Express et Multer. Nous couvrirons les téléchargements de fichiers uniques et multiples, et nous ferons même de la démonstration de stockage d'images dans une base de données MongoDB pour une récupération ultérieure. Tout d'abord, configurez votre projec


Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

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

DVWA
Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

Listes Sec
SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

ZendStudio 13.5.1 Mac
Puissant environnement de développement intégré PHP
