1. 为什么需要媒体查询
在React项目中使用styled-components时,媒体查询(Media Queries)是实现响应式设计的关键技术。随着移动设备使用率的持续攀升,现代Web应用必须能够适配从手机到桌面电脑的各种屏幕尺寸。
传统CSS中我们通常在全局样式文件里写媒体查询,但在组件化开发中,这种方式会导致样式逻辑分散。styled-components的核心理念是"CSS-in-JS",即将样式与组件紧密耦合。在这种模式下,媒体查询也应该与组件共存,而不是孤立存在。
我在多个企业级React项目中实践发现,将媒体查询直接写在styled-components中有三大优势:
- 组件样式自成一体,便于维护和复用
- 可以访问组件props实现动态响应
- 避免全局样式污染和优先级冲突
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. styled-components中媒体查询基础写法
2.1 模板字符串标准写法
最基础的媒体查询写法是使用CSS模板字符串:
javascript复制const Container = styled.div`
width: 100%;
@media (min-width: 768px) {
width: 750px;
}
@media (min-width: 992px) {
width: 970px;
}
`;
这种写法与传统CSS媒体查询语法几乎一致,只是嵌套在styled-components的模板字符串中。我在实际项目中总结出几个关键点:
- 断点选择:推荐使用Bootstrap的经典断点(576px、768px、992px、1200px)作为基准
- 移动优先:先写默认样式(小屏幕),再用min-width向上适配
- 单位选择:优先使用rem/em而非px,确保更好的可访问性
2.2 使用css辅助函数
当需要复用媒体查询时,可以使用styled-components的css辅助函数:
javascript复制import { css } from 'styled-components';
const breakpoints = {
sm: '576px',
md: '768px',
lg: '992px',
xl
