UNPKG

postcss-adaptive

Version:

A postcss plugin that calculates and generates adaptive css code, such as rem and 0.5px borders for retina devices

216 lines (163 loc) 4.83 kB
# postcss-adaptive A [postcss](https://www.npmjs.com/package/postcss) plugin that calculates and generates adaptive css code, such as `rem` and `0.5px borders for retina devices`. [![NPM version][npm-image]][npm-url] [![Build status][travis-image]][travis-url] [![Test coverage][coveralls-image]][coveralls-url] [![Downloads][downloads-image]][downloads-url] [npm-image]: https://img.shields.io/npm/v/postcss-adaptive.svg?style=flat-square [npm-url]: https://npmjs.org/package/postcss-adaptive [travis-image]: https://img.shields.io/travis/songsiqi/postcss-adaptive.svg?style=flat-square [travis-url]: https://travis-ci.org/songsiqi/postcss-adaptive [coveralls-image]: https://img.shields.io/coveralls/songsiqi/postcss-adaptive.svg?style=flat-square [coveralls-url]: https://coveralls.io/r/songsiqi/postcss-adaptive [downloads-image]: http://img.shields.io/npm/dm/postcss-adaptive.svg?style=flat-square [downloads-url]: https://npmjs.org/package/postcss-adaptive ## Table of Contents * [Requirements](#requirements) * [Usage](#usage) * [Changelog](#changelog) * [License](#license) ## Requirements Set rem unit and hairline class. For example: ```javascript (function (win, doc) { var docEl = doc.documentElement; function setRemUnit () { var docWidth = docEl.clientWidth; var rem = docWidth / 10; docEl.style.fontSize = rem + 'px'; } win.addEventListener('resize', function () { setRemUnit(); }, false); win.addEventListener('pageshow', function (e) { if (e.persisted) { setRemUnit(); } }, false); setRemUnit(); if (win.devicePixelRatio && win.devicePixelRatio >= 2) { var testEl = doc.createElement('div'); var fakeBody = doc.createElement('body'); testEl.style.border = '0.5px solid transparent'; fakeBody.appendChild(testEl); docEl.appendChild(fakeBody); if (testEl.offsetHeight === 1) { docEl.classList.add('hairlines'); } docEl.removeChild(fakeBody); } }) (window, document); ``` ## Usage The raw stylesheet only contains @2x style, and if you * intend to use `rem` unit,add `/*rem*/` after the declaration * don't intend to transform the original value, add `/*no*/` after the declaration * intend to use `px` unit when `autoRem` is set to `true`, add `/*px*/` after the declaration **Attention: Dealing with SASS or LESS, only `/*...*/` comment can be used, in order to have the comments persisted.** Before processing: ```css .selector { height: 64px; width: 150px; /*rem*/ padding: 10px; /*no*/ border-top: 1px solid #ddd; } ``` After processing: ```css .selector { height: 32px; width: 2rem; padding: 10px; border-top: 1px solid #ddd; } .hairlines .selector { border-top: 0.5px solid #ddd; } ``` ### API `adaptive(config)` Config: * `remUnit`: number, rem unit value (default: 75) * `baseDpr`: number, base device pixel ratio (default: 2) * `remPrecision`: number, rem value precision (default: 6) * `hairlineClass`: string, class name of 1px border (default 'hairlines') * `autoRem`: boolean, whether to transform to rem unit (default: false) #### Node ```shell npm install postcss-adaptive ``` ```javascript var postcss = require('postcss'); var adaptive = require('postcss-adaptive'); var originCssText = '...'; var newCssText = postcss().use(adaptive({ remUnit: 75 })).process(originCssText).css; ``` #### Gulp ```javascript var gulp = require('gulp'); var postcss = require('gulp-postcss'); var adaptive = require('postcss-adaptive'); gulp.task('default', function () { var processors = [adaptive({ remUnit: 75 })]; return gulp.src('./src/*.css') .pipe(postcss(processors)) .pipe(gulp.dest('./dest')); }); ``` #### Webpack ```javascript var adaptive = require('postcss-adaptive'); module.exports = { module: { loaders: [ { test: /\.css$/, loader: "style-loader!css-loader!postcss-loader" } ] }, postcss: function () { return [adaptive({ remUnit: 75 })]; } } ``` #### Grunt ```javascript module.exports = function (grunt) { grunt.initConfig({ postcss: { options: { processors: [ adaptive({ remUnit: 75 }) ] }, dist: { src: 'src/*.css', dest: 'build' } } }); grunt.loadNpmTasks('grunt-postcss'); grunt.registerTask('default', ['postcss']); } ``` ## Changelog ### 0.4.0 * Do not generate `hairline` when the declaration is commented with `/*no*/`. ### 0.3.2 * Upgrade postcss version to 6.x. * The value below 1px will not transfer to rem. ### 0.3.1 * Delete `minify` option, please use other postcss plugins like `cssnano` instead. ### 0.3.0 * Support `minify` option to minify the output css code. ### 0.2.0 * Support `autoRem` option. ### 0.1.4 * Support `/*no*/` comment. ### 0.1.0 * First release. ## License MIT