UNPKG

phtml-utility-class

Version:

Write utility classes conveniently while optimising your CSS

166 lines (122 loc) 3.91 kB
# pHTML Utility Class [<img src="https://phtml.io/logo.svg" alt="pHTML" width="90" height="90" align="right">][phtml] [![NPM Version][npm-img]][npm-url] [![Build Status][cli-img]][cli-url] [![Support Chat][git-img]][git-url] [pHTML Utility Class] gives your markup super powers. ## Example Use to write inteligent functional classes based on their arguments. ```html <div class="p-4,1,*"></div> ``` Transforms into styles based on your [configuration](#configuration). ```html <style> .80YQhjgv { --pt: 4; --pr: 1; --pl: 1; } </style> <div class="p 80YQhjgv"></div> ``` You can configure class functions to output whatever you like. When used with a stylesheet it becomes very powerful, requiring minimal pre configuration to work with your design system. ```css .p { padding-top: calc(var(--pt, initial) * 1rem); padding-right: calc(var(--pr, initial) * 1rem); padding-bottom: calc(var(--pb, initial) * 1rem); padding-left: calc(var(--pl, initial) * 1rem); } ``` ## Features - ### Functional Class Names Use inteligent functional class names. Seperate arguments with commas. Use a wildcard to skip arguments. See below for [configuring](#configure) your own class names. ```html <div class="p-4 m-*,auto fl-wrap"></div> ``` <!-- --- - ### Pseudo Classes and Media Queries <mark>(planned)</mark> Configure support for pseduo classes and media queries. ```html <div class="h?c-red p-[1,2],4 h?w-1/2"></div> ``` --> --- - ### Inline Styles Make use of all CSS features inline including hover states and media queries. ```html <div style="&:hover { color: red; }"></div> ``` --- - ### Supports PostCSS Add support for PostCSS by including a `postcss.config.js` file in your project. --- - ### Custom Syntax Customise the syntax used for functional classes by by overiding the default regex pattern. `phtml-utility-class.process(html, null, options)`; ```js // Options let options = { regex: { property: /[^-\s]+/, number: /[0-9]*\.?[0-9]+|\*/, unit: /px|cm|mm|in|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax/, seperator: /,/, arg: /0*({{number}})({{unit}})?|(\w+)/, args: /(?:({{arg}}){{seperator}}?)+/, decl: /({{property}})(?:-({{args}}))?/ }; } ``` ## Configure By default `phtml-utility-class` will look for a file called `phtml-utility-class.config.js` at the root of your project. ```js // phtml-utility-class.config.js module.exports = { classes: [ { class: 'p', children: [ 't', 'r', 'b', 'l' ], style: ({ property, children, args, str }) => { if (args.length < 3) args.push(args[0]) else args.push(args[1]) for (let [i, side] of children.entries()) { str`--${property}${side}: ${args[i]};` } return str() } } // ... ] } ``` ## Usage Add [phtml-utility-class] to your project: ```bash npm install phtml-utility-class --save-dev ``` Use [phtml-utility-class] to process your HTML: ```js const phtmlUtilityClass = require('phtml-utility-class'); phtmlUtilityClass.process(YOUR_HTML /*, processOptions, pluginOptions */); ``` Or use it as a [pHTML] plugin: ```js const phtml = require('phtml'); const phtmlUtilityClass = require('phtml-utility-class'); phtml([ phtmlUtilityClass(/* pluginOptions */) ]).process(YOUR_HTML /*, processOptions */); ``` [cli-img]: https://img.shields.io/travis/limitlessloop/phtml-utility-class.svg [cli-url]: https://travis-ci.org/limitlessloop/phtml-utility-class [git-img]: https://img.shields.io/badge/support-chat-blue.svg [git-url]: https://gitter.im/phtmlorg/phtml [npm-img]: https://img.shields.io/npm/v/phtml-utility-class.svg [npm-url]: https://www.npmjs.com/package/phtml-utility-class [pHTML]: https://github.com/phtmlorg/phtml [pHTML Utility Class]: https://github.com/limitlessloop/phtml-utility-class