npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

postcss-lazysprite-miniprogram

v1.0.1

Published

A PostCSS plugin that generates sprites from the directory of images automatically.

Readme

postcss-lazysprite-miniprogram

forked from postcss-lazysprite

A PostCSS plugin that generates sprites from the directory of images automatically.

A lazy way to generate sprites and proper CSS with retina support. Feel free to use it :)

Why

Wechat miniprogram do not support local background-image, so we should upload it.

Example

Demo Example

Input

/* ./src/css/index.css */
@lazysprite "filetype";

Output

/* ./dist/css/index.css */
.icon-filetype__excel {
  background-image: url(../sprites/filetype.png);
  background-position: 0 0;
  width: 32px;
  height: 32px;
}
.icon-filetype__pdf {
  background-image: url(../sprites/filetype.svg);
  background-position: 0 0;
  width: 32px;
  height: 32px;
}
.icon-filetype__ppt {
  background-image: url(../sprites/filetype.png);
  background-position: -32px 0;
  width: 32px;
  height: 32px;
}
.icon-filetype__word {
  background-image: url(../sprites/filetype.svg);
  background-position: -32px 0;
  width: 32px;
  height: 32px;
}

@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio:2), only screen and (-o-min-device-pixel-ratio:2/1), only screen and (min-device-pixel-ratio:2), only screen and (min-resolution:2dppx), only screen and (min-resolution:192dpi) {
  .icon-filetype__excel {
    background-image: url(../sprites/[email protected]);
    background-position: 0 0;
    background-size: 64px 32px;
  }
  .icon-filetype__ppt {
    background-image: url(../sprites/[email protected]);
    background-position: -32px 0;
    background-size: 64px 32px;
  }
}

File tree

Just a example for above output result, you can dynamic yourself with options.

.
├── gulpfile.js
├── dist
└── src
    ├── css
    │   └── index.css
    ├── html
    │   └── index.html
    └── slice
        └── filetype
            ├── excel.png
            ├── excel_2x.png
            ├── pdf.svg
            ├── ppt.png
            ├── [email protected]
            └── word.svg

More examples with different options: nameSpace, outputDimensions, dynamicClassBlock, pseudoClass

Features

  • Simple and easy, just need to put your images to the special folder.

  • Retina support (@2x, @3x, _2x, _3x are all available).

  • Support SVG Sprites. Demo

  • Fully work well with Source Map.

  • Cache way and good perfomance to run faster.

  • Support sprites with:hover:active condition(example).

User

WeChat for Work and Wechat Reader are using postcss-lazysprite in production.

Installation

npm install postcss-lazysprite-miniprogram --save

Usage

Work with Gulp

Example:

var gulp = require('gulp');
var postcss = require('gulp-postcss');
var lazysprite = require('postcss-lazysprite-miniprogram');

gulp.task('css', function() {
  return gulp
    .src('./test/src/css/**/*.css')
    .pipe(
      postcss([
        lazysprite({
          imagePath: './test/src/slice',
          stylesheetInput: './test/src/css',
          stylesheetRelative: './test/dist/css',
          spritePath: './test/dist/slice',
          nameSpace: 'icon-',
          upload: filePath => {
            // uploadImage will return a uploaded url
            return uploadImage(filePath);
          }
        })
      ])
    )
    .pipe(gulp.dest('./test/dist/css'));
});

Options

upload

if you wanna upload sprite images

  • Type: Function
  • Default: null
var uploadImage = require('free-upload-image');
// demo
lazysprite({
  async upload(localfilepath) {
    const url = await uploadImage(localfilepath);
    return url;
  }
});

usePseudoBefore

use :before set props

  • Type: Boolean
  • Default: false
.icon-filetype__test {
  position: relative;
}
.icon-filetype__test:before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  transform-origin: top left;
}

#### imagePath

> Relative path to the folder that sprite images are stored. For resolving absolute images. This option also as the base relative to the value of `@lazysprite` which is what you output.

- Default: null
- Required: `true`

#### stylesheetInput

> The directory that store css(or scss/less) source files. If you are use gulp.js, simply the value of `gulp.src` without the part of `**` and so on.

- Default: null
- Required: `true`

#### stylesheetRelative

> Relative path to the folder that will keep your output stylesheet(s). If it's null the path of CSS file will be used.

- Default: null
- Required: `false`

#### spritePath

> Relative path to the folder that will keep your output spritesheet(s).

- Default: `./`
- Required: `false`

#### nameSpace

> NameSpace(Prefix) of the class name of each image.

- Default: null
- Required: `false`

#### logLevel

> Deside which level to output log. Can be either "debug", "info", or "silent".

```javascript
// Show me additional info about the process
logLevel: 'debug';

// Just show basic info
logLevel: 'info';

// output NOTHING except alert
logLevel: 'silent';
  • Default: info
  • Required: false

cssSeparator

Separator between css selector's 'block' and 'element'. In this plugin. 'block' is equal to file dirname or dynamic one, 'element' is the base name of file.

  • Default: '__'
  • Required: false

retinaInfix

Deside the created sprite retina file is whether '@2x' or '_2x' as part of name.

  • Default: @
  • Required: false

outputExtralCSS

Deside whether output extral css details, which list like:

.icon-filetype {
  display: inline-block;
  overflow: hidden;
  font-size: 0;
  line-height: 0;
}

when set this option as true, the html sould like:

<i class="icon-filetype icon-filetype__doc"></i>
  • Default: false
  • Required: false

pseudoClass

If the file naming with Hoveror Active as suffix,it will turn to the :hover or :active pseudo class.(example)

  • Default: false
  • Required: false

outputDimensions

Deside whether output width & height properties.

  • Default: true
  • Required: false

Contributing

Thanks the inspirations from postcss-sprites plugin.

Issues and Pull requests are welcome.

$ git clone https://github.com/jgbjs/postcss-lazysprite-miniprogram
$ cd postcss-lazysprite-miniprogram
$ npm i
$ gulp # for dev
$ gulp test # for test