如果您的应用的样式“API”有 3 个媒体查询断点,那么您可以在样式组件中使用道具并返回正确的 CSS。指定您想要的 API,即<StyledBox width={{ _: '100%', md: '50%', lg: '25%' }} />
.
import styled, { css } from 'styled-components';
const StyledBox = styled.div`
${props => props.width && css`
width: ${width._};
@media screen and (min-width: 40em) {
width: ${width.md};
}
@media screen and (min-width: 52em) {
width: ${width.lg};
}
`}
`;
StyledBox.propTypes = {
width: PropTypes.shape({
_: PropTypes.string.isRequired,
md: PropTypes.string.isRequired,
lg: PropTypes.string.isRequired,
}),
};
StyledBox.defaultProps = {
width: {
_: '100%',
md: '50%',
lg: '25%'
}
};
样式化组件css 辅助函数
用法:
<StyledBox>
This gets default media breakpoints, 100%, 50%, 25%
</StyledBox>
<StyledBox
width={{ _: '90%', md: '80%', lg: '70%'}}
>
This gets overridden media breakpoints, 90%, 80%, 70%
</StyledBox>
更新
如果您不想每次都写出媒体查询,请将其分解为样式实用程序函数,以便在您想要响应的任何其他样式组件中使用。
const mediaQueries = ({ sm = '100%', md = '50%', lg = '25%'}) => css`
width: ${sm};
@media screen and (min-width: 40em) {
width: ${md};
}
@media screen and (min-width: 52em) {
width: ${lg};
}
`;
然后在任何样式的组件中导入和使用
const ResponsiveDiv = styled.div`
...
${mediaQueries()}
...
`;
const CustomResponsiveDiv = styled.div`
...
${mediaQueries({ _: '90%', md: '80%', lg: '70%'})}
...
`;