当前位置: 首页 > 面试题库 >

CSS媒体查询重叠的规则是什么?

傅雪松
2023-03-14
问题内容

我们如何准确地间隔媒体查询以避免重叠?

例如,如果我们考虑以下代码:

@media (max-width: 20em) {
    /* for narrow viewport */
}

@media (min-width: 20em) and (max-width: 45em) {
    /* slightly wider viewport */
}

@media (min-width: 45em) {
    /* everything else */
}

在所有支持的浏览器上,分别以20em和45em会发生什么?

我见过人们在使用:像799px然后是800px之类的东西,但是屏幕宽度为799.5 px呢?(显然不是常规显示器,而是视网膜显示器?)

考虑到规格,我对此最好奇。


问题答案:

CSS媒体查询重叠的规则是什么?

级联。

@media规则对级联是透明的,因此当两个或多个@media规则同时匹配时,浏览器应在所有匹配的规则中应用样式,并相应地解析级联。1个

在所有支持的浏览器上,分别以20em和45em会发生什么?

恰好在20em宽处,您的第一个和第二个媒体查询都将匹配。浏览器将在这两个@media规则中应用样式,并相应地进行级联,因此,如果有任何冲突的规则需要被覆盖,则最后声明的一个将获胜(考虑特定的选择器!important等)。当视口恰好为45em宽时,对于第二个和第三个媒体查询也是如此。

考虑您的示例代码,并添加了一些实际的样式规则:

@media (max-width: 20em) {
    .sidebar { display: none; }
}

@media (min-width: 20em) and (max-width: 45em) {
    .sidebar { display: block; float: left; }
}

当浏览器视口恰好为20em宽时,这两个媒体查询都将返回true。通过级联,display: block覆盖display: nonefloat: left适用与类的任何元素.sidebar

您可以将其视为应用规则,就好像媒体查询并非始于此:

.sidebar { display: none; }
.sidebar { display: block; float: left; }

另一个答案中,可以找到当浏览器匹配两个或多个媒体查询时如何进行级联的另一个示例。

但是请注意,如果您的声明在两个规则中_都不_重叠@media,那么所有这些规则都将适用。这里发生的是两个规则中声明的并集@media,而不仅仅是后者完全推翻了前者……这将我们带到了您前面的问题:

我们如何准确地间隔媒体查询以避免重叠?

如果希望避免重叠,则只需要编写相互排斥的媒体查询。

请记住,min-max-前缀表示“最小包含”和“最大包含”;这意味着(min-width: 20em)并且(max-width:20em)都将匹配正好为20em的视口。

看来您已经有一个示例,将我们带到您的最后一个问题:

我见过人们在使用:像799px然后是800px之类的东西,但是屏幕宽度为799.5 px呢?(显然不是常规显示器,而是视网膜显示器?)

我不太确定。CSS中的所有像素值都是逻辑像素,因此很难找到能够报告视口宽度小数像素值的浏览器。我尝试过尝试一些iframe,但还没有提出任何建议。

从我的实验看来,iOS上的Safari似乎会舍入所有小数像素值以确保max-width: 799px和之一min-width: 800px匹配,即使视口确实为799.5px(显然与前者匹配)也是如此。

1 尽管“ 条件规则”模块或“层叠”模(目前已计划重写)中均未明确说明,但是隐含了级联正常发生的情况,因为该规范只是说要在任何样式中应用样式以及@media与浏览器或媒体匹配的所有规则。



 类似资料:
  • 主要内容:1. 媒体类型,2. 媒体特性,3. 逻辑操作符,4. 定义媒体查询随着移动设备的快速普及,用户不再只是通过传统的电脑系来浏览 Web 内容,越来越多的用户开始使用各种尺寸的智能手机、平板电脑或者其它设备来浏览 Web 内容,为了确保使用不同设备的用户都能拥有不错的体验就需要用到媒体查询。 媒体查询是 CSS 样式表最重要的功能之一,所谓媒体查询指的就是根据不同的媒体类型(设备类型)和条件来区分各种设备(例如:电脑、手机、平板电脑、盲文设备等),并为它们分别定义不

  • 问题内容: 级联正是CSS变得特别而强大的原因。但在媒体查询的情况下,重叠 可 似乎有问题。 考虑以下CSS(CSS媒体查询重叠的连续规则): 因此,当屏幕正好为45em宽时,将根据标准CSS级联来处理45em处的重叠: 所有定义都将首先应用, 并将在此之后全部应用。 请考虑以下两个条件: 通常,所有文本都是,但是 查询A 是唯一的并且具有。 由于 查询B 适用于较大的视口,因此其文本具有CSS

  • 我想将此条件转换为CSS媒体查询: 编辑: 事实上,我想在这种情况下瞄准Ipad: 因此,如果是任何设备和当前宽度,则应应用CSS 谢谢

  • 我目前正在努力获得一个CSS网格来处理一些较小屏幕尺寸的媒体查询。我基本上有一个两行三列的网格,在较小的屏幕尺寸下,它可以向下延伸到三行两列。我想让它进入一个网格,在一个电话大小的屏幕上有6行和一个主列。以下是我目前的代码: } 这在很大程度上是可行的。然而,出于某种奇怪的原因,尽管我在上面做了一些粗制滥造的努力,但这些框并没有集中在较小的屏幕上。下面是完整的代码笔来说明我的问题:https://

  • 问题内容: iPhone 5的屏幕更长,无法捕捉到我网站的移动视图。iPhone 5新增了哪些响应式设计查询,可以与现有iPhone查询结合使用吗? 我当前的媒体查询是这样的: 问题答案: 另一个有用的媒体功能是。 请注意, iPhone 5没有16:9的宽高比 。实际上是40:71。 iPhone <5: iphone 5: iPhone 6: iPhone 6 Plus: iPad:

  • 问题内容: 最近,我一直在设计响应速度更快的网站,并且经常使用CSS媒体查询。我注意到的一种模式实际上是定义媒体查询的顺序。我没有在每个浏览器中都进行过测试,只是在Chrome上进行了测试。有这种行为的解释吗?有时,当您的网站无法正常运行时,它会令人沮丧,并且您不确定这是查询还是编写查询的顺序。 这是一个例子: HTML CSS: 但是,如果我最后一次为1024x600编写查询,浏览器将忽略它,并