是否可以在样式化组件内使用样式系统的断点?

时间:2019-08-20 20:02:39

标签: css reactjs media-queries styled-components rebass

我想在样式化组件内部使用样式化系统的断点和大小调整机制。

当前,我必须使用'react-media'来解决我的问题,但是此解决方案带有大量的代码重复。这是我当前基于屏幕尺寸设置StyledComponent边框半径的解决方案:

import React from 'react'
import styled from 'styled-components'
import theme from '../../theme'
import Media from 'react-media'

const StyledImg = styled.img`
  border-radius: ${props => (props.size / 4)};
`

function ProfileImage (props) {
  const breakpoint = theme.breakpoints[0]

  return <Media query={`(min-width: ${breakpoint})`}>
      {matches =>
        matches ? (
        <StyledImg size={props.size[1]} src={props.src} />
      ) : (
        <StyledImg size={props.size[0]} src={props.src} />
      )
    }
  </Media>
}

function ProfileCard (props) {
  return <Box bg='grey' width={1}>
    <ProfileImage width={[10, 20]} src={props.src}>
  </Box>
}

export default ProfileImage

是否可以获得当前的断点索引? 我可以这样写吗?

const StyledImg = styled.img`
  border-radius: ${props => (props.size[theme.currentBreakpointIndex] / 4)};
`

function ProfileImage (props) {
  return <StyledImg {...props} />
}

function ProfileCard (props) {
  return <Box bg='grey' width={1}>
    <ProfileImage size={[10, 20]} src={props.src}>
  </Box>
}

export default ProfileImage

1 个答案:

答案 0 :(得分:0)

阅读this时,他们建议您将断点注入查询并将其放入主题中。然后您就不能像这样访问它们:

styled.div`
   ${({theme: {mediaQueries: {small}}}) => small} {
       color: red;
   }
`

但是此解决方案使用css更改样式(但是我认为应该这样做)。