You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

216 lines
7.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<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 Ive 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)