/
hiDPI.js
42 lines (39 loc) · 1022 Bytes
/
hiDPI.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// @flow
/**
* Generates a media query to target HiDPI devices.
*
* @example
* // Styles as object usage
* const styles = {
* [hiDPI(1.5)]: {
* width: 200px;
* }
* }
*
* // styled-components usage
* const div = styled.div`
* ${hiDPI(1.5)} {
* width: 200px;
* }
* `
*
* // CSS as JS Output
*
* '@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
* only screen and (min--moz-device-pixel-ratio: 1.5),
* only screen and (-o-min-device-pixel-ratio: 1.5/1),
* only screen and (min-resolution: 144dpi),
* only screen and (min-resolution: 1.5dppx)': {
* 'width': '200px',
* }
*/
function hiDPI(ratio: number = 1.3) {
return `
@media only screen and (-webkit-min-device-pixel-ratio: ${ratio}),
only screen and (min--moz-device-pixel-ratio: ${ratio}),
only screen and (-o-min-device-pixel-ratio: ${ratio}/1),
only screen and (min-resolution: ${Math.round((ratio * 96))}dpi),
only screen and (min-resolution: ${ratio}dppx)
`
}
export default hiDPI