【问题标题】:Why is this flexbox media query not working?为什么这个 flexbox 媒体查询不起作用?
【发布时间】:2018-06-07 04:52:07
【问题描述】:

对此新手,请友善:)(请原谅草率的代码)我进行了搜索,并且已经在这里找到了帮助。一直在帮助重做一家 ebay 商店。试图让这个媒体查询与 flexbox 一起工作。据我了解,媒体查询不能内联使用,但可以在头部的样式标签内使用,而无需链接到外部 css。

这是布局的代码笔。我什至测试了其他媒体查询(现在有一个)并且它们有效。但是,一旦屏幕尺寸变小,我希望 flex 项目能够包裹到完整的 100% 宽度,而且它似乎不起作用。

我知道我的目标是正确的规则,因为它是在没有查询的情况下测试的:

.flex-item {
   width: 100%;
}

它做了我想要它做的事情......为什么背景颜色查询在 HTML 中有效,而 flex 查询却没有?

我确定这很愚蠢。

https://codepen.io/pmendola/pen/MXjwza

(为了简单起见,我删除了一些代码 - 只有少数 flex 规则在使用,就在 css 的顶部)

【问题讨论】:

  • 将 width:100% 改为 flex-basis:100%
  • 啊哈。那行得通,谢谢。如果你有时间,介意解释一下吗?为什么在媒体查询之外设置 width: 100% 与在其中使用 flex 基础规则的效果相同?

标签: css flexbox media-queries


【解决方案1】:

这是一个特异性问题。媒体查询不会为查询添加特异性,所以

@media screen and (max-width: 480px) {
    .flex-item { ...

.flex-item { ...

同等重要。结果是使用了样式表中最后声明的那个(在本例中为样式标记)。后面的声明会覆盖第一个。

您可以通过将媒体查询规则放在样式中比声明不在媒体查询中的规则更靠后的位置来纠正此问题。将其视为覆盖默认值的媒体特定样式。因此,它们需要在样式中稍后出现。

【讨论】:

    【解决方案2】:

    !important 添加到 flex 定义中将为您解决此问题。

    @media screen and (max-width: 480px) {
      body {
        background-color: yellow;
        }
        .flex-item {
          width: 100% !important;
          margin: 0 auto;
        }     
    }
    

    这是什么意思?

    您需要一种更具体的样式,该样式仅为移动屏幕定义并附加到元素上。 More Info

    【讨论】:

    • 我强烈反对在这里使用!important。虽然 !important 旨在覆盖特定规则,但在这种情况下没有必要,并且可能会在以后引起问题。
    • 我明白了,谢谢,是的,这也有效。因此,如果我在 flex 项中的 html 中添加了一个 ID,并使用了宽度,那也可以达到我想象的效果。谢谢!
    • 我同意,我不提倡使用!important,而是展示如何找出我们在这里遇到的特异性问题。
    猜你喜欢
    • 2016-11-14
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2020-07-03
    • 2016-07-29
    相关资源
    最近更新 更多