styled-kit v1.0.5
styled-kit
Installation
npm install styled-kitstyled-kit depends on styled-components, so make sure you have that installed
npm install styled-componentsUsage
import Div from 'styled-kit/Div'
<Div column listTop={24}>
<h1>Hello</h1>
<h2>Hello</h2>
</Div>Div is a helper wrapper component that makes it easy to position its children using flex attributes.
Live demo
🚧 In progress
Available props
Flex properties
| Prop | CSS |
|---|---|
row | flex-direction: row; |
rowReverse | flex-direction: row-reverse; |
column | flex-direction: column; |
columnReverse | flex-direction: column-reverse; |
wraps | flex-wrap: wrap; |
justifyStart | justify-content: flex-start; |
justifyEnd | justify-content: flex-end; |
justifyCenter | justify-content: center; |
justifyBetween | justify-content: space-between; |
justifyAround | justify-content: space-around; |
justifyEvenly | justify-content: space-evenly; |
itemsStart | align-items: flex-start; |
itemsEnd | align-items: flex-end; |
itemsCenter | align-items: center; |
itemsBaseline | align-items: baseline; |
itemsStretch | align-items: stretch; |
contentStart | align-content: flex-start; |
contentEnd | align-content: flex-end; |
contentCenter | align-content: center; |
contentBetween | align-content: space-between; |
contentAround | align-content: space-around; |
contentStretch | align-content: stretch; |
Self flex properties
| Prop | CSS |
|---|---|
flex={X} | flex: X; |
flexNone | flex: none; |
selfAuto | align-self: auto; |
selfStart | align-self: flex-start; |
selfEnd | align-self: flex-end; |
selfCenter | align-self: center; |
selfBaseline | align-self: baseline; |
selfStretch | align-self: stretch; |
Props that looks like name={X} accepts a value that is either number or string. If it's number and, it will be converted to pixels for props that require them, so:
width={100}: width: 100px;
height="100": height: 100%;
flex={5}: flex: 5;
Size
| Prop | CSS |
|---|---|
width={X} | width: X; |
height={X} | height: X; |
minWidth={X} | min-width: X; |
minHeight={X} | min-height: X; |
maxWidth={X} | max-width: X; |
maxHeight={X} | max-height: X; |
radius={X} | border-radius: X; |
Space
| Prop | CSS |
|---|---|
margin={X} | margin: X; |
marginTop={X} | margin-top: X; |
marginRight={X} | margin-right: X; |
marginBottom={X} | margin-bottom: X; |
marginLeft={X} | margin-left: X; |
padding={X} | padding: X; |
paddingTop={X} | padding-top: X; |
paddingRight={X} | padding-right: X; |
paddingBottom={X} | padding-bottom: X; |
paddingLeft={X} | padding-left: X; |
Instead of using paddingTop or marginLeft, you can also use abbreviated pTop, mLeft, and so on.
Position
| Prop | CSS |
|---|---|
relative | position: relative; |
absolute | position: absolute; |
fixed | position: fixed; |
sticky | position: sticky; |
top={X} | top: {X}; |
right={X} | right: {X}; |
bottom={X} | bottom: {X}; |
left={X} | left: {X}; |
z={X} | z-index: {X}; |
Text
| Prop | CSS |
|---|---|
font={X} | font: {X}; |
fontFamily={X} | font-family: {X}; |
fontSize={X} | font-size: {X}; |
fontWeight={X} | font-weight: {X}; |
lineHeight={X} | line-height: {X}; |
letterSpacing={X} | letter-spacing: {X}; |
textAlign={X} | text-align: {X}; |
color={X} | color: {X}; |
Lists
Add margin to every child except first or last one, depending on the chosen direction. Used to add space between child items.
| Prop | CSS |
|---|---|
listLeft={X} | > *:not(:first-child) { margin-left: {X}; } |
listRight={X} | > *:not(:last-child) { margin-right: {X}; } |
listTop={X} | > *:not(:first-child) { margin-top: {X}; } |
listBottom={X} | > *:not(:last-child) { margin-bottom: {X}; } |
X is optional here and is 8px by default
You can also use columnTop and columnBottom. They work the same as listTop and listBottom, but also come with flex-direction: column;.
Other
| Prop | CSS |
|---|---|
overflow={X} | overflow: {X}; |
Helpers
| Prop | CSS |
|---|---|
background={X} | background: ${X}; |
backgroundImage={URL} | background-image: url({URL}); |
cover | background-size: cover; |
contain | background-size: contain; |
layer | position: absolute; top: 0; right: 0; bottom: 0; left: 0; |
square={X} | width: {X}; height: {X}; |
circle | border-radius: 50%; |
fullHeight | min-height: 100vh; |
hide | display: none; |
clickable | cursor: pointer; |
noPointerEvents | pointer-events: none; |
overlay | Creates a semi-transparent red overlay over a <Div />, may come in useful when debugging layout. Accept a string with a color name if you want something other than red. |
Media queries
You can use CSS media queries with <Div />
First, you need to import styled-components's ThemeProvider and pass it a theme with styledKitMediaQueries key where you put your media queries. Query needs to have a name and a valid value. Here's an example:
import { ThemeProvider } from 'styled-components'
import Div from 'styled-kit/Div'
import createQueries from 'styled-kit/utils/createQueries'
const styledKitMediaQueries = createQueries({
mobile: '(max-width: 767px)',
desktop: '(min-width: 768px)'
})
function App() {
return (
<ThemeProvider theme={{ styledKitMediaQueries }}>
<Div mobile="color: pink;" desktop="color: powderblue;">
Hello!
</Div>
</ThemeProvider>
)
}You can name your queries however you want. In this example, they're called "mobile" and "desktop", and now all Divs can accept props of the same names.
<Div desktop="flex-direction: column;" /> Simple CSS string
<Div desktop={{ flexDirection: 'column' }} /> Object notation (the same that style prop accepts)
<Div desktop={{ column: true }} /> Object notation unsing Div's properties
<Div desktop={['column']} /> Array notation, works with Div's boolean properties only
All results in the same flex-direction: column; CSS getting attached to <Div /> on screens at least 768px wide
Enjoy! 💙
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago