Media Queries
Media queries provide more power and allow you to style cross-platform apps with pixel-perfect accuracy.
Basic usage
To use media queries, you need to import the mq
utility and convert your value to an object
:
import { Stylesheet, mq } from 'react-native-unistyles'
const styles = Stylesheet.create(theme => ({ container: { flex: 1, justifyContent: 'center', alignItems: 'center' backgroundColor: theme.colors.background, backgroundColor: { [mq.only.width(240, 380)]: theme.colors.background, [mq.only.width(380)]: theme.colors.barbie } }}))
The mq
utility provides Intellisense for quickly building your media queries.
Advanced usage
You can also combine width
media queries with height
media queries:
import { StyleSheet, mq } from 'react-native-unistyles'
const styles = Stylesheet.create(theme => ({ container: { flex: 1, justifyContent: 'center', alignItems: 'center' backgroundColor: theme.colors.background, backgroundColor: { [mq.width(240, 380).and.height(300)]: theme.colors.background, [mq.width(380).and.height(300)]: theme.colors.barbie } }}))
Or use only height
media queries:
import { StyleSheet, mq } from 'react-native-unistyles'
const styles = Stylesheet.create(theme => ({ container: { flex: 1, justifyContent: 'center', alignItems: 'center' backgroundColor: theme.colors.background, backgroundColor: { [mq.only.height(300, 500)]: theme.colors.background, [mq.only.height(500)]: theme.colors.barbie } }}))
You can also reuse your defined breakpoints:
import { StyleSheet, mq } from 'react-native-unistyles'
const styles = Stylesheet.create(theme => ({ container: { flex: 1, justifyContent: 'center', alignItems: 'center' backgroundColor: theme.colors.background, backgroundColor: { [mq.only.height(500)]: theme.colors.background, [mq.only.width(200, 'xl')]: theme.colors.barbie } }}))
Reference
mq.only.width // target only widthmq.only.height // target only heightmq.width(...).and.height(...) // target both width and heightmq.height(...).and.width(...) // target both height and width
(100, 200) // from 100 to 199(400, 'xl') // from 400 to 'xl' breakpoint('sm', 'md') // from 'sm' to 'md' breakpoint(undefined, 1000) // from 0 to 999(null, 800) // from 0 to 799(500) // from 500 onwards
mq.only.width(100, 200) // width from 100 to 199mq.height(500).and.width('sm') // heigh from 500 onwards and width from 'sm' breakpoint onwardsmq.only.height(null, 1000) // height from 0 to 999
Combining media queries with breakpoints
You can mix media queries with breakpoints, but media queries will always have higher priority:
import { StyleSheet, mq} from 'react-native-unistyles'
const styles = Stylesheet.create(theme => ({ container: { flex: 1, justifyContent: 'center', alignItems: 'center' backgroundColor: { sm: theme.colors.background, // Unistyles will firsly resolve to this style, even though sm may be also correct [mq.only.width(200, 'xl')]: theme.colors.barbie } }}))
CSS Media Queries
Breakpoints
and Media Queries
will be auto converted to Web CSS media queries. Learn more about Web Media Queries.