Skip to content

v0-alpha/src-mq

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

src-mq

๐Ÿค“ Lucid breakpoints for JavaScript.

Build Status codecov npm type definitions npm bundle size

Example

import { from, until } from 'src-mq'

const styles = {
	[from.small]: { ... },

	[until.large]: { ... },

	[from.small.until.large]: { ... },

	[from.small.until.large.for.screen]: { ... },
}

Tagged templates

To use src-mq in a tagged template, you will need to explicitly call it as a function.

For example, this is how you would use it with Emotion's css:

import { from, until } from 'src-mq'
import css from 'emotion'

const className = css`
	${from.small()} { ... },

	${until.large()} { ... },

	${from.small.until.large()} { ... },

	${from.small.until.large.for.screen()} { ... },
`

API

from<breakpoint>

Type: function

Returns a media query scoped to:

  • a minimum width of breakpoint
/* {[from.small]: { ... }} */

@media all and (min-width: 30em) and (max-width: none) { ... }

from<breakpoint>.for[screen, print, speech]

Type: function

Returns a media query scoped to:

  • a minimum width of breakpoint
  • the specified media type
/* {[from.small.for.screen]: { ... }} */

@media screen and (min-width: 30em) and (max-width: none) { ... }

until<breakpoint>

Type: function

Returns a media query scoped to:

  • a maximum width of breakpoint โˆ’ 1px
/* {[until.large]: { ... }} */

@media all and (min-width: none) and (max-width: 61.1875em) { ... }

until<breakpoint>.for[screen, print, speech]

Type: function

Returns a media query scoped to:

  • a maximum width of breakpoint โˆ’ 1px
  • the specified media type
/* {[until.large.for.screen]: { ... }} */

@media screen and (min-width: none) and (max-width: 61.1875em) { ... }

from<fromBreakpoint>.until<untilBreakpoint>

Type: function

Returns a media query scoped to:

  • a minimum width of fromBreakpoint
  • a maximum width of untilBreakpoint โˆ’ 1px
/* {[from.small.until.large]: { ... }} */

@media all and (min-width: 30em) and (max-width: 61.1875em) { ... }

from<fromBreakpoint>.until<untilBreakpoint>.for[screen, print, speech]

Type: function

Returns a media query scoped to:

  • a minimum width of fromBreakpoint
  • a maximum width of untilBreakpoint โˆ’ 1px
  • the specified media type
/* {[from.small.until.large.for.screen]: { ... }} */

@media screen and (min-width: 30em) and (max-width: 61.1875em) { ... }

Defaults

src-mq provides a reasonable set of defaults:

Media type

all

Breakpoints

  • xxSmall (320 pixels)
  • xSmall (375 pixels)
  • small (480 pixels)
  • medium (740 pixels)
  • large (980 pixels)
  • xLarge (1140 pixels)
  • xxLarge (1300 pixels)

Breakpoint pixel values are converted ems in the CSS, assuming 1em = 16px.

Overriding breakpoints

The default breakpoints can be replaced, extended or restored:

import { setBreakpoints, extendBreakpoints, resetBreakpoints } from 'src-mq'

// Breakpoints are the default set:
//
// 	- xxSmall (320 pixels)
// 	- xSmall (375 pixels)
// 	- small (480 pixels)
// 	- medium (740 pixels)
// 	- large (980 pixels)
// 	- xLarge (1140 pixels)
// 	- xxLarge (1300 pixels)
//
// You can do [from.small.until.medium] etc.

setBreakpoints({ tiny: 1, massive: 10000000 })

// Breakpoints have been replaced:
//
// 	- tiny (1 pixel)
// 	- massive (10000000 pixels)
//
// Now you can do [from.tiny.until.massive],
// but not [from.small.until.medium] etc.

extendBreakpoints({ infinitesimal: 0.00000001 })

// Breakpoints have been extended:
//
// 	- infinitesimal (0.00000001 pixels)
// 	- tiny (1 pixel)
// 	- massive (10000000 pixels)
//
// Now you can do [from.infinitesimal.until.massive] etc.

resetBreakpoints()

// Breakpoints have been restored to the default set:
//
// 	- xxSmall (320 pixels)
// 	- xSmall (375 pixels)
// 	- small (480 pixels)
// 	- medium (740 pixels)
// 	- large (980 pixels)
// 	- xLarge (1140 pixels)
// 	- xxLarge (1300 pixels)
//
// Now you can do [from.small.until.medium],
// but not [from.tiny.until.massive] etc.

Complex queries

By design, src-mq is limited to media type and min/max-width feature expressions.

To generate more complex queries than this, you can concatenate its output with any other valid feature expressions, for example:

/* {[from.small.for.screen + " and (prefers-reduced-motion: reduce)"]: { ... }} */

@media screen and (min-width: 30em) and (max-width: none) and (prefers-reduced-motion: reduce) { ... }

Acknowledgements

src-mq is heavily inspired by sass-mq.

It's extracted from work originally done at the Guardian and that is now being rolled into their Source Design System.

Hence the name ๐Ÿ’ƒ.

About

Lucid breakpoints for JavaScript

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published