Rebass components are great to use as base components that can be extended for various purposes in your design system.
There are two primary ways to extend Rebass components:
// React-based extension import React from 'react' import { Box } from 'rebass' const Container = props => <Box {...props} mx='auto' css={{ maxWidth: '1024px' }} />
Using the css
prop requires the use of babel-plugin-styled-components
// styled-components based extension import styled from 'styled-components' import { Box } from 'rebass' const Container = styled(Box)({ maxWidth: '1024px' }) Container.defaultProps = { mx: 'auto' }
const Container = props => <Box {...props} mx='auto' css={{ maxWidth: '1024px' }} />
const Badge = props => <Card color='white' bg='blue' {...props} px={3} py={1} borderRadius={9999} css={{ display: 'inline-block' }} />
const Avatar = props => <Image width={48} height={48} borderRadius={9999} {...props} />
const BlockLink = props => <Link color='inherit' {...props} css={{ display: 'block', textDecoration: 'none' }} />
const NavLink = props => <Link px={2} py={1} color='inherit' {...props} css={{ display: 'block', fontWeight: 'bold', }} />
const Embed = props => <Box {...props} width={1} css={{ height: 0, paddingBottom: (9 / 16) + '%', position: 'relative', overflow: 'hidden', '& > iframe': { position: 'absolute', width: '100%', height: '100%', top: 0, bottom: 0, left: 0, border: 0 } }} />
const Pre = props => <Text {...props} as='pre' fontFamily='Menlo, monospace' p={2} bg='lightgray' />
const Fixed = props => <Box {...props} css={{ position: 'fixed' }} />
const Divider = props => <Box {...props} as='hr' bg='gray' css={{ border: 0, height: 1 }} />
const Caps = props => <Text fontSize={1} {...props} css={{ textTransform: 'uppercase', letterSpacing: '0.2em' }} />
const Toolbar = props => <Flex px={2} color='white' bg='black' alignItems='center' {...props} />