【问题标题】:CSS: media queries to match width < x and width >= x. Weird behaviorCSS:媒体查询以匹配宽度 < x 和宽度 >= x。奇怪的行为
【发布时间】:2013-06-15 05:06:45
【问题描述】:

我正在进行自适应网站设计,并正在使用特定的 css 媒体查询来匹配较小的显示宽度。

对于我正在使用的小型显示器:

@media screen and (max-width: 34em) {}

我正在使用更大的显示器:

@media screen and (min-width: 34em) {}

到目前为止,这工作得很好。但是,我注意到窗口有一定宽度,两个媒体查询的样式似乎混合在一起。 (绝对不是没有应用查询的情况。)这肯定是一个边缘情况,但可能有人在那里用特定的窗口或屏幕宽度进行冲浪,并且看到一个看起来很奇怪的页面。因此,我想知道为什么会存在这个问题以及我能做些什么。 我在 Mac 上的 Safari 和 Firefox 上都试过这个,都显示出相同的效果。

【问题讨论】:

    标签: css media-queries


    【解决方案1】:

    但是,我注意到窗口有一定宽度,两个媒体查询的样式似乎混合在一起。 (绝对不是没有应用查询的情况。)

    正确;取而代之的是,both 都被应用了,此时视口的宽度正好等于 34 em。然后发生的情况是级联照常适用。请参阅我对以下问题的回答以获得解释:

    What are the rules for CSS media query overlap?

    针对两种屏幕尺寸范围处理此问题的最简单方法是利用级联,但与您所拥有的不同:通常为一种屏幕尺寸编写规则,并且仅包含针对另一种屏幕尺寸的媒体查询作为显示在dwreck08's answer

    否则,如果您希望一次只应用一个规则而不依赖级联来覆盖您的样式,请仅使用 min-widthmax-width,并在另一条规则中使用 not 否定它关键词。例如,您可以使用以下任一方式:

    @media screen and (max-width: 34em) {}     /* Smaller screen sizes */
    @media not screen and (max-width: 34em) {} /* Larger screen sizes */
    

    或者这个:

    @media not screen and (min-width: 34em) {} /* Smaller screen sizes */
    @media screen and (min-width: 34em) {}     /* Larger screen sizes */
    

    顺序无关紧要,因为not 使这些规则互斥——至少在理解关键字的浏览器中,据我所知,它们都支持媒体查询。

    我对这个问题的回答是对上述问题的后续回答,它提供了另一种解释:

    How can I avoid media query overlap?

    【讨论】:

      【解决方案2】:

      看起来您只需要两种可能的样式。因此,我认为您应该能够删除最大宽度查询并像往常一样设置样式以达到预期的结果。

        #divName {
        properties: here;
      }
      
      @media screen and (min-width: 34em) {
        #divName {
         properties: here;
         }
      }
      

      【讨论】:

      • 可能这只是我这边缺乏 CSS 知识,但是如果我用特定样式覆盖大显示器的一般样式,这不会起作用吗? IE。除非被覆盖,否则通用样式仍然适用?
      • 因为你有一个相同宽度的最大查询和一个最小查询,所以只有两种结果可能发生。如果您使最小值小于最大值,它们将不会重叠。那么你可以有三种可能,小屏、普通屏(无查询)和大屏。
      • 可能我的问题不是很清楚。我想要正好有 2 个设计。一种用于大窗户,一种用于小窗户。但我最终得到了一个用于小窗口,一个用于大窗口和一个奇怪的边缘案例,它只显示在特定的窗口大小 - 似乎你必须在像素精度内匹配宽度。我只是想摆脱那个愚蠢的边缘案例。但可能我需要采用移动优先的方法来消除这种副作用。不过很想知道为什么会发生这种情况..
      • 在这种情况下您只需要一个查询。无需任何查询即可为您的 div 设置样式。然后为您的手机添加一个最大宽度查询。这将告诉它将其样式设置为普通(大)屏幕,除非屏幕宽度小于指定的最大宽度。它变得混乱的原因是每个查询都是等值的宽度。当屏幕等于 34em 时,它不知道要遵循哪个查询。只使用一个查询就可以消除这种情况。
      • @dwreck08:它确实知道:它使用了both。这是标准行为。
      【解决方案3】:

      也许是因为您在 34em 处同时拥有最小宽度和最大宽度。因此,当屏幕大小正好是 34 em 时,两个媒体查询都处于活动状态。

      您应该尝试将一侧的值更改一个 em,看看它是如何工作的。

      @media screen and (max-width: 34em) {}
      @media screen and (min-width: 35em) {}
      

      【讨论】:

      • 那行不通。这将留下一个“空白”,其中没有任何样式处于活动状态。 34
      猜你喜欢
      • 2012-07-03
      • 2012-03-19
      • 1970-01-01
      • 2012-08-31
      • 2011-08-08
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多