recherche
Maisoninterface Webtutoriel CSSUn système d'icônes SVG en forme de police pour VUE

Un système d'icônes SVG en forme de police pour VUE

La gestion des icônes dans Vue.js peut être délicate. Les polices d'icônes sont pratiques mais manquent de flexibilité de personnalisation, et le contrôle des versions peut être un cauchemar en raison de leur nature binaire. Les SVG offrent une solution supérieure, mais le maintien de la facilité d'utilisation et de la gestion efficace nécessite une approche réfléchie.

Cet article présente un système d'icônes SVG idéal pour les applications Vue.js, en se concentrant sur la simplicité et la maintenabilité:

  • Ajout / suppression d'icônes: Ajoutez ou supprimez simplement les SVG d'un dossier désigné.
  • Utilisation: utilisez des icônes dans des modèles avec la syntaxe simple<svg-icon icon="rocket"></svg-icon> .
  • Styling: Icônes d'échelle et de couleur utilisant des propriétés font-size et color CSS, imitant le comportement des polices d'icônes.
  • Optimisation: évite la duplication du code SVG pour plusieurs instances de la même icône.
  • Intégration WebPack: aucune modification de configuration Webpack n'est nécessaire.

Ce système est construit à l'aide de deux petits composants Vue à un seul fichier et nécessite:

  • WebPack: supposé si vous utilisez la Vue CLI.
  • svg-inline-loader : Installable via npm install svg-inline-loader --save-dev . Ce chargeur nettoie les parties inutiles du code SVG.

Le composant SVG Sprite ( SvgSprite.vue )

Pour éviter la répétition du code SVG, nous créons un SVG Sprite - un SVG caché contenant toutes les autres icônes SVG. Les icônes sont accessibles via le<use></use> Tag faisant référence à l'ID de l'icône:<svg><use xlink:href="#rocket"></use></svg> . Le composant SvgSprite implémente ceci:

<template>
  <svg height="0" style="display: none;" v-html="$options.svgSprite" width="0"></svg>
</template>

<script>
const svgContext = require.context(
  '!svg-inline-loader?'  
  'removeTags=true'   // Remove title tags, etc.
  '&removeSVGTagAttrs=true'   // Remove attributes
  '&removingTagAttrs=fill'   // Remove fill attributes
  '!@/assets/icons', // Icon directory
  true, // Search subdirectories
  /\w \.svg$/i // Only include SVG files
);

const symbols = svgContext.keys().map(path => {
  const id = path.replace(/^\.\/(.*)\.\w $/, '$1'); // Extract ID from filename
  const content = svgContext(path); // Get SVG content
  return content.replace('<svg', `<symbol id="${id}"`).replace('svg>', 'symbol>'); // Convert to symbol
});

export default {
  name: 'SvgSprite',
  svgSprite: symbols.join('\n'), // Concatenate symbols
};
</script>

Le modèle comprend un caché<svg></svg> élément dont le contenu est généré dynamiquement par $options.svgSprite . Le script utilise require.context avec svg-inline-loader pour traiter les SVG, supprimant les balises et attributs inutiles. Il convertit ensuite chaque SVG en un<symbol></symbol> élément, ajoutant un ID unique.

Placez ce composant en haut de votre fichier App.vue .

La composante icône ( SvgIcon.vue )

Le composant SvgIcon est plus simple, en utilisant le<use></use> Tag aux icônes de référence du sprite:

<template>
  <svg class="icon" :class="{ 'icon-spin': spin }">
    <use :xlink:href="`#${icon}`"></use>
  </svg>
</template>

<script>
export default {
  name: 'SvgIcon',
  props: {
    icon: { type: String, required: true },
    spin: { type: Boolean, default: false },
  },
};
</script>

<style scoped>
svg.icon {
  fill: currentColor;
  height: 1em;
  margin-bottom: 0.125em;
  vertical-align: middle;
  width: 1em;
}
svg.icon-spin {
  animation: icon-spin 2s infinite linear;
}
@keyframes icon-spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(359deg); }
}
</style>

Le CSS stylise l'icône pour se comporter comme une police d'icône, permettant des ajustements de couleur et de taille faciles. Un accessoire spin ajoute une animation.

Enregistrez ce composant dans main.js :

 Importer Vue à partir de «Vue»
importer svgicon à partir de '@ / composants / svgicon.vue'
Vue.Component («SVG-ICON», SVGICON)

Ce système fournit une solution propre, efficace et facilement maintenable pour gérer les icônes SVG dans vos applications Vue.js. D'autres améliorations pourraient inclure la gestion des ratios d'aspect non carré et la compatibilité des outils de cadre / build plus large.

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
Compteurs CSS: un guide complet de la numérotation automatiqueCompteurs CSS: un guide complet de la numérotation automatiqueMay 07, 2025 pm 03:45 PM

CSSCOUNTERSAREUSEUSTTOMAGAUTAMAMATALUMENTSINDWEBDESIGNS.1) Ils ont été des cas de contenu, des listitems et de la forme.

Ombres de défilement moderne à l'aide d'animations axées sur le défilementOmbres de défilement moderne à l'aide d'animations axées sur le défilementMay 07, 2025 am 10:34 AM

L'utilisation d'ombres de défilement, en particulier pour les appareils mobiles, est un peu de UX subtil que Chris a couvert auparavant. Geoff a couvert une approche plus récente qui utilise la propriété d'animation-timeline. Voici encore une autre façon.

Revisiter les cartes d'imageRevisiter les cartes d'imageMay 07, 2025 am 09:40 AM

Passons à travers un rafraîchissement rapide. Les cartes d'image datent jusqu'à HTML 3.2, où, d'abord, les cartes côté serveur, puis les cartes côté client ont défini les régions cliquables sur une image à l'aide de cartes et d'éléments de zone.

État des développeurs: une enquête pour chaque développeurÉtat des développeurs: une enquête pour chaque développeurMay 07, 2025 am 09:30 AM

L'enquête sur l'état des développeurs est désormais ouverte à la participation, et contrairement aux enquêtes précédentes, il couvre tout sauf le code: carrière, lieu de travail, mais aussi santé, passe-temps, etc. 

Qu'est-ce que CSS Grid?Qu'est-ce que CSS Grid?Apr 30, 2025 pm 03:21 PM

CSS Grid est un outil puissant pour créer des dispositions Web complexes et réactives. Il simplifie la conception, améliore l'accessibilité et offre plus de contrôle que les méthodes plus anciennes.

Qu'est-ce que CSS Flexbox?Qu'est-ce que CSS Flexbox?Apr 30, 2025 pm 03:20 PM

L'article traite de CSS Flexbox, une méthode de mise en page pour l'alignement et la distribution efficaces de l'espace dans les conceptions réactives. Il explique l'utilisation de Flexbox, la compare à la grille CSS et détaille la prise en charge du navigateur.

Comment pouvons-nous rendre notre site Web réactif à l'aide de CSS?Comment pouvons-nous rendre notre site Web réactif à l'aide de CSS?Apr 30, 2025 pm 03:19 PM

L'article traite des techniques de création de sites Web réactifs à l'aide de CSS, y compris des balises de méta de la fenêtre, des grilles flexibles, des médias fluides, des requêtes multimédias et des unités relatives. Il couvre également l'utilisation de la grille CSS et de Flexbox ensemble et recommande le cadre CSS

Que fait la propriété CSS Box-Sizizing?Que fait la propriété CSS Box-Sizizing?Apr 30, 2025 pm 03:18 PM

L'article traite de la propriété CSS-Box-Sizing, qui contrôle comment les dimensions des éléments sont calculées. Il explique des valeurs telles que la boîte de contenu, la boîte de bordure et la boîte de padding, et leur impact sur la conception de la disposition et l'alignement de la forme.

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

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 Linux nouvelle version

SublimeText3 Linux nouvelle version

Dernière version de SublimeText3 Linux

Dreamweaver Mac

Dreamweaver Mac

Outils de développement Web visuel

SublimeText3 version anglaise

SublimeText3 version anglaise

Recommandé : version Win, prend en charge les invites de code !

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.