recherche
Maisoninterface Webtutoriel CSSBasculer le mode sombre à l'aide de DIIVLESS Pure CSS

Toggle Dark Mode using DIVLESS Pure CSS

Venant du point de vue de devoir écrire une documentation .html dans un environnement sharepoint de travail qui interdit javascript par défaut, j'ai été chargé de "Oh, et ajoutez un bouton pour basculer en mode sombre, merci!"

Ceci, en plus de la formulation « HTML sémantique valide et accessible » dans nos documents de politique que le patron assimile à « Même un seul DIV est de la paresse », a rendu les choses pour le moins un peu délicates.

@media (préfère le schéma de couleurs : sombre)

En contre-point, j'ai suggéré qu'au lieu d'une bascule, nous stylisons simplement la page pour qu'elle corresponde aux préférences système clair/sombre de chaque utilisateur avec une requête multimédia. La réponse a été "D'accord, commencez par ça, mais mettez quand même la bascule." Génial, je me suis créé plus de travail en essayant d'en créer moins.

J'ai déjà noté que j'aurais besoin de variables CSS et d'une méthode de saisie/étiquette de case à cocher pour contrôler le mode Clair/Sombre, mais :checked ~ * n'affecterait toujours que les éléments venant après la saisie, ce qui rendrait le style d'arrière-plan difficile à basculer.

Ma première solution a été d'utiliser un DIV générique positionné absolument en dessous de tout, qui a fonctionné jusqu'à ce que le patron le repère et me dise de s'en débarrasser. Le seul point positif est qu'ils acceptent l'utilisation du HTML/CSS moderne tant que la couverture de compatibilité est supérieure à 90 % des navigateurs.

:has() à la rescousse !

Quand j'ai vu pour la première fois cette syntaxe CSS proposée pour cibler l'élément parent avant sa mise en œuvre, je ne savais pas à quoi elle servirait. Maintenant que je l'ai retrouvé pendant que je cherchais des solutions, je me suis dit : "Pourquoi ne pas l'essayer sur BODY ?"

Cela a fonctionné immédiatement et je me suis fâché de ne pas l'avoir essayé plus tôt ! Voici le CSS pertinent avec lequel je me suis retrouvé :

      * { /* LIGHT mode */
        --tcolor: #000;
        --bgcolor: #FFF;
        --lcontent: "DARK";
        --bgimage: linear-gradient(rgba(255,255,255,0.5),rgba(255,255,255,0.5)), url(INSERT_SEASONAL_BACKGROUND);
        --sbgcolor: rgba(255,255,255,0.75);
        --alink:blue;
        --avisited:purple;
      }
      body:has(#d:checked), body:has(#d:checked) * { /* DARK mode */
        --tcolor: #FFF;
        --bgcolor: #000;
        --lcontent: "LIGHT";
        --bgimage: linear-gradient(rgba(0,0,0,0.5),rgba(0,0,0,0.5)), url(INSERT_SEASONAL_BACKGROUND);
        --sbgcolor: rgba(0,0,0,0.75);
        --alink:lightblue;
        --avisited:#8467D7;
      }
@media (prefers-color-scheme: dark) {
      * { /* DARK mode */
        --tcolor: #FFF;
        --bgcolor: #000;
        --lcontent: "LIGHT";
        --bgimage: linear-gradient(rgba(0,0,0,0.5),rgba(0,0,0,0.5)), url(INSERT_SEASONAL_BACKGROUND);
        --sbgcolor: rgba(0,0,0,0.75);
        --alink:lightblue;
        --avisited:#8467D7;
      }
      body:has(#d:checked), body:has(#d:checked) * { /* LIGHT mode */
        --tcolor: #000;
        --bgcolor: #FFF;
        --lcontent: "DARK";
        --bgimage: linear-gradient(rgba(255,255,255,0.5),rgba(255,255,255,0.5)), url(INSERT_SEASONAL_BACKGROUND);
        --sbgcolor: rgba(255,255,255,0.75);
        --alink:blue;
        --avisited:purple;
      }
}
      body { /* base element under control of mode */
        color:var(--tcolor); /* match text color to mode */
        background-image:var(--bgimage); /* match opacity overlay to mode */
        background-repeat: no-repeat no-repeat, space no-repeat;
        background-size:auto 100vh;
        margin:-1ex;
      }
      label[for="d"]::after {content: var(--lcontent);} /* DARK or LIGHT text */
      section{ /* main interaction area */
        margin:0 auto;
        background-color:var(--sbgcolor);
        padding:1ex;
        padding-top:0;
        height:fit-content;
        max-height:96.2vh;
        overflow-y:scroll;
        scrollbar-color:rgba(128,128,128,0.5) var(--sbgcolor);
      }
      li:nth-of-type(even){ /* subtle horizontal lines */
        background-color:rgba(128,128,128,0.1);
      }
      summary:hover,summary:focus-visible,a:hover,a:focus-visible { /* match mouseover or     */
        background-color:var(--bgcolor);                            /* keyboard focus to mode */
      }
      a:link {color: var(--alink)}       /* match link     */
      a:visited {color: var(--avisited)} /* colors to mode */

J'ai triché en utilisant rgba(128,128,128,0.5) pour garder la couleur de la barre de défilement SECTION neutre.

Le résultat final (non inhibé par sharepoint) ressemble à ceci.

En bonus, voici la structure des données du schéma de cette page ajoutée manuellement à l'aide d'attributs, une autre tâche qui m'a été confiée sans javascript.

Maintenant, je dois juste comprendre comment déclencher ces sons audio sans javascript !?

N'hésitez pas à commenter votre propre expérience de travail dans des environnements limités, ce qui a fonctionné et ce qui n'a pas fonctionné !

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
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
Le positionnement de l'ancre ne se soucie pas de l'ordre sourceLe positionnement de l'ancre ne se soucie pas de l'ordre sourceApr 29, 2025 am 09:37 AM

Le fait que le positionnement de l'ancrage évite l'ordre de source HTML est si CSS-y parce qu'il est une autre séparation des préoccupations entre le contenu et la présentation.

Que signifie marge: 40px 100px 120px 80px?Que signifie marge: 40px 100px 120px 80px?Apr 28, 2025 pm 05:31 PM

L'article traite de la propriété CSS Margin, en particulier "Marge: 40px 100px 120px 80px", son application et les effets sur la mise en page de la page Web.

Quelles sont les différentes propriétés de la frontière CSS?Quelles sont les différentes propriétés de la frontière CSS?Apr 28, 2025 pm 05:30 PM

L'article traite des propriétés des frontières CSS, en se concentrant sur la personnalisation, les meilleures pratiques et la réactivité. Argument principal: Border-Radius est le plus efficace pour les conceptions réactives.

Quels sont les arrière-plans CSS, énumérez les propriétés?Quels sont les arrière-plans CSS, énumérez les propriétés?Apr 28, 2025 pm 05:29 PM

L'article traite des propriétés de fond CSS, de leurs utilisations dans l'amélioration de la conception du site Web et des erreurs courantes à éviter. L'accent est mis sur la conception réactive en utilisant la taille de l'arrière-plan.

Quelles sont les couleurs CSS HSL?Quelles sont les couleurs CSS HSL?Apr 28, 2025 pm 05:28 PM

L'article traite des couleurs CSS HSL, de leur utilisation dans la conception Web et des avantages par rapport à RVB. L'objectif principal est d'améliorer la conception et l'accessibilité grâce à une manipulation intuitive des couleurs.

Comment pouvons-nous ajouter des commentaires dans CSS?Comment pouvons-nous ajouter des commentaires dans CSS?Apr 28, 2025 pm 05:27 PM

L'article traite de l'utilisation des commentaires dans CSS, détaillant les syntaxes de commentaires à ligne unique et multi-lignes. Il soutient que les commentaires améliorent la lisibilité, la maintenabilité et la collaboration du code, mais peuvent avoir un impact sur les performances du site Web si elles ne sont pas gérées correctement.

Que sont les sélecteurs CSS?Que sont les sélecteurs CSS?Apr 28, 2025 pm 05:26 PM

L'article traite des sélecteurs CSS, de leurs types et de l'utilisation pour le style des éléments HTML. Il compare les sélecteurs ID et classe et aborde les problèmes de performances avec des sélecteurs complexes.

Quel type de CSS détient la priorité la plus élevée?Quel type de CSS détient la priorité la plus élevée?Apr 28, 2025 pm 05:25 PM

L'article traite de la priorité CSS, en se concentrant sur les styles en ligne ayant la plus grande spécificité. Il explique les niveaux de spécificité, les méthodes de remplacement et les outils de débogage pour gérer les conflits CSS.

See all articles

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 !

Outils chauds

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

SublimeText3 version Mac

SublimeText3 version Mac

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

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.