lightfold
Version:
lightweight scaffolding and archiving utility CLI.
168 lines (127 loc) • 4.85 kB
Markdown
[![NPM Version][npm-img]][npm-url]
[![CSS Standard Status][css-img]][css-url]
[![Build Status][cli-img]][cli-url]
[![Support Chat][git-img]][git-url]
[] lets you display resolution-dependent images
using the `image-set()` function in CSS, following the [CSS Images]
specification.
```pcss
.example {
background-image: image-set(
url(img.png) 1x,
url(img@2x.png) 2x,
url(img@print.png) 600dpi
);
}
/* becomes */
.example {
background-image: url(img.png);
}
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
.example {
background-image: url(img@2x.png);
}
}
@media (-webkit-min-device-pixel-ratio: 6.25), (min-resolution: 600dpi) {
.example {
background-image: url(my@print.png);
}
}
.example {
background-image: image-set(
url(img.png) 1x,
url(img@2x.png) 2x,
url(img@print.png) 600dpi
);
}
```
Add [PostCSS image-set() Function] to your project:
```bash
npm install postcss-image-set-function --save-dev
```
Use [PostCSS image-set() Function] to process your CSS:
```js
const postcssImageSetFunction = require('postcss-image-set-function');
postcssImageSetFunction.process(YOUR_CSS /*, processOptions, pluginOptions */);
```
Or use it as a [PostCSS] plugin:
```js
const postcss = require('postcss');
const postcssImageSetFunction = require('postcss-image-set-function');
postcss([
postcssImageSetFunction(/* pluginOptions */)
]).process(YOUR_CSS /*, processOptions */);
```
[] runs in all Node environments, with special
instructions for:
| [Node](INSTALL.md
| --- | --- | --- | --- | --- | --- |
The `preserve` option determines whether the original declaration using
`image-set()` is preserved. By default, it is preserved.
```js
postcssImageSetFunction({ preserve: false })
```
```pcss
.example {
background-image: image-set(
url(img.png) 1x,
url(img@2x.png) 2x,
url(img@print.png) 600dpi
);
}
/* becomes */
.example {
background-image: url(img.png);
}
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
.example {
background-image: url(img@2x.png);
}
}
@media (-webkit-min-device-pixel-ratio: 6.25), (min-resolution: 600dpi) {
.example {
background-image: url(my@print.png);
}
}
```
The `oninvalid` option determines how invalid usage of `image-set()` should be
handled. By default, invalid usages of `image-set()` are ignored. They can be
configured to display a `warning` or `throw` an error.
```js
postcssImageSetFunction({ oninvalid: 'warning' }) // warn on invalid usages
```
```js
postcssImageSetFunction({ oninvalid: 'throw' }) // throw on invalid usages
```
## Image Resolution
The `image-set()` function allows an author to provide multiple resolutions of
an image and let the browser decide which is most appropriate in a given
situation. The `image-set()` also never fails to choose an image; the
`<resolution>` just helps determine which of the images is chosen.
Since this plugin is not a browser, the image options are sorted by device
pixel ratio and the lowest ratio is used as the default, while the remaining
images are pushed behind media queries.
Therefore, this plugin can only approximate native browser behavior. While
images should typically match the resolution as the device they’re being viewed
in, other factors can affect the chosen image. For example, if the user is on a
slow mobile connection, the browser may prefer to select a lower-res image
rather than wait for a larger, resolution-matching image to load.
[]: https://img.shields.io/travis/jonathantneal/postcss-image-set-function.svg
[]: https://travis-ci.org/jonathantneal/postcss-image-set-function
[]: https://cssdb.org/badge/image-set-function.svg
[]: https://cssdb.org/#image-set-function
[]: https://img.shields.io/badge/support-chat-blue.svg
[]: https://gitter.im/postcss/postcss
[]: https://img.shields.io/npm/v/postcss-image-set-function.svg
[]: https://www.npmjs.com/package/postcss-image-set-function
[]: https://drafts.csswg.org/css-images-4/#image-set-notation
[]: https://github.com/postcss/gulp-postcss
[]: https://github.com/nDmitry/grunt-postcss
[]: https://github.com/postcss/postcss
[]: https://github.com/postcss/postcss-loader
[]: https://github.com/jonathantneal/postcss-image-set-function