Maison > interface Web > tutoriel CSS > le corps du texte

Ne vous fiez pas aux valeurs d'attribut par défaut pour styliser les composants Web

Linda Hamilton
Libérer: 2024-11-17 10:03:03
original
468 Les gens l'ont consulté

Ne vous méprenez pas, je n'ai rien contre les valeurs par défaut des API des composants Web. Le problème que j'ai avec eux, c'est qu'ils ne sont pas fiables.

Le problème

Une approche courante pour fournir une liste des options disponibles pour une API consiste à utiliser le type untion de TypeScript.

/** The display variant for the button */
@property({reflect: true})
variant: 'default' | 'solid' | 'ghost' = 'default';
Copier après la connexion

Voici quelques CSS de base pour faire fonctionner les variations.

:host {
  --accent-color: #0265dc;
}

button {
  cursor: pointer;
  padding: 0.5rem;
}

:host([variant='default']) button {
  border: solid 1px var(--accent-color);
  background-color: white;
  color: var(--accent-color);
}

:host([variant='solid']) button {
  border: solid 1px var(--accent-color);
  background-color: var(--accent-color);
  color: white;
}

:host([variant='ghost']) button {
  border: solid 1px transparent;
  background-color: transparent;
  color: var(--accent-color);
}
Copier après la connexion

REMARQUE : Les exemples de code utilisent Lit, mais les principes discutés ici peuvent facilement être appliqués à d'autres bibliothèques et frameworks.

Le défi est que les éléments/composants Web personnalisés peuvent être utilisés n'importe où. Ils peuvent être insérés dans le DOM sous forme de chaînes, dans des langages côté serveur comme PHP, ils peuvent être créés dans la fonction createElement de JavaScript, ou même en HTML standard. Ce que je veux dire, c'est qu'il n'existe pas toujours de moyen « sécurisé » de garantir que les attributs des éléments personnalisés sont définis avec précision. Pour cette raison, l'un des éléments de la liste de contrôle des relations publiques de notre bibliothèque de composants est :

✅ Les attributs et les propriétés fonctionnent lorsqu'ils sont définis, non définis et mal définis.

Tester notre API

Compte tenu de ces directives, testons la configuration de l'API ci-dessus.

  • Ensemble - tout a l'air bien.
<my-button variant="default">Default Button</my-button>
<my-button variant="solid">Solid Button</my-button>
<my-button variant="ghost">My Button</my-button>
Copier après la connexion

Don

  • Désactivé
    • Sans jeu d'attributs, cela fonctionne bien car nous avons une valeur par défaut et elle est configurée pour refléter l'attribut sur l'élément lorsqu'il est défini.
    • si nous définissons la propriété variant sur non défini, cela casse les styles.
<!-- No attribute set -->
<my-button>No Attribute Button</my-button>

<!-- JSX example -->
<my-button variant={undefined}>Unset Button</my-button>
Copier après la connexion

Don

  • Mal défini - lorsque nous définissons l'attribut variante sur "déchets", il se brise également.
<my-button variant="rubbish">Rubbish Button</my-button>
Copier après la connexion

Don

Vous pouvez tester cet exemple ici :

Don

Correction de l'API

Le moyen le plus simple de résoudre ce problème consiste à faire en sorte que les styles des éléments de bouton correspondent aux styles par défaut.

button {
  border: solid 1px var(--accent-color);
  background-color: white;
  color: var(--accent-color);
  cursor: pointer;
  padding: 0.5rem;
}
Copier après la connexion

Nous pouvons maintenant supprimer le code de la variante par défaut.

/* We can remove this */
:host([variant='default']) button {
  border: solid 1px var(--accent-color);
  background-color: white;
  color: var(--accent-color);
}
Copier après la connexion

Pour éviter toute confusion, vous pouvez laisser le style et ajouter un commentaire.

/* Styles for this variant are under the `button` element */
:host([variant='default']) { }
Copier après la connexion

Mettons également à jour l'API TypeScript pour la rendre facultative et supprimons la valeur par défaut.

/** The display variant for the button */
@property({ reflect: true })
variant?: 'default' | 'solid' | 'ghost';
Copier après la connexion

Les éléments se comportent désormais de manière cohérente si la valeur est définie, non définie ou mal définie !

Don

Vous pouvez voir le code final ici :

Don

Conclusion

En supprimant une dépendance sur les valeurs par défaut, vous pouvez créer des API de composants Web plus résilientes. Si vous devez avoir des valeurs par défaut pour que vos composants fonctionnent correctement, assurez-vous de consulter cet article pour créer des composants Web qui fonctionnent de manière cohérente.

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!

source:dev.to
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal