【问题标题】:Non-matching media query overriding default styles不匹配的媒体查询覆盖默认样式
【发布时间】:2015-11-26 02:46:51
【问题描述】:

我在这里查看了类似的问题,但没有找到合适的答案,所以请原谅我这个问题一开始可能看起来与这里的其他问题重复。

我的屏幕分辨率是 1366px 宽

我有默认样式,然后是样式表末尾的几个媒体查询,顺序如下:

@media only screen and (max-width:1920px) {
}

@media only screen and (max-width:1680px), only screen and (max-device-width: 1680px)  {
}

@media only screen and (max-width:1280px), only screen and (max-device-width: 1280px)  {
}

@media only screen and (max-width:1024px), only screen and (max-device-width: 1024px)  {
}

@media only screen and (max-width: 800px), only screen and (max-device-width: 800px) {
}

@media screen and (min-device-width: 768px) and (max-device-width: 1024px){
}

在我的机器上,正在应用第一个媒体查询的样式(最大宽度:1920px)。当我在 Firebug 中检查时,它给了我与第一个媒体查询中的声明一致的 # 行。

这发生在多个浏览器(Firefox、Chrome)上

但是,我的视口只有 1366px 宽 - 所以,我希望 max-width:1280px 或 max-width:1680px 匹配,而不是 1920px。

当我将大小调整为 1024x768 或 800x600 时,会应用正确的媒体查询样式。

我做错了什么?

我查找了任何丢失的括号闭包,但没有找到。我已经使用 W3C CSS 验证器服务进行了验证,并且检查为正确,没有发现错误。

【问题讨论】:

  • max-width:1680px 中的样式值是否覆盖 max-width:1920px 中的样式值?
  • @kittykittybangbang 是的。在每个查询中,我定义了body, input{ } 字体大小、.inner { } 宽度和其他几个类高度。相同的样式值具有不同的属性,具体取决于查询
  • 你能交换你的查询从最小到最大吗?
  • 你能发个小提琴之类的吗?
  • 哦,这就是为什么,傻! :) 一旦您在max-width:1920px 定义了#feature height,它就不会改变,除非您用后续查询之一覆盖它。您的 1366px 宽屏幕确实属于 max-width:1920px 的类别(小于或等于 1920px),因此 max-width:1920px 块运行。较小的max-widths 将覆盖那个当且仅当他们明确地重新定义它。

标签: css media-queries


【解决方案1】:

您想使用min-width 而不是max-width。由于您的查询适用于不超过1920px 宽的任何屏幕,因此当您的屏幕不大于1366px 宽时,它始终会被应用。 max-width == <=, min-width == >=

/* apply these selectors when the width is equal to or greater than 1920px */
@media only screen and (min-width:1920px) {
}

【讨论】:

  • 但是由于它们是级联样式表——最后编写的样式不应该覆盖事先编写的样式吗?虽然我认为 OP 可以写得更清楚,但我不明白为什么会出现这样的问题......?
  • OP 说正在应用来自 1920px 选择器的规则,并且不明白为什么他们的屏幕小于 1920px。可能会有更多事情发生,但如果没有演示,我看不出其他任何可能有问题的地方。
  • 演示肯定会有所帮助——但你看到 cmets b/t OP 和我了吗?
  • 感谢您,结合其他答案,这就是解决方案。除了min/max-width 之外,我还使用min/max-device-width 似乎是一个明显的问题。显然我需要在这里进行一些额外的研究。
【解决方案2】:

问题在于你的逻辑。

您的第一个查询声明最大宽度:1920 像素。事实上,因为你的桌面是 1366px,它小于 1920px,所以它是一个有效的查询。在您的 1680 像素之后,请考虑这是一个问题。

我建议重新排序并首先从最小、最具约束力的查询开始:

@media screen and (min-device-width: 768px) and (max-device-width: 1024px){
}

@media only screen and (max-width: 800px), only screen and (max-device-width: 800px) {
}

@media only screen and (max-width:1024px), only screen and (max-device-width: 1024px)  {
}

@media only screen and (max-width:1280px), only screen and (max-device-width: 1280px)  {
}

@media only screen and (max-width:1680px), only screen and (max-device-width: 1680px)  {
}

@media only screen and (max-width:1920px) {
}

更好的方法是对所有查询使用 min-width:

@media screen and (min-device-width: 768px) and (max-device-width: 1024px){
}

@media only screen and (min-width: 800px), only screen and (min-device-width: 800px) {
}

@media only screen and (min-width:1024px), only screen and (min-device-width: 1024px)  {
}

@media only screen and (min-width:1280px), only screen and (min-device-width: 1280px)  {
}

@media only screen and (min-width:1680px), only screen and (min-device-width: 1680px)  {
}

@media only screen and (min-width:1920px) {
}

作为最佳实践,这里是 Bootstraps 查询:

/*==================================================
=            Bootstrap 3 Media Queries             =
==================================================*/




    /*==========  Mobile First Method  ==========*/

    /* Custom, iPhone Retina */ 
    @media only screen and (min-width : 320px) {

    }

    /* Extra Small Devices, Phones */ 
    @media only screen and (min-width : 480px) {

    }

    /* Small Devices, Tablets */
    @media only screen and (min-width : 768px) {

    }

    /* Medium Devices, Desktops */
    @media only screen and (min-width : 992px) {

    }

    /* Large Devices, Wide Screens */
    @media only screen and (min-width : 1200px) {

    }



    /*==========  Non-Mobile First Method  ==========*/

    /* Large Devices, Wide Screens */
    @media only screen and (max-width : 1200px) {

    }

    /* Medium Devices, Desktops */
    @media only screen and (max-width : 992px) {

    }

    /* Small Devices, Tablets */
    @media only screen and (max-width : 768px) {

    }

    /* Extra Small Devices, Phones */ 
    @media only screen and (max-width : 480px) {

    }

    /* Custom, iPhone Retina */ 
    @media only screen and (max-width : 320px) {

    }

【讨论】:

  • 但是下一个查询也是一个有效的查询,并且会覆盖上一个查询的值。对吗?
  • @kittykittybangbang 是的,这取决于所需的效果。为了获得最佳实践,我建议使用 Bootstrap 样式:scotch.io/quick-tips/…
  • 感谢您,我将所有内容更改为最小宽度并颠倒顺序(因此首先是平板电脑,然后是 800x600,一直到 1920 像素),但现在在 1024x768 上应用了我的 1200x 样式??
  • 当我删除 min-device-width 声明时,只保留 min-width,这种方法似乎很有效
猜你喜欢
  • 2023-03-18
  • 2018-03-06
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 2012-02-16
  • 2016-08-22
  • 1970-01-01
相关资源
最近更新 更多