@rocketsofawesome/mirage
Version:
[Live Demo of the Pattern Library](https://rocketsofawesome.github.io/mirage/)
48 lines (41 loc) • 1.35 kB
JavaScript
import { css } from 'styled-components'
const sizes = {
phone: 320,
phoneMax: 414,
tablet: 768,
tabletMax: 960,
laptop: 1280,
desktop: 1440
}
const breakpoints = {
landscape: '(orientation: landscape)',
portrait: '(orientation: portrait)'
}
Object.keys(sizes).forEach((label) => {
breakpoints[`below${label.charAt(0).toUpperCase()}${label.substr(1)}`] =
`(max-width: ${sizes[label] - 1}px)`
breakpoints[`above${label.charAt(0).toUpperCase()}${label.substr(1)}`] =
`(min-width: ${sizes[label]}px)`
})
export { breakpoints, sizes }
export default Object.keys(sizes).reduce((accumulator, label) => {
// use em in breakpoints to work properly cross-browser and support users
// changing their browsers font-size: https://zellwk.com/blog/media-query-units/
const remSize = sizes[label] / 10
accumulator[label] = (...args) => css`
@media (min-width: ${remSize}em) {
${css(...args)}
}
`
return accumulator
}, {})
export const breakpointsVerbose = Object.keys(breakpoints).reduce((accumulator, label) => {
// use em in breakpoints to work properly cross-browser and support users
// changing their browsers font-size: https://zellwk.com/blog/media-query-units/
accumulator[label] = (...args) => css`
@media ${breakpoints[label]} {
${css(...args)}
}
`
return accumulator
}, {})