écrit par Rob O'Leary??
Les
Comment les et travailler ensemble ?
Lorsque l'utilisateur clique sur le widget ou se concentre dessus et appuie sur la barre d'espace, il s'ouvre et révèle des informations supplémentaires. Le marqueur triangulaire pointe vers le bas pour indiquer qu'il est dans un état ouvert?:
Le widget de divulgation a une étiquette qui est toujours affichée et est fournie par le
Vous pouvez également fournir plusieurs éléments après le
<details> <summary>Do you want to know more?</summary> <h3>Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
Style et
Il y a quelques problèmes d'interopérabilité qui doivent être pris en compte lors du style des éléments
Le
Le widget de divulgation comporte deux pseudo-éléments pour styliser ses éléments constitutifs?:
- Le pseudo-élément ::marker?: représente le marqueur triangulaire qui se trouve au début du
. L’histoire du style est un peu compliquée. Nous sommes limités à un petit ensemble de propriétés CSS. La prise en charge du navigateur est bonne pour ::marker, mais Safari ne prend actuellement pas en charge l'ensemble complet des propriétés. J'en discuterai plus en détail dans la section ??Style du marqueur de résumé?? de cet article - Le pseudo-élément ::details-content?: Représente les ??informations supplémentaires?? de . Il s'agit d'un ajout récent, la prise en charge du navigateur est donc actuellement limitée à Chrome.
Dans les sections suivantes, je présenterai certaines des fa?ons les plus récentes et les moins connues de personnaliser un widget de divulgation.
Animer les actions d'ouverture et de fermeture
Lorsque vous ouvrez un widget de divulgation, il s'ouvre instantanément. Clignez des yeux, et vous le manquerez?!
Il est préférable de passer d'un état à un autre de manière plus progressive pour montrer à l'utilisateur l'impact de son action. Pouvons-nous ajouter une animation de transition aux actions d'ouverture et de fermeture d'un widget de divulgation?? Bref, oui !
Pour animer cela, nous voulons que la hauteur du contenu caché passe de zéro à sa hauteur finale. La valeur par défaut de la propriété height est auto, ce qui laisse au navigateur le soin de calculer la hauteur en fonction du contenu. L'animation sur une valeur auto n'était pas possible en CSS jusqu'à l'ajout de la propriété [interpolate-size](https://nerdy.dev/interpolate-size). Bien que la prise en charge du navigateur soit un peu limitée pour les nouvelles fonctionnalités CSS que nous devons utiliser (principalement interpolate-size et ::details-content), il s'agit d'un excellent exemple d'amélioration progressive. Cela fonctionnera actuellement dans Chrome?!
Voici un exemple CodePen de l'animation.
Comment fonctionne l’animation de divulgation??
Tout d'abord, nous ajoutons une taille d'interpolation afin de pouvoir passer à une hauteur automatique?:
<details> <summary>Do you want to know more?</summary> <h3>Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
Ensuite, nous voulons décrire le style fermé. Nous voulons que le contenu ??informations supplémentaires?? ait une hauteur de zéro et garantisse qu'aucun contenu n'est visible, c'est-à-dire que nous voulons éviter tout débordement.
Nous utilisons le pseudo-élément ::details-content pour cibler le contenu caché. J'utilise la propriété block-size plut?t que la propriété height car c'est une bonne habitude d'utiliser des propriétés logiques. Nous devons inclure la visibilité du contenu dans la transition car le navigateur définit la visibilité du contenu?: caché sur le contenu lorsqu'il est dans un état fermé — l'animation de fermeture ne fonctionnera pas sans l'inclure?:
<details> <summary>Do you want to know more?</summary> <h3>Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
L'animation ne fonctionnera toujours pas comme prévu car la propriété content-visibility est une propriété animée discrète. Cela signifie qu'il n'y a pas d'interpolation ; le navigateur basculera entre les deux valeurs afin que le contenu en transition soit affiché pendant toute la durée de l'animation. Nous ne voulons pas de cela.
Si nous incluons transition-behavior:allow-discrete;, la valeur s'inverse à la toute fin de l'animation, nous obtenons donc notre transition progressive.
De plus, nous obtenons un débordement de contenu en définissant la taille du bloc sur 0 lorsque le widget de divulgation est dans un état intermédiaire. Nous montrons la plupart du contenu dès son ouverture. Pour éviter que cela ne se produise, nous ajoutons overflow: Hidden.
Enfin, nous ajoutons le style pour l'état ouvert. Nous voulons que l'état final ait une taille auto?:
details { interpolate-size: allow-keywords; }
Ce sont les grandes lignes. Si vous préférez une explication vidéo plus détaillée, consultez la procédure pas à pas de Kevin Powell pour savoir comment animer
Existe-t-il d'autres considérations lors de l'animation d'un widget de divulgation??
Le widget de divulgation peut s'agrandir horizontalement si le contenu des ? informations supplémentaires ? est plus large que le
Comme toute animation, vous devez prendre en compte les utilisateurs sensibles au mouvement. Vous pouvez utiliser la requête multimédia préfère-réduire le mouvement pour répondre à ce scénario?:
/* closed state */ details::details-content { block-size: 0; transition: content-visibility, block-size; transition-duration: 750ms; transition-behavior: allow-discrete; overflow: hidden; }
Implémentation d'une fonctionnalité exclusive groupe (accordéon exclusif)
Un modèle d'interface utilisateur courant est un composant accordéon. Il consiste en une pile de widgets de divulgation qui peuvent être étendus pour révéler leur contenu. Pour implémenter ce modèle, vous avez juste besoin de plusieurs
/* open state */ details[open]::details-content { block-size: auto; }
Le style par défaut est assez simple?:
Chaque
Une variante de ce modèle consiste à rendre l'accordéon exclusif afin qu'un seul des widgets de divulgation puisse être ouvert à la fois. Dès que l’un est ouvert, le navigateur ferme l’autre. Vous pouvez créer des groupes exclusifs via l'attribut de nom
<details> <summary>Do you want to know more?</summary> <h3>Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
Avant d'utiliser des accordéons exclusifs, déterminez si cela est utile aux utilisateurs. Si les utilisateurs sont susceptibles de vouloir consommer davantage d’informations, cela les obligera à ouvrir souvent les éléments, ce qui peut s’avérer frustrant.
Cette fonctionnalité est actuellement prise en charge dans tous les navigateurs modernes, vous pouvez donc l'utiliser immédiatement.
Styliser le marqueur de résumé
Un widget de divulgation est généralement présenté avec un petit marqueur triangulaire à c?té. Dans cette section, nous aborderons le processus de style de ce marqueur.
Le marqueur est associé au
- Toutes les propriétés de la police
- couleur
- espace blanc
- text-combine-upright, [unicode-bidi](https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-bidi) et propriétés de direction
- contenu
- Toutes les propriétés d'animation et de transition
Comme mentionné précédemment,
Avant de passer aux exemples, un petit mot sur la prise en charge des navigateurs. Au moment de la rédaction, Safari est le seul navigateur majeur qui ne prend pas entièrement en charge le style du marqueur?:
- La prise en charge de Safari est actuellement limitée au style des propriétés de couleur et de taille de police du pseudo-élément ::marker. Safari prend en charge le pseudo-élément non standard ::-webkit-details-marker
- Safari ne prend pas du tout en charge le style des propriétés de style liste. Voir CanIUse pour référence
Changer la couleur et la taille d'un marqueur
Disons que nous voulions changer la couleur du marqueur triangulaire en rouge et l'agrandir de 50 %. Nous pouvons faire ce qui suit?:
details { interpolate-size: allow-keywords; }
Cela devrait fonctionner sur tous les navigateurs. Voici l'exemple de CodePen.
Ajustement de l'espacement du marqueur
Par défaut, le marqueur se trouve à c?té du contenu du texte
Si nous définissons list-style-position sur outside, le marqueur se trouve à l'extérieur du
<details> <summary>Do you want to know more?</summary> <h3>Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
Vous pouvez le voir dans le deuxième cas dans la capture d'écran ci-dessus.
Voici un CodePen de cet exemple?:
Changer le texte/l'image du marqueur
Si vous souhaitez modifier le contenu du marqueur, vous pouvez utiliser la propriété content du pseudo-élément ::marker. En fonction de vos préférences, vous pouvez le définir sur du texte. Pour mon exemple, j'ai utilisé l'emoji bouche zippée pour l'état fermé et l'emoji bouche ouverte pour l'état ouvert?:
details { interpolate-size: allow-keywords; }
Pour utiliser une image pour le marqueur, vous pouvez utiliser la propriété content du pseudo-élément ::marker, ou la propriété list-style-image de
/* closed state */ details::details-content { block-size: 0; transition: content-visibility, block-size; transition-duration: 750ms; transition-behavior: allow-discrete; overflow: hidden; }
Dans l'exemple suivant, nous utilisons deux ic?nes de flèche provenant des symboles matériels pour le marqueur. La flèche orientée vers la droite correspond à l'état fermé et la flèche orientée vers le bas correspond à l'état ouvert?:
Ces exemples fonctionneront comme prévu dans Chrome et Firefox, mais Safari ignorera les styles. Vous pouvez aborder cela comme une amélioration progressive et mettre fin à cela. Mais si vous souhaitez la même apparence dans tous les navigateurs, vous pouvez masquer le marqueur, puis ajouter votre propre image en remplacement. Cela vous donne plus de liberté?:
/* open state */ details[open]::details-content { block-size: auto; }
Vous pouvez indiquer visuellement l'état à l'aide d'une nouvelle ic?ne de marqueur, comme une image en ligne ou via des pseudo-éléments. Le
<details> <summary>Do you want to know more?</summary> <h3>Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
Vous pouvez également choisir de positionner le marqueur à la fin du
details { interpolate-size: allow-keywords; }
Cependant, il est important de noter que masquer le marqueur entra?ne des problèmes d'accessibilité avec les lecteurs d'écran. Firefox, VoiceOver, JAWS et NVDA ont tous un problème pour annoncer systématiquement l'état basculé du widget de divulgation si le marqueur est supprimé. Malheureusement, le style est lié à l’état. Il est préférable d'éviter de faire cela.
Styliser la section ? informations supplémentaires ? de
Vous souhaiterez peut-être styliser la section ? informations supplémentaires ? du widget de divulgation sans divulguer de styles dans le
/* closed state */ details::details-content { block-size: 0; transition: content-visibility, block-size; transition-duration: 750ms; transition-behavior: allow-discrete; overflow: hidden; }
Mon choix est d'exclure le
/* open state */ details[open]::details-content { block-size: auto; }
Vous pouvez également utiliser le pseudo-élément ::details-content, qui cible la section entière. C'est pourquoi vous souhaitez l'utiliser pour animer les transitions d'état d'ouverture et de fermeture?:
>@media (prefers-reduced-motion) { /* styles to apply if a user's device settings are set to reduced motion */ details::details-content { transition-duration: 0.8s; /* slower speed */ } }
Vous remarquez la différence?? Il n'y a qu'une seule marge au début de la section. Le
et
Erreurs courantes lors du style des widgets de divulgation
- Historiquement, il n'était pas possible de modifier le type d'affichage de la fenêtre
élément. Cette restriction a été assouplie dans Chrome - Soyez prudent en modifiant le type d'affichage
. La valeur par défaut est display: list-item;; si vous le modifiez pour display: block;, cela peut entra?ner le masquage du marqueur dans certains navigateurs. Il s'agissait d'un problème dans Firefox?:
<details> <summary>Payment Options</summary> <p>...</p> </details> <details> <summary>Personalise your PIN</summary> <p>...</p> </details> <details> <summary>How can I add an additional cardholder to my Platinum Mastercard</summary> <p>...</p> </details>
- Vous ne pouvez pas imbriquer
-
Parce que le
L'élément a un r?le ARIA par défaut de bouton, il supprime tous les r?les des éléments enfants. Par conséquent, si vous souhaitez avoir un en-tête tel que dans un
, les technologies d'assistance telles que les lecteurs d'écran ne le reconna?tront pas comme un titre. Essayez d'éviter ce modèle?:
<details> <summary>Do you want to know more?</summary> <h3>Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
Masquer le marqueur entra?ne des problèmes d'accessibilité avec certains lecteurs d'écran. Firefox, VoiceOver, JAWS et NVDA ont tous un problème pour annoncer systématiquement l'état basculé du widget de divulgation si le marqueur est supprimé
Y a-t-il d'autres changements à venir ?
Récemment, il y a eu une grande proposition pour aider à faire des
- Supprimez les restrictions de propriétés d'affichage CSS afin de pouvoir utiliser d'autres types d'affichage comme flex et grille
- Précisez plus clairement la structure de l'arbre d'ombre. Cela devrait faciliter l'interopérabilité avec Flexbox et CSS Grid
- Ajoutez un pseudo-élément ::details-content pour adresser le deuxième emplacement afin qu'un conteneur pour les "informations supplémentaires" dans le l'élément peut être stylisé
La nouvelle intéressante est que les éléments 1 et 3 de la liste ci-dessus ont été livrés dans Chrome 131 (en novembre 2024). La prochaine phase devrait consister à améliorer le style du marqueur. De plus, il existe un ensemble de changements connexes qui contribueront à améliorer la capacité d'animer ces éléments.
Conclusion
Les
Le talon d'Achille de
Votre interface monopolise-t-elle le processeur de vos utilisateurs??
à mesure que les interfaces Web deviennent de plus en plus complexes, les fonctionnalités gourmandes en ressources exigent de plus en plus du navigateur. Si vous souhaitez surveiller et suivre l'utilisation du processeur c?té client, l'utilisation de la mémoire et bien plus encore pour tous vos utilisateurs en production, essayez LogRocket.
LogRocket est comme un DVR pour les applications Web et mobiles, enregistrant tout ce qui se passe dans votre application Web, votre application mobile ou votre site Web. Au lieu de deviner pourquoi les problèmes surviennent, vous pouvez regrouper et créer des rapports sur les principales mesures de performances du front-end, rejouer les sessions utilisateur avec l'état de l'application, enregistrer les requêtes réseau et faire appara?tre automatiquement toutes les erreurs.
Modernisez la fa?on dont vous déboguez les applications Web et mobiles?: démarrez la surveillance gratuitement.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Il existe trois fa?ons de créer un rotateur de chargement CSS: 1. Utilisez le rotateur de base des frontières pour obtenir une animation simple via HTML et CSS; 2. Utilisez un rotateur personnalisé de plusieurs points pour atteindre l'effet de saut à travers différents temps de retard; 3. Ajoutez un rotateur dans le bouton et basculez les classes via JavaScript pour afficher l'état de chargement. Chaque approche souligne l'importance des détails de conception tels que la couleur, la taille, l'accessibilité et l'optimisation des performances pour améliorer l'expérience utilisateur.

Pour faire face à la compatibilité du navigateur CSS et aux problèmes de préfixe, vous devez comprendre les différences de prise en charge du navigateur et utiliser raisonnablement les préfixes des fournisseurs. 1. Comprendre les problèmes communs tels que Flexbox et le support de la grille, Position: Sticky Invalid et les performances d'animation sont différentes; 2. Vérifier l'état du support de la fonction de confirmation de Caniuse; 3. Utilisez correctement -webkit-, -moz-, -ms-, -o- et autres préfixes du fabricant; 4. Il est recommandé d'utiliser AutopRefixer pour ajouter automatiquement les préfixes; 5. Installez PostCSS et configurez le navigateur pour spécifier le navigateur cible; 6. Gérer automatiquement la compatibilité pendant la construction; 7. Les fonctionnalités de détection modernizr peuvent être utilisées pour les anciens projets; 8. Pas besoin de poursuivre la cohérence de tous les navigateurs,

HEMAINDIFFERENCESBetweendisplay: Inline, Block, Andinline-BlockInhtml / CSSareLayoutBehavior, SpaceUsage et StylingControl.1.InlineElementsflowWithText, Don'tStartNewLines, Ignorewidth / Height, AndonlyApplyhorizontalPadding / Marges - IdealForninetLetetStyLinSing

La définition du style de liens que vous avez visité peut améliorer l'expérience utilisateur, en particulier dans les sites Web à forte intensité de contenu pour aider les utilisateurs à mieux naviguer. 1. Utilisez CSS: Pseudo-classe visité pour définir le style du lien visité, tels que les changements de couleur; 2. Notez que le navigateur permet uniquement la modification de certains attributs en raison des restrictions de confidentialité; 3. La sélection des couleurs doit être coordonnée avec le style global pour éviter la brutalité; 4. Le terminal mobile peut ne pas afficher cet effet et il est recommandé de le combiner avec d'autres invites visuelles telles que les logos auxiliaires ic?nes.

Utilisez l'attribut Clip-Path de CSS pour recadrer des éléments en formes personnalisées, telles que les triangles, les encoches circulaires, les polygones, etc., sans compter sur des images ou des SVG. Ses avantages incluent: 1. Prend en charge une variété de formes de base telles que le cercle, l'ellipse, le polygone, etc.; 2. Ajustement réactif et adaptable aux terminaux mobiles; 3. Facile à l'animation, et peut être combiné avec le survol ou le javascript pour obtenir des effets dynamiques; 4. Il n'affecte pas le flux de disposition et ne culte que la zone d'affichage. Les usages communs sont tels que le chemin de clip circulaire: cercle (50pxatcenter) et trame de clip Triangle: polygone (50% 0%, 100 0%, 0 0%). Avis

Pour créer des images réactives à l'aide de CSS, elle peut être principalement réalisée grace aux méthodes suivantes: 1. Utilisez la largeur maximale: 100% et hauteur: Auto pour permettre à l'image de s'adapter à la largeur du conteneur tout en maintenant la proportion; 2. Utilisez les attributs SRCSET et tailles de HTML pour charger intelligemment les sources d'image adaptées à différents écrans; 3. Utilisez l'objet-ajustement et la position d'objet pour contr?ler le recadrage d'images et l'affichage de la mise au point. Ensemble, ces méthodes garantissent que les images sont présentées clairement et magnifiquement sur différents appareils.

Le choix des unités CSS dépend des exigences de conception et des exigences réactives. 1.PX est utilisé pour la taille fixe, adaptée à un contr?le précis mais au manque d'élasticité; 2.EM est une unité relative, qui est facilement causée par l'influence de l'élément parent, tandis que REM est plus stable en fonction de l'élément racine et convient à la mise à l'échelle globale; 3.VW / VH est basé sur la taille de la fenêtre, adaptée à la conception réactive, mais l'attention doit être accordée aux performances sous des écrans extrêmes; 4. Lors du choix, il doit être déterminé en fonction de la question de savoir si les ajustements réactifs, les relations de hiérarchie d'éléments et la dépendance de la fenêtre. Une utilisation raisonnable peut améliorer la flexibilité et la maintenance de la disposition.

Différents navigateurs ont des différences dans l'analyse CSS, ce qui entra?ne des effets d'affichage incohérents, y compris principalement la différence de style par défaut, la méthode de calcul du modèle de bo?te, le niveau de support Flexbox et la disposition de la grille et le comportement incohérent de certains attributs CSS. 1. Le traitement de style par défaut est incohérent. La solution consiste à utiliser cssreset ou normaliser.css pour unifier le style initial; 2. La méthode de calcul du modèle de bo?te de l'ancienne version de IE est différente. Il est recommandé d'utiliser la taille d'une bo?te: Border-Box de manière unifiée; 3. Flexbox et Grid fonctionnent différemment dans les cas de bord ou dans les anciennes versions. Plus de tests et utilisent Autoprefixer; 4. Certains comportements d'attribut CSS sont incohérents. Caniuse doit être consulté et rétrogradé.
