Skip to content

SVG Directive

The v-svg directive allows you to dynamically import SVG files from your assets directory. This is useful when you want to use inline SVGs in your templates. The directive will automatically import the SVG file and inline it in your template. There are few customizations you can make to the SVG before it is rendered.

Usage

WARNING

Your SVG files must be in your public/assets directory. The v-svg directive will not work if your SVG files are in your src/assets directory.

vue
<template>
  <div>
    <h1>SVG Directive</h1>
    <div v-svg="'logo'" />
    <!-- Renders the logo.svg file from public/assets -->
    <div v-svg="'svg/logo'" />
    <!-- Renders the logo.svg file from public/assets/svg -->
  </div>
</template>
View Code
vue
<script setup>
const SVGs = [
  {
    path: "logo", // => src/assets/logo.svg
    style: "",
    class: "txt-green flip-x",
    width: 150,
    height: 150,
  },
  {
    path: "logo", // => src/assets/logo.svg
    style: "",
    class: "txt-indigo",
    width: 150,
    height: 150,
  },
  {
    path: "upload", // => src/assets/upload.svg
    style: "",
    class: "",
    width: 150,
    height: 150,
  },
  {
    path: "spin", // => src/assets/spin.svg
    style: "",
    class: "txt-yellow",
    width: 150,
    height: 150,
  },
  {
    path: "logo", // => src/assets/logo.svg
    style: "",
    class: "txt-green flip-x",
    width: 50,
    height: 50,
  },
  {
    path: "logo", // => src/assets/logo.svg
    style: "",
    class: "txt-indigo",
    width: 50,
    height: 50,
  },
  {
    path: "upload", // => src/assets/upload.svg
    style: "",
    class: "",
    width: 50,
    height: 50,
  },
  {
    path: "spin", // => src/assets/spin.svg
    style: "",
    class: "txt-yellow",
    width: 50,
    height: 50,
  },
];
</script>
<template>
  <main class="grid grid-cols-2 md:grid-cols-4 gap-4">
    <div v-for="(svg, index) in SVGs" :key="index">
      <span
        v-svg="svg.path"
        :svgStyle="svg.style"
        :svgClass="svg.class"
        :svgWidth="svg.width"
        :svgHeight="svg.height"
      />
    </div>
  </main>
</template>
<style scoped></style>

Customization

The v-svg directive takes a few customizations that can be used to modify the SVG before it is rendered.

PropertyTypeDefaultDescription
svgClassstring''Adds a class to the SVG element.
svgStylestring''Adds inline styles to the SVG element.
svgWidthstring''Sets the width of the SVG element.
svgHeightstring''Sets the height of the SVG element.
svgKeepParentbooleanfalseWrap the SVG in its parent component, otherwise it will replace its parent

Arguments

The v-svg directive does not take any arguments.

Modifiers

The v-svg directive does not take any modifiers.