• Stars
    star
    3,023
  • Rank 14,929 (Top 0.3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created almost 9 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A plugin for PostCSS that generates viewport units (vw, vh, vmin, vmax) from pixel units. The best choice to create a scalable interface on different displays by one design size.

postcss-px-to-viewport

NPM version

English | 中文

A plugin for PostCSS that generates viewport units (vw, vh, vmin, vmax) from pixel units.

Demo

If your project involves a fixed width, this script will help to convert pixels into viewport units.

Input

.class {
  margin: -10px .5vh;
  padding: 5vmin 9.5px 1px;
  border: 3px solid black;
  border-bottom-width: 1px;
  font-size: 14px;
  line-height: 20px;
}

.class2 {
  padding-top: 10px; /* px-to-viewport-ignore */
  /* px-to-viewport-ignore-next */
  padding-bottom: 10px;
  /* Any other comment */
  border: 1px solid black;
  margin-bottom: 1px;
  font-size: 20px;
  line-height: 30px;
}

@media (min-width: 750px) {
  .class3 {
    font-size: 16px;
    line-height: 22px;
  }
}

Output

.class {
  margin: -3.125vw .5vh;
  padding: 5vmin 2.96875vw 1px;
  border: 0.9375vw solid black;
  border-bottom-width: 1px;
  font-size: 4.375vw;
  line-height: 6.25vw;
}

.class2 {
  padding-top: 10px;
  padding-bottom: 10px;
  /* Any other comment */
  border: 1px solid black;
  margin-bottom: 1px;
  font-size: 6.25vw;
  line-height: 9.375vw;
}

@media (min-width: 750px) {
  .class3 {
    font-size: 16px;
    line-height: 22px;
  }
}

Getting Started

Installation

Add via npm

$ npm install postcss-px-to-viewport --save-dev

or yarn

$ yarn add -D postcss-px-to-viewport

Usage

Default Options:

{
  unitToConvert: 'px',
  viewportWidth: 320,
  unitPrecision: 5,
  propList: ['*'],
  viewportUnit: 'vw',
  fontViewportUnit: 'vw',
  selectorBlackList: [],
  minPixelValue: 1,
  mediaQuery: false,
  replace: true,
  exclude: undefined,
  include: undefined,
  landscape: false,
  landscapeUnit: 'vw',
  landscapeWidth: 568
}
  • unitToConvert (String) unit to convert, by default, it is px.
  • viewportWidth (Number) The width of the viewport.
  • unitPrecision (Number) The decimal numbers to allow the vw units to grow to.
  • propList (Array) The properties that can change from px to vw.
    • Values need to be exact matches.
    • Use wildcard * to enable all properties. Example: ['*']
    • Use * at the start or end of a word. (['position'] will match background-position-y)
    • Use ! to not match a property. Example: ['*', '!letter-spacing']
    • Combine the "not" prefix with the other prefixes. Example: ['', '!font']
  • viewportUnit (String) Expected units.
  • fontViewportUnit (String) Expected units for font.
  • selectorBlackList (Array) The selectors to ignore and leave as px.
    • If value is string, it checks to see if selector contains the string.
      • ['body'] will match .body-class
    • If value is regexp, it checks to see if the selector matches the regexp.
      • [/^body$/] will match body but not .body
  • minPixelValue (Number) Set the minimum pixel value to replace.
  • mediaQuery (Boolean) Allow px to be converted in media queries.
  • replace (Boolean) replaces rules containing vw instead of adding fallbacks.
  • exclude (Regexp or Array of Regexp) Ignore some files like 'node_modules'
    • If value is regexp, will ignore the matches files.
    • If value is array, the elements of the array are regexp.
  • include (Regexp or Array of Regexp) If include is set, only matching files will be converted, for example, only files under src/mobile/ (include: /\/src\/mobile\//)
    • If the value is regexp, the matching file will be included, otherwise it will be excluded.
    • If value is array, the elements of the array are regexp.
  • landscape (Boolean) Adds @media (orientation: landscape) with values converted via landscapeWidth.
  • landscapeUnit (String) Expected unit for landscape option
  • landscapeWidth (Number) Viewport width for landscape orientation.

exclude and include can be set together, and the intersection of the two rules will be taken.

Ignoring

You can use special comments for ignore conversion of single lines:

  • /* px-to-viewport-ignore-next */ — on a separate line, prevents conversion on the next line.
  • /* px-to-viewport-ignore */ — after the property on the right, prevents conversion on the same line.

Example:

/* example input: */
.class {
  /* px-to-viewport-ignore-next */
  width: 10px;
  padding: 10px;
  height: 10px; /* px-to-viewport-ignore */
  border: solid 2px #000; /* px-to-viewport-ignore */
}

/* example output: */
.class {
  width: 10px;
  padding: 3.125vw;
  height: 10px;
  border: solid 2px #000;
}

There are several more reasons why your pixels may not convert, the following options may affect this: propList, selectorBlackList, minPixelValue, mediaQuery, exclude, include.

Use with PostCss configuration file

add to your postcss.config.js

module.exports = {
  plugins: {
    // ...
    'postcss-px-to-viewport': {
      // options
    }
  }
}

Use with gulp-postcss

add to your gulpfile.js:

var gulp = require('gulp');
var postcss = require('gulp-postcss');
var pxtoviewport = require('postcss-px-to-viewport');

gulp.task('css', function () {

    var processors = [
        pxtoviewport({
            viewportWidth: 320,
            viewportUnit: 'vmin'
        })
    ];

    return gulp.src(['build/css/**/*.css'])
        .pipe(postcss(processors))
        .pipe(gulp.dest('build/css'));
});

Contributing

Please read Code of Conduct and Contributing Guidelines for submitting pull requests to us.

Running the tests

In order to run tests, you need to install dev-packages:

$ npm install

Then run the tests via npm script:

$ npm run test

Changelog

The changelog is here.

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

Authors

See also the list of contributors who participated in this project.

License

This project is licensed under the MIT License.

Sponsors

Visit Evrone website to get more information about the projects build.

Sponsored by Evrone

Acknowledgments

More Repositories

1

go-clean-template

Clean Architecture template for Golang services
Go
6,198
star
2

quiet_assets

DEPRECATED: As of sprockets-rails version 3.1.0, used in current versions of rails, this gem is deprecated
Ruby
1,415
star
3

factory_girl-seeds

Deprecated: please note, this project is no longer being maintained
Ruby
175
star
4

inboxes

DEPRECATED: please note, this project is no longer being maintained
Ruby
117
star
5

flutter_audio

A Flutter audio-plugin to playing and recording sounds
Java
108
star
6

capistrano-team_notifications

DEPRECATED: please note, this project is no longer being maintained
Ruby
102
star
7

carrierwave-video-thumbnailer

A thumbnailer plugin for Carrierwave that makes easy thumbnailing of your uploaded videos
Ruby
93
star
8

evrone-python-guidelines

Evrone Python team code guidelines
74
star
9

evroneCrop

DEPRECATED: please note, this project is no longer being maintained
JavaScript
53
star
10

normas

Normal Lightweight Javascript Framework for server-side render compatible with Turbolinks
JavaScript
31
star
11

docker-machine-vscale

Vscale docker machine driver
Go
27
star
12

lxc-frontend

DEPRECATED: please note, this project is no longer being maintained
Ruby
23
star
13

omniauth-yandex

Omniauth 1.0 strategy for Yandex.ru
Ruby
22
star
14

glider

DEPRECATED: please note, this project is no longer being maintained
CoffeeScript
19
star
15

evrone-django-template

Simple and ready to go Django Template.
Python
17
star
16

casbin-ruby

An authorization library that supports access control models like ACL, RBAC, ABAC in Ruby
Ruby
16
star
17

yandex-cleanweb

DEPRECATED: please note, this project is no longer being maintained
Ruby
16
star
18

spree_autosuggest

DEPRECATED: please note, this project is no longer being maintained
Ruby
16
star
19

masquito

Deprecated: please note, this project is no longer being maintainedplease note, this project is no longer being maintained
Ruby
15
star
20

vscale_api

Api client for Vscale (http://vscale.io) like godo
Go
15
star
21

capistrano_evrone_recipes

DEPRECATED: please note, this project is no longer being maintained
Ruby
13
star
22

toggl-python

Python
12
star
23

ultimate-helpers

DEPRECATED: please note, this project is no longer being maintained
CoffeeScript
11
star
24

irake

Lightning fast rake (in rails console)
Ruby
11
star
25

rails-settings-ui

DEPRECATED: This project was moved to another location - https://github.com/accessd/rails-settings-ui
Ruby
11
star
26

dev_must_have

Meta gem for must have Rails development gems
Ruby
10
star
27

glider-rails

DEPRECATED: please note, this project is no longer being maintained
CoffeeScript
9
star
28

activerecord-vertica-adapter

ActiveRecord adapter for Vertica database based on pg adapter
Ruby
8
star
29

ultimate-mixins

Simple library of SASS functions, mixins and basic polyfills
CSS
8
star
30

migration_opener

DEPRECATED: please note, this project is no longer being maintained
Ruby
8
star
31

polemic

Commentable engine for Rails 3
Ruby
8
star
32

worldcities

Deprecated: please note, this project is no longer being maintainedplease note, this project is no longer being maintained
Ruby
6
star
33

foreman_export_runitu

Foreman exporter to runit, unlike original runit exporter, does it without sudo
Ruby
6
star
34

localizator

Ruby
6
star
35

liker

Fetches the count of likes for specified URL in social networks
Ruby
5
star
36

evrone_opensource

Improve READMEs of opensource projects
Ruby
5
star
37

gitlab-campfire-hook

DEPRECATED: please note, this project is no longer being maintained
Ruby
5
star
38

runit-bootstrap

Bootstraps runit user instance on Ubuntu
Shell
4
star
39

mega-copy

Automated refactoring for Python (and not only) files
Python
4
star
40

withardry

A simple plugin to DRY models
Ruby
4
star
41

vocabulary

Wrapper for unofficial Google Dictionary API
Ruby
4
star
42

notification_troubleshoot

Java
4
star
43

ekey

Ruby wrapper of API of the ekey.ru
Ruby
4
star
44

bmstu_2024

Ruby
4
star
45

destiny

Dice roller in d&d style for one of our projects
Ruby
3
star
46

terraform-yandex-postgres

HCL
3
star
47

terraform-yandex-vpc

HCL
2
star
48

activejob_nats_adapter

Ruby
2
star
49

yandex_direct_api

DEPRECATED: please note, this project is no longer being maintained
Ruby
2
star
50

octoshell-extend

DEPRECATED: please note, this project is no longer being maintained
Ruby
2
star
51

wheremymates

DEPRECATED: please note, this project is no longer being maintained
Ruby
1
star
52

twilio-sdk

Dart
1
star
53

terraform-yandex-iam

HCL
1
star
54

evrone_open_source_template

Evrone Open Source Template
1
star