UNPKG

styled-system

Version:

Responsive, theme-based style props for building design systems with React

216 lines (162 loc) 7.56 kB
<img src='https://styled-system.com/logo.svg' width='128' height='128' /> # Styled System Responsive, theme-based style props for building design systems with React https://styled-system.com [![stars][]][github] [![Build Status][circleci-badge]][circleci] [![Downloads][]][npm] [![Version][]][npm] [![spectrum-badge][]][spectrum] ![size][] ![MIT License][license] [![system-ui/theme][system-ui-badge]](https://system-ui.com/theme) [version]: https://flat.badgen.net/npm/v/styled-system [downloads]: https://flat.badgen.net/npm/dm/styled-system [license]: https://flat.badgen.net/badge/license/MIT/blue [stars]: https://flat.badgen.net/github/stars/styled-system/styled-system [size]: https://flat.badgen.net/bundlephobia/minzip/styled-system [spectrum-badge]: https://flat.badgen.net/badge/spectrum/community/purple [system-ui-badge]: https://flat.badgen.net/badge/system-ui/theme/black [npm]: https://npmjs.com/package/styled-system [github]: https://github.com/styled-system/styled-system [spectrum]: https://spectrum.chat/styled-system [circleci]: https://circleci.com/gh/styled-system/styled-system [circleci-badge]: https://flat.badgen.net/circleci/github/styled-system/styled-system/master ```sh npm i styled-system ``` ## Features - Add style props that hook into your own theme - Quickly set responsive font-size, margin, padding, width, and more with props - Influenced by constraint-based design system principles - Typographic scale - Spacing scale for margin and padding - Works with any color palette - Works with most css-in-js libraries, including [styled-components][] & [emotion][emotion] - Used in [Rebass](https://rebassjs.org), [Reflexbox](https://rebassjs.org/reflexbox/), and the [Priceline Design System](https://github.com/priceline/design-system) > "This is honestly my favourite way to build UI components right now ![party parrot][party-parrot]" > > – [Varun Vachhar][varun-post] [party-parrot]: https://github.com/jmhobbs/cultofthepartyparrot.com/raw/master/parrots/parrot.gif > "If you haven't seen Styled System before, do yourself a favour and check it out. It's been a huge influence in my thinking on component-oriented styles." > > – [Mark Dalgleish][markdalgleish] <!-- > "Fantastic set of tools that offer the ease and API of tachyons/functional CSS but, are way more customisable." > > – [Varun Vachhar](https://mobile.twitter.com/winkerVSbecks/status/955619873463431168) --> > "The future of css-in-js is going to look something like styled-system with its responsive values."<br/> > > – [Kye Hohenberger](https://mobile.twitter.com/kyehohenberger/status/905474043729416192) > "Coming from @tachyons_css, the styled-system utilities from @jxnblk is the missing link I’ve been looking for."<br/> > > – [Nathan Young](https://mobile.twitter.com/nathanyoung/status/891353221880360960) > "If you make websites/apps with React check out Styled System if you haven't already. You will be amazed at how much faster you can build." > > – [David Yeiser][david-tweet] > "If you like Tachyons you will love styled-system. If you don't like Tachyons, you will love styled-system." > > – [Adam Morse][mrmrs] > "Styled System is one of the best libraries I have ever used." > > – [Miha Sedej](https://tresko.dev/theming-react-datepicker-datepicker-react-styled) [mrmrs]: https://mobile.twitter.com/mrmrs_/status/913189805055401984 ## Try It Out Try the [examples](examples) on CodeSandbox - [Basic Example](https://codesandbox.io/s/github/styled-system/styled-system/tree/master/examples/basic) - [Emotion](https://codesandbox.io/s/github/styled-system/styled-system/tree/master/examples/emotion) ### Table of Contents - [Usage](#usage) - [Docs](#docs) - [Further Reading](#further-reading) - [Built with Styled System](#built-with-styled-system) - [Related](#related) ## Usage ```jsx // Example uses styled-components, but styled-system works with most other css-in-js libraries as well import styled from 'styled-components' import { space, layout, typography, color } from 'styled-system' // Add styled-system functions to your component const Box = styled.div` ${space} ${layout} ${typography} ${color} ` ``` Each style function exposes its own set of component props that handle styles based on values defined in a theme. ```jsx // width: 50% <Box width={1/2} /> // font-size: 20px (theme.fontSizes[4]) <Box fontSize={4} /> // margin: 16px (theme.space[2]) <Box m={2} /> // padding: 32px (theme.space[3]) <Box p={3} /> // color <Box color='tomato' /> // color: #333 (theme.colors.gray[0]) <Box color='gray.0' /> // background color <Box bg='tomato' /> ``` ## Responsive Style Props Set responsive width, margin, padding, font-size, and other properties with a shorthand array syntax. [Read more](https://styled-system.com/responsive-styles) ```jsx // responsive width <Box width={[ 1, 1/2, 1/4 ]} /> // responsive font-size <Box fontSize={[ 2, 3, 4 ]} /> // responsive margin <Box m={[ 1, 2, 3 ]} /> // responsive padding <Box p={[ 1, 2, 3 ]} /> ``` To learn more, see the [Getting Started](https://styled-system.com/getting-started) guide or read the docs. ## Docs - [Getting Started](https://styled-system.com/getting-started) - [Responsive Styles](https://styled-system.com/responsive-styles) - [How it Works](https://styled-system.com/how-it-works) - [Custom Props](https://styled-system.com/custom-props) - [Variants](https://styled-system.com/variants) - [API](https://styled-system.com/api) - [Reference Table](https://styled-system.com/table) - [Packages](https://styled-system.com/packages) - [Guides](https://styled-system.com/guides) - [@styled-system/css](https://styled-system.com/css) --- ## Further Reading - [Component Based Design System With Styled-System][varun-post] - [Build Better Component Libraries with Styled System][alan-b-smith-post] - [Building a beautiful, reusable button with Styled System](https://johno.com/styled-system-button) - [Defining Component APIs in React](http://jxnblk.com/blog/defining-component-apis-in-react/) - [The Three Tenets of Styled System](https://jxnblk.com/blog/the-three-tenets-of-styled-system/) ## Built with Styled System - [Primer Components](https://primer.style/components) - [Priceline Design System](https://pricelinelabs.github.io/design-system/) - [Cloudflare Design Color](https://cloudflare.design/color/) - [Styled System HTML](https://johnpolacek.github.io/styled-system-html/) - [Rebass](https://rebassjs.org) - [Reflexbox](https://rebassjs.org/reflexbox/) - [@datepicker-react/styled](https://github.com/tresko/react-datepicker) ## Related - [System UI](https://system-ui.com) - [Spectrum.Chat Community](https://spectrum.chat/styled-system) - [styled-components][] - [emotion][] [styled-components]: https://github.com/styled-components/styled-components [emotion]: https://github.com/emotion-js/emotion [varun-post]: https://varun.ca/styled-system/ [alan-b-smith-post]: https://medium.com/styled-components/build-better-component-libraries-with-styled-system-4951653d54ee [david-tweet]: https://mobile.twitter.com/davidyeiser/status/965920740582285312 <!-- extra links --> [cole-tweet]: https://mobile.twitter.com/colebemis/status/996565848138526721 [mrmrs-elements]: https://github.com/mrmrs/elements [broccs-react-starter]: https://github.com/broccolini/react-website-starter [markdalgleish]: https://mobile.twitter.com/markdalgleish/status/1107732365474848768 [varun vachhar]: https://mobile.twitter.com/winkerVSbecks/status/955619873463431168 [MIT License](LICENSE.md)