|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- # CSS-in-JS Utilities
- A library that provides useful utilities functions for CSS-in-JS solutions.<br>
- They are intended to be used by CSS-in-JS library authors rather used directly.
- <br>
-
- <img alt="TravisCI" src="https://travis-ci.org/rofrischmann/css-in-js-utils.svg?branch=master"> <a href="https://codeclimate.com/github/rofrischmann/css-in-js-utils/coverage"><img alt="Test Coverage" src="https://codeclimate.com/github/rofrischmann/css-in-js-utils/badges/coverage.svg"></a> <img alt="npm downloads" src="https://img.shields.io/npm/dm/css-in-js-utils.svg"> <img alt="npm version" src="https://badge.fury.io/js/css-in-js-utils.svg">
-
- ## Installation
- ```sh
- yarn add css-in-js-utils
- ```
-
- ## Why?
- By now I have authored and collaborated on many different libraries and found I would rewrite the very same utility functions every time. That's why this repository is hosting small utilities especially built for CSS-in-JS solutions and tools. Even if there are tons of different libraries already, they all basically use the same mechanisms and utilities.
-
- ## Utilities
- * [`assignStyle(base, ...extend)`](#assignstylebase-extend)
- * [`camelCaseProperty(property)`](#camelcasepropertyproperty)
- * [`cssifyDeclaration(property, value)`](#cssifydeclarationproperty-value)
- * [`cssifyObject(object)`](#cssifyobjectobject)
- * [`hyphenateProperty(property)`](#hyphenatepropertyproperty)
- * [`isPrefixedProperty(property)`](#isprefixedpropertyproperty)
- * [`isPrefixedValue(value)`](#isprefixedvaluevalue)
- * [`isUnitlessProperty(property)`](#isunitlesspropertyproperty)
- * [`normalizeProperty(property)`](#normalizepropertyproperty)
- * [`resolveArrayValue(property, value)`](#resolvearrayvalueproperty-value)
- * [`unprefixProperty(property)`](#unprefixpropertyproperty)
- * [`unprefixValue(value)`](#unprefixvaluevalue)
-
- ------
-
- ### `assignStyle(base, ...extend)`
- Merges deep style objects similar to `Object.assign`.
-
- ```javascript
- import { assignStyle } from 'css-in-js-utils'
-
- assignStyle(
- { color: 'red', backgroundColor: 'black' },
- { color: 'blue' }
- )
- // => { color: 'blue', backgroundColor: 'black' }
-
- assignStyle(
- {
- color: 'red',
- ':hover': {
- backgroundColor: 'black'
- }
- },
- {
- ':hover': {
- backgroundColor: 'blue'
- }
- }
- )
- // => { color: 'red', ':hover': { backgroundColor: 'blue' }}
- ```
-
- ------
-
- ### `camelCaseProperty(property)`
- Converts the `property` to camelCase.
-
- ```javascript
- import { camelCaseProperty } from 'css-in-js-utils'
-
- camelCaseProperty('padding-top')
- // => 'paddingTop'
-
- camelCaseProperty('-webkit-transition')
- // => 'WebkitTransition'
- ```
-
- ------
-
- ### `cssifyDeclaration(property, value)`
- Generates a CSS declaration (`property`:`value`) string.
-
- ```javascript
- import { cssifyDeclaration } from 'css-in-js-utils'
-
- cssifyDeclaration('paddingTop', '400px')
- // => 'padding-top:400px'
-
- cssifyDeclaration('WebkitFlex', 3)
- // => '-webkit-flex:3'
- ```
-
- ------
-
- ### `cssifyObject(object)`
- Generates a CSS string using all key-property pairs in `object`.
- It automatically removes declarations with value types other than `number` and `string`.
-
- ```javascript
- import { cssifyObject } from 'css-in-js-utils'
-
- cssifyObject({
- paddingTop: '400px',
- paddingBottom: undefined,
- WebkitFlex: 3,
- _anyKey: [1, 2, 4]
- })
- // => 'padding-top:400px;-webkit-flex:3'
- ```
-
- ------
-
- ### `hyphenateProperty(property)`
- Converts the `property` to hyphen-case.
- > Directly mirrors [hyphenate-style-name](https://github.com/rexxars/hyphenate-style-name).
-
- ```javascript
- import { hyphenateProperty } from 'css-in-js-utils'
-
- hyphenateProperty('paddingTop')
- // => 'padding-top'
-
- hyphenateProperty('WebkitTransition')
- // => '-webkit-transition'
- ```
-
- ------
-
- ### `isPrefixedProperty(property)`
- Checks if a `property` includes a vendor prefix.
-
- ```javascript
- import { isPrefixedProperty } from 'css-in-js-utils'
-
- isPrefixedProperty('paddingTop')
- // => false
-
- isPrefixedProperty('WebkitTransition')
- // => true
- ```
-
- ------
- ### `isPrefixedValue(value)`
- Checks if a `value` includes vendor prefixes.
-
- ```javascript
- import { isPrefixedValue } from 'css-in-js-utils'
-
- isPrefixedValue('200px')
- isPrefixedValue(200)
- // => false
-
- isPrefixedValue('-webkit-calc(100% - 50px)')
- // => true
- ```
-
- ------
-
- ### `isUnitlessProperty(property)`
- Checks if a `property` accepts unitless values.
-
- ```javascript
- import { isUnitlessProperty } from 'css-in-js-utils'
-
- isUnitlessProperty('width')
- // => false
-
- isUnitlessProperty('flexGrow')
- isUnitlessProperty('lineHeight')
- isUnitlessProperty('line-height')
- // => true
- ```
-
- ------
-
- ### `normalizeProperty(property)`
- Normalizes the `property` by unprefixing **and** camelCasing it.
- > Uses the [`camelCaseProperty`](#camelcasepropertyproperty) and [`unprefixProperty`](#unprefixpropertyproperty)-methods.
-
- ```javascript
- import { normalizeProperty } from 'css-in-js-utils'
-
- normalizeProperty('-webkit-transition-delay')
- // => 'transitionDelay'
- ```
-
- ------
-
- ### `resolveArrayValue(property, value)`
- Concatenates array values to single CSS value.
- > Uses the [`hyphenateProperty`](#hyphenatepropertyproperty)-method.
-
-
- ```javascript
- import { resolveArrayValue } from 'css-in-js-utils'
-
- resolveArrayValue('display', [ '-webkit-flex', 'flex' ])
- // => '-webkit-flex;display:flex'
-
- resolveArrayValue('paddingTop', [ 'calc(100% - 50px)', '100px' ])
- // => 'calc(100% - 50px);padding-top:100px'
- ```
-
- ------
-
- ### `unprefixProperty(property)`
- Removes the vendor prefix (if set) from the `property`.
-
- ```javascript
- import { unprefixProperty } from 'css-in-js-utils'
-
- unprefixProperty('WebkitTransition')
- // => 'transition'
-
- unprefixProperty('transitionDelay')
- // => 'transitionDelay'
- ```
-
- ------
-
- ### `unprefixValue(value)`
- Removes all vendor prefixes (if any) from the `value`.
-
- ```javascript
- import { unprefixValue } from 'css-in-js-utils'
-
- unprefixValue('-webkit-calc(-moz-calc(100% - 50px)/2)')
- // => 'calc(calc(100% - 50px)/2)'
-
- unprefixValue('100px')
- // => '100px'
- ```
-
- ## Direct Import
- Every utility function may be imported directly to save bundle size.
-
- ```javascript
- import camelCaseProperty from 'css-in-js-utils/lib/camelCaseProperty'
- ```
-
- ## License
- css-in-js-utils is licensed under the [MIT License](http://opensource.org/licenses/MIT).<br>
- Documentation is licensed under [Creative Common License](http://creativecommons.org/licenses/by/4.0/).<br>
- Created with ♥ by [@rofrischmann](http://rofrischmann.de).
|