2.1.0 • Published 5 months ago

media-query-width v2.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

media-query-width

A small utility (559b or lite 271b) for creating responsive media queries.

This utility allows you to save custom breakpoints, convert values px ​​to em, and create flexible queries that support dynamic styling. This fits when working with styled components or similar CSS-in-JS libraries.

Install

$ npm install --save media-query-width

Usage

Import and bind desired breakpoints.

import { mediaQueryWidth } from 'media-query-width';

const BREAKPOINTS = Object.freeze({
  mobile: 375,
  phablet: 600,
});

export const mqw = mediaQueryWidth.bind(BREAKPOINTS);

/* The default size is 16. If the value is 1, the size will not be converted to em. */
const mqw = mediaQueryWidth.bind(BREAKPOINTS, 1);

/* Separate min and max range definitions. */
const mqw = mediaQueryWidth.bind({
  min: { ...BREAKPOINTS, tablet: 768 },
  max: BREAKPOINTS,
});

Now, can be used to create media queries based on the defined breakpoints.

import { styled } from 'pkg';
import { mqw } from './breakpoints';

const Styled = styled.div`
  /* Sets a custom width. */
  ${mqw({ max: 400 })} {
    color: red;
  }
  /* Query between min and max range. */
  ${mqw({ min: 'mobile', max: 'phablet' })} {
    color: red;
  }
  /* The main size will be override. */
  ${mqw({ size: 1, min: 'mobile' })} {
    color: red;
  }
`;

Allows for dynamic styling by accepting styles through props, using template literals or array syntax.

import { styled } from 'pkg';
import { mqw } from './breakpoints';

const fn = mqw({ min: 'mobile' })`
  color: ${({ $color }) => $color};
  ${['display: block;']}
  ${{ zIndex: 1 }}
`;

const fn = mqw({ min: 'mobile' })([
  'color: ',
  ({ $color }) => $color,
  ';',
  ['display: block;'],
  { zIndex: 1 },
]);

const Styled = styled.div`
  ${fn}
`;

<Styled $color='red' />;

To make TypeScript aware of theme's structure, extend the Theme interface in a declaration file.

type ThemeType = (typeof import('./theme'))['theme'];

declare module 'media-query-width' {
  export interface Theme extends ThemeType {}
};

Lite version

The lite version returns only the string of the media query without using template literals.

import { mediaQueryWidth } from 'media-query-width/lite';

License

MIT License © Salemsky

2.1.0

5 months ago

2.0.1

7 months ago

2.0.0

7 months ago

1.0.2

7 months ago

1.0.1

7 months ago

1.0.0

7 months ago