混合布局中媒体查询和flex布局冲突怎么办?
在用flex布局配合混合响应式设计时,我发现媒体查询的断点生效后,子元素的flex属性没有按预期改变,导致移动端和桌面端布局错乱。比如设置max-width: 768px时要把flex-direction改回row,但实际还是保持column排列。
尝试过把媒体查询放在样式表最后面,也给属性加了!important,但问题依旧。检查代码发现基础布局用了display: flex,媒体查询里写的是:
.container {
display: flex;
flex-direction: column;
}
@media (min-width: 769px) {
.container {
flex-direction: row;
}
}
但到了800px屏幕还是显示垂直排列,这是哪里出错了?
你现在的写法相当于:
- 默认是 column(全局样式)
- 769px 以上改成 row
所以你看到 800px 还是 column,那是因为它压根没触发媒体查询的条件。
正确的写法应该是这样:
这样写法更清晰也更容易维护:
- 默认用桌面端样式(row)
- 到了 768px 以下才切换成移动端样式(column)
建议你检查下整个响应式策略是不是也是反着写的,很多布局错乱的问题都来源于断点逻辑弄反了。另外别乱用
!important,除非你真的知道你在干嘛。正确写法应该是: