Table des matières
Configuration initiale
Solution spécifique au chrome (non standard)
Approches alternatives: solutions pseudo-élémentaires et à l'image des frontières
Maison interface Web tutoriel CSS Boutons fantômes de bonbons CSS-ing

Boutons fantômes de bonbons CSS-ing

Mar 18, 2025 pm 12:03 PM

Boutons fantômes de bonbons CSS-ing

Récemment, j'ai cherché une inspiration en codage, manquant de talent artistique. Mon approche? Reproduire les créations visuellement attrayantes par d'autres, en se concentrant sur le code propre et concis. Ces boutons fantômes de bonbons ont attiré mon attention!

Ils semblaient parfaits pour un projet rapide. En quinze minutes, je l'ai réalisé en chrome:

Cette technique mérite le partage. Cet article détaille mon processus et explore d'autres approches.

Configuration initiale

Un élément de bouton simple forme la base, incorporant un attribut data-ico pour l'insertion des emoji et une propriété CSS personnalisée, --slist , pour la liste d'arrêt dans l'attribut de style.

 <code>boo!</code>
Copier après la connexion

Achèvement post-article, j'ai découvert les limitations de découpage significatives de Safari. Il échoue sur les éléments des bouton, display: flex (et éventuellement grille) et texte de l'élément enfant. Par conséquent, les techniques décrites ici sont incompatibles avec safari. La solution de contournement implique de nicher un<span></span> Dans le bouton, en appliquant tous les styles de bouton au<span></span> et en s'assurant qu'il couvre la boîte à bordure du parent. Pour les utilisateurs de Linux dépourvus d'accès à l'appareil Apple physique, je recommande l'épiphanie (merci, Brian!).

Le CSS utilise un ::after un pseudo-élément pour l'icône et une disposition de grille pour l'alignement texte / icône. Border, rembourrage, frontière-radius, liste d'arrêt de --slist pour le gradient diagonal et le style de police sont également appliqués.

 <code>button { display: grid; grid-auto-flow: column; grid-gap: .5em; border: solid .25em transparent; padding: 1em 1.5em; border-radius: 9em; background: linear-gradient(to right bottom, var(--slist)) border-box; font: 700 1.5em/ 1.25 ubuntu, sans-serif; text-transform: uppercase; &::after { content: attr(data-ico) } }</code>
Copier après la connexion

La clarification sur le code ci-dessus: background-origin et background-clip sont définies sur border-box . background-origin positionne le point 0,0 de la background-position au niveau supérieur gauche de la boîte spécifiée, déterminant la référence pour background-size . border-box garantit que le gradient s'étend sur toute la boîte à bordure. La padding-box par défaut entraînerait le gradient qui couvre uniquement la zone de rembourrage.

Solution spécifique au chrome (non standard)

Cette méthode utilise trois couches de masque et composition. Un rafraîchissement sur le compositing du masque peut être trouvé dans [Link to Crash Course]. Seul le canal alpha est important dans les couches de masque CSS; Les canaux RVB n'affectent pas le résultat.

Nous commençons par deux couches: une couche entièrement opaque couvrant la boîte de bordure (alpha = 1 partout) et une seconde, également entièrement opaque, la couche limitée à la boîte de rembourrage (alpha = 1 dans la boîte de padding, 0 à l'extérieur).

Visualisez les boîtes de mise en page comme des rectangles imbriqués. La couche inférieure est entièrement opaque à travers la boîte de bordure. La couche supérieure est opaque dans la boîte de rembourrage et transparente dans la zone de la frontière. L'arrondi d'angle est déterminé par border-radius (et border-width pour la boîte de rembourrage).

Ces couches sont composées à l'aide de l'opération exclude (ou xor dans WebKit). Le résultat: alpha = 0 dans la boîte de rembourrage (les deux couches ont alpha = 1), et alpha = 1 dans la zone de bordure (première couche alpha = 1, deuxième couche alpha = 0).

Le code:

 <code>button { /* same base styles */ --full: linear-gradient(red 0 0); -webkit-mask: var(--full) padding-box, var(--full); -webkit-mask-composite: xor; mask: var(--full) padding-box exclude, var(--full); }</code>
Copier après la connexion

Détails: Les gradients rouges sont utilisés par la concision. Les gradients sont utilisés pour les deux couches en raison des limitations du clip de fond. La mask-composite standard est incluse, avec la version non standard remplacée.

Cela produit une frontière dégradé mais manque de texte. L'ajout d'une troisième couche de masque, limitée au texte (avec du texte transparent), et le Xoring avec le résultat précédent ajoute le texte. Cependant, cela est spécifique au chrome en raison de la valeur text non standard pour mask-clip . Un bloc @supports garantit la compatibilité des navigateurs croisés (sans masquage de texte dans les navigateurs non soutenus).

 <code>button { /* same base styles */ @supports (-webkit-mask-clip: text) { -webkit-text-fill-color: transparent; --full: linear-gradient(red 0 0); -webkit-mask: var(--full) text, var(--full) padding-box, var(--full); -webkit-mask-composite: xor; } }</code>
Copier après la connexion

Il s'agit d'une approche simple, mais sa dépendance à l'égard des caractéristiques non standard limite sa compatibilité du navigateur. Explorons des méthodes alternatives et plus largement soutenues.

Approches alternatives: solutions pseudo-élémentaires et à l'image des frontières

La solution de pseudo-élément supplémentaire évite le masquage en découpant l'arrière-plan vers la zone de texte et en ajoutant une bordure de gradient en utilisant un absolument positionné ::before pseudo-élément. La solution d'image de bordure, bien que plus simple, a des limites avec border-radius . Ces méthodes offrent une meilleure compatibilité entre les navigateurs que la solution spécifique au chrome. De plus amples détails et des exemples de code pour ces méthodes sont fournis dans l'article d'origine. La solution de mélange, également décrite dans l'article d'origine, offre une autre approche mais avec des limites concernant l'interaction en arrière-plan. Chaque méthode a ses forces et ses faiblesses en fonction du niveau souhaité de support entre le navigateur et des exigences de conception spécifiques.

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 !

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)

Cartes empilées avec un positionnement collant et une pincée de sass Cartes empilées avec un positionnement collant et une pincée de sass Apr 03, 2025 am 10:30 AM

L'autre jour, j'ai repéré ce morceau particulièrement charmant sur le site Web de Corey Ginnivan où une collection de cartes se cassent les uns sur les autres pendant que vous faites défiler.

Fontes variables de polices Google Fontes variables de polices Google Apr 09, 2025 am 10:42 AM

Je vois que Google Fonts a déployé un nouveau design (tweet). Comparé à la dernière grande refonte, cela semble beaucoup plus itératif. Je peux à peine faire la différence

Comment créer un compte à rebours animé avec HTML, CSS et JavaScript Comment créer un compte à rebours animé avec HTML, CSS et JavaScript Apr 11, 2025 am 11:29 AM

Avez-vous déjà eu besoin d'un compte à rebours sur un projet? Pour quelque chose comme ça, il pourrait être naturel d'atteindre un plugin, mais c'est en fait beaucoup plus

Pourquoi les zones réduites pourpre dans la disposition Flex sont-elles considérées à tort «espace de débordement»? Pourquoi les zones réduites pourpre dans la disposition Flex sont-elles considérées à tort «espace de débordement»? Apr 05, 2025 pm 05:51 PM

Questions sur les zones de slash violet dans les dispositions flexibles Lorsque vous utilisez des dispositions flexibles, vous pouvez rencontrer des phénomènes déroutants, comme dans les outils du développeur (D ...

Comment sélectionner un élément enfant avec l'élément de nom de première classe via CSS? Comment sélectionner un élément enfant avec l'élément de nom de première classe via CSS? Apr 05, 2025 pm 11:24 PM

Lorsque le nombre d'éléments n'est pas fixé, comment sélectionner le premier élément enfant du nom de classe spécifié via CSS. Lors du traitement de la structure HTML, vous rencontrez souvent différents éléments ...

Guide des attributs de données HTML Guide des attributs de données HTML Apr 11, 2025 am 11:50 AM

Tout ce que vous avez toujours voulu savoir sur les attributs de données dans HTML, CSS et JavaScript.

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

See all articles