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>
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>
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>
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>
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!

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

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 !

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)

Sujets chauds

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.

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

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

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 ...

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 ...

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

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

Comment implémenter des fenêtres dans le développement frontal ...
