Emotion 文档告诉我们如何在 css 道具中进行可重用的媒体查询。这允许我们在 css prop 中进行以下查询:
<div
css={{
color: 'green',
[mq[0]]: {
color: 'gray'
},
[mq[1]]: {
color: 'hotpink'
}
}}
>
使用mq[0]
并mq[1]
引用断点数组中的前两项。例如: const breakpoints = [576, 768, 992, 1200]
。
此外,本文更进一步,展示了如何使用断点对象获取命名的可重用媒体查询。它首先根据情感文档创建一个类似的功能,但对于对象:
const mq = n => {
const bpArray = Object.keys(bp).map(key => [key, bp[key]]);
const [result] = bpArray.reduce((acc, [name, size]) => {
if (n === name) return [...acc, `@media (min-width: ${size}px)`];
return acc;
}, []);
return result;
};
这允许我们创建一个带有命名媒体查询的断点对象:
// object
const breakpoints = {
sm: 500,
md: 768,
lg: 992,
xl: 1200
};
// query
${mq('sm')} {
color: gray;
}
到目前为止,一切都很好。
我现在想在情感风格的组件中做类似的事情。因此,我创建了一个断点对象和与上述文章中提到的相同的函数。
然后我尝试在我的情感样式组件中使用速记媒体查询——就像这样:
import styled from '@emotion/styled'
const Container = styled.div`
${mq('sm')`max-width: 750px;`}
${mq('md')`max-width: 970px;`}
${mq('lg')`max-width: 1170px`}
`
但是当我尝试这个时,它不起作用。我收到以下错误消息:
TypeError: Object(...) is not a function
知道为什么会发生这种情况以及我能做些什么来让它发挥作用吗?
谢谢。