热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

Howdowespaceoutmediaqueriesaccuratelytoavoidoverlap?如何准确地划分媒体查询以避免重叠?Forexample,ifwe

How do we space out media queries accurately to avoid overlap?

如何准确地划分媒体查询以避免重叠?

For example, if we consider the code:

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

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

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

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

What will happen, across all supporting browsers, at exactly 20em, and 45em?

在所有支持的浏览器中,在20em和45em之间会发生什么?

I've seen people use: things like 799px and then 800px, but what about a screen width of 799.5 px? (Obviously not on a regular display, but a retina one?)

我曾见过人们使用:799px和800px,但如果屏幕宽度是799.5 px呢?(显然不是在普通的显示器上,而是在视网膜上?)


I'm most curious about the answer here considering the spec.

考虑到这个规范,我最好奇的是答案。

2 个解决方案

#1


79  

What are the rules for CSS media query overlap?

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

Cascade.

级联。

@media rules are transparent to the cascade, so when two or more @media rules match at the same time, the browser should apply the styles in all the rules that match, and resolve the cascade accordingly.1

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

What will happen, across all supporting browsers, at exactly 20em, and 45em?

在所有支持的浏览器中,在20em和45em之间会发生什么?

At exactly 20em wide, your first and second media query will both match. Browsers will apply styles in both @media rules and cascade accordingly, so if there are any conflicting rules that need to be overridden, the last-declared one wins (accounting for specific selectors, !important, etc). Likewise for the second and third media query when the viewport is exactly 45em wide.

恰好在20em宽,您的第一个和第二个媒体查询将同时匹配。浏览器将在@media规则和cascade中应用样式,因此如果有任何冲突的规则需要重写,最后声明的规则将获胜(考虑到特定的选择器,重要的等等)。同样,当viewport恰好为45em宽时,第二个和第三个媒体查询也是如此。

Considering your example code, with some actual style rules added:

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

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

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

When the browser viewport is exactly 20em wide, both of these media queries will return true. By the cascade, display: block overrides display: none and float: left will apply on any element with the class .sidebar.

当浏览器的viewport恰好为20em宽时,这两个媒体查询都将返回true。通过级联,display: block覆盖display: none和float: left将应用于具有.侧栏类的任何元素。

You can think of it as applying rules as if the media queries weren't there to begin with:

你可以把它看作是应用规则,就好像媒体查询一开始就不存在一样:

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

Another example of how the cascade takes place when a browser matches two or more media queries can be found in this other answer.

当浏览器匹配两个或两个以上的媒体查询时,可以在这个答案中找到另一个例子,说明层叠是如何发生的。

Be warned, though, that if you have declarations that don't overlap in both @media rules, then all of those rules will apply. What happens here is a union of the declarations in both @media rules, not just the latter completely overruling the former... which brings us to your earlier question:

但是,请注意,如果您的声明在@media规则中没有重叠,那么所有这些规则都将适用。这里发生的是两个@media规则中声明的联合,而不仅仅是后者完全推翻前者……这就引出了你之前的问题:

How do we space out media queries accurately to avoid overlap?

如何准确地划分媒体查询以避免重叠?

If you wish to avoid overlap, you simply need to write media queries that are mutually exclusive.

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

Remember that the min- and max- prefixes mean "minimum inclusive" and "maximum inclusive"; this means (min-width: 20em) and (max-width: 20em) will both match a viewport that is exactly 20em wide.

记住,最小和最大前缀表示“最小包含”和“最大包含”;这意味着(最小宽度:20em)和(最大宽度:20em)都将匹配刚好20em宽的视点。

It looks like you already have an example, which brings us to your last question:

看起来你已经有了一个例子,这就引出了你的最后一个问题:

I've seen people use: things like 799px and then 800px, but what about a screen width of 799.5 px? (Obviously not on a regular display, but a retina one?)

我曾见过人们使用:799px和800px,但如果屏幕宽度是799.5 px呢?(显然不是在普通的显示器上,而是在视网膜上?)

This I'm not entirely sure; all pixel values in CSS are logical pixels, and I've been hard pressed to find a browser that would report a fractional pixel value for a viewport width. I've tried experimenting with some iframes but haven't been able to come up with anything.

我不完全确定;CSS中的所有像素值都是逻辑像素,我一直在努力寻找一个浏览器,它会报告一个视点宽度的分数像素值。我尝试了一些iframe,但还没有找到任何解决方案。

From my experiments it would seem Safari on iOS rounds all fractional pixel values to ensure that either one of max-width: 799px and min-width: 800px will match, even if the viewport is really 799.5px (which apparently matches the former).

从我的实验来看,Safari在iOS上对所有的分数像素值进行遍历,以确保最大宽度:799px和最小宽度:800px能够匹配,即使viewport真的是799.5px(显然与前者匹配)。


1 Although none of this is explicitly stated in either the Conditional Rules module or the Cascade module (the latter of which is currently slated for a rewrite), the cascade is implied to take place normally, since the spec simply says to apply styles in any and all @media rules that match the browser or media.

1虽然这是显式声明的条件规则模块或级联模块(后者目前定于重写),通常隐含发生级联,因为规范只是说风格适用于任何和所有@media规则匹配的浏览器或媒体。

#2


2  

calc() can be use to work around this (min-width: 50em and max-width: calc(50em - 1px) will be correctly stacked), but poor browser support and i would not recommending it.

可以使用calc()来解决这个问题(min-width: 50em和max-width: calc(50em - 1px)将被正确地堆叠),但是浏览器支持很差,我不会推荐它。

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

Infos:

信息:

  • https://developer.mozilla.org/en-US/docs/CSS/calc
  • https://developer.mozilla.org/en-US/docs/CSS/calc
  • http://caniuse.com/calc
  • http://caniuse.com/calc
  • http://www.w3.org/TR/css3-values/#calc
  • http://www.w3.org/TR/css3-values/ calc

Some others mentioned, not using the em unit would help in your queries stacking.

有些人提到,不使用em单元将有助于查询的堆叠。


推荐阅读
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 该问题可能由守护进程配置不当引起,例如未识别的JVM选项或内存分配不足。建议检查并调整JVM参数,确保为对象堆预留足够的内存空间(至少1572864KB)。此外,还可以优化应用程序的内存使用,减少不必要的内存消耗。 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
  • 本文探讨了在使用 Outlook 时遇到的一个常见问题:无法加载 SAVCORP90 插件,导致软件功能受限。该问题通常表现为在启动 Outlook 时会收到错误提示,影响用户的正常使用体验。文章详细分析了可能的原因,并提供了多种解决方法,包括检查插件兼容性、重新安装插件以及更新 Outlook 版本等。通过这些步骤,用户可以有效解决这一问题,恢复 Outlook 的正常运行。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
author-avatar
shahua1111
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有