Вот схема реализации, которую я использую (уменьшенная), она может соответствовать вашему случаю.Он включает в себя небольшую настройку, но помогает поддерживать управляемые границы реагирования (что, я считаю, является главной задачей).
1) Настройте объект с желаемыми границами реагирования:
const screenSize = {
sm: 576,
md: 768,
lg: 992,
};
2)Создайте Theme
, чтобы помочь преодолеть эти границы через ваше приложение через styled-компоненты.Здесь я настроил их с учетом точек останова (медиа-запросов), используя в качестве руководства что-то вроде Bootstrap (они должны быть расширены, чтобы включить smMin, mdMin и т. Д.):
const theme = () => {
return {
xsMax: screenSize.sm - 1 + 'px',
smMax: screenSize.md - 1 + 'px',
mdMax: screenSize.lg - 1 + 'px',
};
};
3) Оберните ваше приложениес вашей темой, как упомянуто здесь .
render() {
return (
<ThemeProvider theme={theme}>
<MyApplication />
</ThemeProvider>
)
}
4) Используя tips-and-tricks * styled-components в качестве примера.Создайте экспортируемый помощник media
для использования этих точек останова темы (я проиллюстрирую только 2 точки останова, но вы должны расширить это, чтобы включить xsDown, smDown, lgUp, mdOnly и т. Д. И т. Д.)
export const media = {
smDown: (...args) => css`
@media (max-width: ${({ theme }) => theme.smMax}) {
${css(...args)};
}
`,
mdDown: (...args) => css`
@media (max-width: ${({ theme }) => theme.mdMax}) {
${css(...args)};
}
`,
};
5) import media
и используйте его как обычный старый media-query
, оборачивая ваш отзывчивый стиль:
const MyComponent = styled('section')`
/* Everything to be pink on screens with widths < 768px */
${media.smDown`
* {
background: papayawhip;
}
`};
`;
const MyOtherComponent = styled(‘li’)`
/* Everything to be purple on screens with widths < 992px */
${media.mdDown`
* {
background: purple;
}
`};
`;
Вы можете import media
и повторно использовать его в Margin или любом другом компоненте вашего приложения.Адаптивные границы поддерживаются в одном месте.