Skip to content

Yesvgmap is a lightweight Linux CLI app for generating SVG sprite maps from any number of standalone SVG images.

License

Notifications You must be signed in to change notification settings

Blobfolio/yesvgmap

Repository files navigation

Yesvgmap

ci deps.rs
license contributions welcome

Yesvgmap is a fast, lightweight CLI app for x86-64 Linux machines that compiles SVG sprite maps from one or more standalone SVG files.

Features and Non-Features

Yesvgmap will:

  • Normalize the XML output;
  • Strip comments, instructions, and declarations from the sources;
  • Reconstruct missing viewBox attributes using width/height (if present);
  • Help suppress browser display using the hidden attribute or inline positioning styles;

If you find an icon isn't working correctly after being jammed into a map, take a look at its source code to make sure it has a viewBox beginning 0 0 and ending with two positive decimals, e.g. 0 0 123 456. If it doesn't, you'll need to edit the original image to give it a canvas size matching the content, and/or recenter the layers to avoid janky offsets.

Yesvgmap will not heavily compress the output. The normalization and comment-stripping passes help, but for real shrinkage, you should run your source images through something like svgo first.

Yesvgmap does employ a lot of general sanity checks, but is not a spec-complete SVG validator. If your sources are weird/broken, the map might have some weirdness too.

Usage

yesvgmap [FLAGS] [OPTIONS] <PATH(S)>

# Pass as many paths as you like...
yesvgmap -o map.svg icon1.svg icon2.svg icon3.svg

# Or if it is easier to load them from a text file...
yesvgmap -o map.svg -l list.txt
Short Long Value Description Default
-h --help Print help information and exit.
--hidden Hide the map using the "hidden" HTML attribute.
-l --list path Read (absolute) file and/or directory paths from this text file — or STDIN if "-" — one entry per line, instead of or addition to <PATH(S)>.
--map-class string Add this class to the generated SVG map.
--map-id string Add this ID to the generated SVG map.
--offscreen Hide the map using inline styles to position it offscreen.
-o --output path Save the generated map to this location. If omitted, the map will print to STDOUT instead.
-p --prefix string Set a custom prefix for the IDs of each entry in the map. (IDs look like PREFIX-STEM, where "STEM" is the alphanumeric portion of the source file name.) "i"
-V --version Print version information and exit.

Installation

Debian and Ubuntu users can just grab the pre-built .deb package from the latest release.

This application is written in Rust and can alternatively be built/installed from source using Cargo:

# See "cargo install --help" for more options.
cargo install \
    --git https://github.com/Blobfolio/yesvgmap.git \
    --bin yesvgmap

FAQ

What Are SVG Sprite Maps?

An SVG sprite map is a non-displayable SVG comprising one or more displayable SVGs, each accessible via a unique ID.

Rather than inlining a full SVG like…

<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512.001 512.001"><path fill="currentColor" d="M512.001 84.853L427.148 0 256.001 171.147 84.853 0 0 84.853 171.148 256 0 427.148l84.853 84.853 171.148-171.147 171.147 171.147 84.853-84.853L340.853 256z"/></svg>

…each time you need a simple X icon to appear in your document, you can inline the SVG map once, and then link to the (single) X icon over and over again like…

<svg><use xlink:href="#i-close"></use></svg>

Depending on the amount of repetition and the size of the images, SVG sprite maps can substantially reduce the size of the HTML payload, and improve/speed up GZIP/Brotli compression.

But that said, be careful not to go overboard. Sprite maps should only include images that are actually referenced on the page. If you build a map with thousands of unused icons, that's only creating more bloat for yourself. ;)

When Not to Use a Sprite Map?

Generally speaking, directly inlining an SVG makes more sense than using a sprite map if:

  • The image only appears once;
  • You need to be able to manipulate its <path>s at runtime for e.g. animation;
  • It has no viewBox or requires canvas overflow for proper display;

About

Yesvgmap is a lightweight Linux CLI app for generating SVG sprite maps from any number of standalone SVG images.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy