媒体查询详解析

0.什么是媒体查询(Media Queries)

  • CSS媒体查询为你提供了一种应用CSS的方法,仅在浏览器和设备的环境与你指定的规则相匹配的时候CSS才会真的被应用
  • 媒体 指的就是各种设备 (移动设备, PC设备)
  • 查询 指的是要检测属于哪种设备
  • 媒体查询: 通过查询当前属于哪种设备, 让网页能够在不同的设备下正常的预览

1.媒体类型(media-type)

媒体类型(Media types)描述设备的一般类别。除非使用 not 或 only 逻辑操作符,媒体类型是可选的,并且会(隐式地)应用 all 类型。

  • all
    适用于所有设备。
  • print
    适用于在打印预览模式下在屏幕上查看的分页材料和文档。 (有关特定于这些格式的格式问题的信息,请参阅分页媒体。)
  • screen
    主要用于屏幕。
  • speech
    主要用于语音合成器。

注:常用类型即以上,废弃的不做叙述,防止误导。

2.媒体特性(Media features)

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

  • any-hover 是否有任何可用的输入机制允许用户(将鼠标等)悬停在元素上?

  • any-pointer 可用的输入机制中是否有任何指针设备,如果有,它的精度如何?

  • aspect-ratio 视窗(viewport)的宽高比

  • color 输出设备每个像素的比特值,常见的有 8、16、32 位。如果设备不支持输出彩色,则该值为 0

  • color-gamut 用户代理和输出设备大致程度上支持的色域

  • color-index 输出设备的颜色查询表(color lookup table)中的条目数量,如果设备不使用颜色查询表,则该值为 0

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

  • forced-colors 检测是user agent否限制调色板

  • grid 输出设备使用网格屏幕还是点阵屏幕?

  • height 视窗(viewport)的高度

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

  • inverted-colors user agent或者底层操作系统是否反转了颜色

  • light-level 环境光亮度

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

  • orientation 视窗(viewport)的旋转方向

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

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

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

  • prefers-color-scheme 探测用户倾向于选择亮色还是暗色的配色方案

  • prefers-contrast 探测用户是否有向系统要求提高或降低相近颜色之间的对比度

  • prefers-reduced-motion 用户是否希望页面上出现更少的动态效果

  • prefers-reduced-transparency 用户是否倾向于选择更低的透明度

  • resolution 输出设备的像素密度(分辨率)

  • scan 输出设备的扫描过程(适用于电视等)

  • scripting 探测脚本(例如 JavaScript)是否可用

  • update 输出设备更新内容的渲染结果的频率

  • width 视窗(viewport)的宽度,包括纵向滚动条的宽度

3.逻辑操作符(logical operators)

操作符not、and、only和逗号(,)可以用来构建复杂的媒体查询

  • and
    and操作符用来把多个媒体属性组合起来,合并到同一条媒体查询中。只有当每个属性都为真时,这条查询的结果才为真
    [注意]在不使用not或only操作符的情况下,媒体类型是可选的,默认为all
    满足横屏以及最小宽度为700px的条件应用样式表
@media all and (min-width: 700px) and (orientation: landscape) { ... }

由于不使用not或only操作符的情况下,媒体类型是可选的,默认为 all,所以可以简写为

@media (min-width: 700px) and (orientation: landscape) { ... }
or

将多个媒体查询以逗号分隔放在一起;只要其中任何一个为真,整个媒体语句就返回真,相当于or操作符

满足最小宽度为700像素或是横屏的手持设备应用样式表

@media (min-width: 700px), handheld and (orientation: landscape) { ... }
  • not

not操作符用来对一条媒体查询的结果进行取反

[注意]not关键字仅能应用于整个查询,而不能单独应用于一个独立的查询

@media  not all and (monochrome) { ... }
//等价于
@media not (all and (monochrome)) { ... }

  • only
    only操作符表示仅在媒体查询匹配成功时应用指定样式。可以通过它让选中的样式在老式浏览器中不被应用
media="only screen and (max-width:1000px)"{...}

上面这行代码,在老式浏览器中被解析为media=“only”,因为没有一个叫only的设备,所以实际上老式浏览器不会应用样式

media="screen and (max-width:1000px)"{...}

上面这行代码,在老式浏览器中被解析为media=“screen”,它把后面的逻辑表达式忽略了。所以老式浏览器会应用样式
  所以,在使用媒体查询时,only最好不要忽略

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值