@media - CSS(层叠样式表) 编辑

@media CSS @规则 可用于基于一个或多个 媒体查询 的结果来应用样式表的一部分。 使用它,您可以指定一个媒体查询和一个CSS块,当且仅当该媒体查询与正在使用其内容的设备匹配时,该CSS块才能应用于该文档。 注: 在JavaScript中,可以使用CSSMediaRuleCSS对象模型接口访问使用@media创建的规则。

语法

@media 规则可置于您代码的顶层或位于其它任何@条件规则组内。

/* At the top level of your code */
@media screen and (min-width: 900px) {
  article {
    padding: 1rem 3rem;
  }
}

/* Nested within another conditional at-rule */
@supports (display: flex) {
  @media screen and (min-width: 900px) {
    article {
      display: flex;
    }
  }
}

有关媒体查询语法的讨论,请参阅使用媒体查询

正式语法

@media <media-query-list> {
  <group-rule-body>
}

where
<media-query-list> = <media-query>#

where
<media-query> = <media-condition> | [ not | only ]? <media-type> [ and <media-condition-without-or> ]?

where
<media-condition> = <media-not> | <media-and> | <media-or> | <media-in-parens>
<media-type> = <ident>
<media-condition-without-or> = <media-not> | <media-and> | <media-in-parens>

where
<media-not> = not <media-in-parens>
<media-and> = <media-in-parens> [ and <media-in-parens> ]+
<media-or> = <media-in-parens> [ or <media-in-parens> ]+
<media-in-parens> = ( <media-condition> ) | <media-feature> | <general-enclosed>

where
<media-feature> = ( [ <mf-plain> | <mf-boolean> | <mf-range> ] )
<general-enclosed> = [ <function-token> <any-value> ) ] | ( <ident> <any-value> )

where
<mf-plain> = <mf-name> : <mf-value>
<mf-boolean> = <mf-name>
<mf-range> = <mf-name> [ '<' | '>' ]? '='? <mf-value> | <mf-value> [ '<' | '>' ]? '='? <mf-name> | <mf-value> '<' '='? <mf-name> '<' '='? <mf-value> | <mf-value> '>' '='? <mf-name> '>' '='? <mf-value>

where
<mf-name> = <ident>
<mf-value> = <number> | <dimension> | <ident> | <ratio>

媒体特性

媒体特性Media features)描述了 user agent、输出设备,或是浏览环境的具体特征。媒体特性表达式是完全可选的,它负责测试这些特性或特征是否存在、值为多少。每条媒体特性表达式都必须用括号括起来。

名称简介备注
any-hover是否有任何可用的输入机制允许用户(将鼠标等)悬停在元素上?在 Media Queries Level 4 中被添加。
any-pointer可用的输入机制中是否有任何指针设备,如果有,它的精度如何?在 Media Queries Level 4 中被添加。
aspect-ratio视窗(viewport)的宽高比
color输出设备每个像素的比特值,常见的有 8、16、32 位。如果设备不支持输出彩色,则该值为 0
color-gamut用户代理和输出设备大致程度上支持的色域在 Media Queries Level 4 中被添加。
color-index输出设备的颜色查询表(color lookup table)中的条目数量,如果设备不使用颜色查询表,则该值为 0
device-aspect-ratio 输出设备的宽高比已在 Media Queries Level 4 中被弃用。
device-height 输出设备渲染表面(如屏幕)的高度已在 Media Queries Level 4 中被弃用。
device-width 输出设备渲染表面(如屏幕)的宽度已在 Media Queries Level 4 中被弃用。
display-mode

应用程序的显示模式,如web app的manifest中的display 成员所指定

在 Web App Manifest spec被定义.
forced-colors检测是user agent否限制调色板在 Media Queries Level 5 中被添加。
grid输出设备使用网格屏幕还是点阵屏幕?
height视窗(viewport)的高度
hover

主要输入模式是否允许用户在元素上悬停

在 Media Queries Level 4 中被添加。
inverted-colorsuser agent或者底层操作系统是否反转了颜色在 Media Queries Level 5 中被添加。
light-level环境光亮度在 Media Queries Level 5 中被添加。
monochrome

输出设备单色帧缓冲区中每个像素的位深度。如果设备并非黑白屏幕,则该值为 0

orientation视窗(viewport)的旋转方向
overflow-block

输出设备如何处理沿块轴溢出视窗(viewport)的内容

在 Media Queries Level 4 中被添加。
overflow-inline

沿内联轴溢出视窗(viewport)的内容是否可以滚动?

在 Media Queries Level 4 中被添加。
pointer

主要输入机制是一个指针设备吗?如果是,它的精度如何?

在 Media Queries Level 4 中被添加。
prefers-color-scheme探测用户倾向于选择亮色还是暗色的配色方案在 Media Queries Level 5 中被添加。
prefers-contrast探测用户是否有向系统要求提高或降低相近颜色之间的对比度在 Media Queries Level 5 中被添加。
prefers-reduced-motion用户是否希望页面上出现更少的动态效果在 Media Queries Level 5 中被添加。
prefers-reduced-transparency用户是否倾向于选择更低的透明度在 Media Queries Level 5 中被添加。
resolution输出设备的像素密度(分辨率)
scan输出设备的扫描过程(适用于电视等)
scripting探测脚本(例如 JavaScript)是否可用在 Media Queries Level 5 中被添加。
update输出设备更新内容的渲染结果的频率在 Media Queries Level 4 中被添加。
width视窗(viewport)的宽度,包括纵向滚动条的宽度

示例

@media print {
  body { font-size: 10pt; }
}

@media screen {
  body { font-size: 13px; }
}

@media screen, print {
  body { line-height: 1.2; }
}

@media only screen
  and (min-width: 320px)
  and (max-width: 480px)
  and (resolution: 150dpi) {
    body { line-height: 1.4; }
}

媒体查询第4级引入了一种新的范围语法,在测试接受范围的任何特性时允许更简洁的媒体查询,如下面的示例所示:

@media (height > 600px) {
    body { line-height: 1.4; }
}

@media (400px <= width <= 700px) {
    body { line-height: 1.4; }
}

更多示例,请查看使用媒体查询

可访问性

为了最好地调整网站文本大小,当您需要<length> 进行媒体查询时,请使用em

empx都是有效单位,但如果用户更改浏览器文本大小,em的效果会更好。

考虑使用4级媒体查询来改善用户体验。 例如,使用prefers-reduced-motion检测用户是否已请求系统最小化其使用的动画或动作量。

安全

由于媒体查询可以洞察用户正在使用的设备的功能(以及扩展的功能和设计),因此有可能滥用它们来构造“指纹”来识别设备,或者至少 将其分类为某些细节,这可能是用户不希望看到的。

由于存在这种潜力,浏览器可能会选择以某种方式捏造返回的值,以防止它们被用来精确地标识计算机。 浏览器可能还会在此区域提供其他措施。 例如,如果启用了Firefox的“抵抗指纹”设置,则许多媒体查询会报告默认值,而不是代表实际设备状态的值。

规范

SpecificationCommentFeedback
Media Queries Level 5
@media
Reinstates light-level, inverted-colors and Custom Media Queries, which were removed from Level 4.
Adds prefers-reduced-motion, prefers-reduced-transparency, prefers-contrast, and prefers-color-scheme media features.
CSS Working Group drafts GitHub issues
CSS Conditional Rules Module Level 3
@media
Defines the basic syntax of the @media rule.CSS Working Group drafts GitHub issues
Media Queries Level 4
@media

Adds scripting, pointer, hover, update, overflow-block, and overflow-inline media features.
Deprecates all media types except for screen, print, speech, and all.
Makes the syntax more flexible by adding, among other things, the or keyword.

CSS Working Group drafts GitHub issues
Media Queries
@media
CSS Level 2 (Revision 1)
@media
Initial definition.

浏览器兼容性

BCD tables only load in the browser

在本页的这些有关浏览器的兼容性数据都是由结构数据产生的. 如果你想要提供更多数据, 请访问: https://github.com/mdn/browser-compat-data .向我们发送你的添加请求.

更多资料

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:86 次

字数:26704

最后编辑:7年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文