Web前端入门第 47 问:CSS @media 媒体查询不要只会视口宽度适配
@media
媒体查询的出现解决了什么问题?
曾经,一个网页要兼容移动端和 PC 端,前端的代码复杂度嗖嗖嗖的飙升,需要使用多套代码对各种屏幕尺寸做适配。
@media
的出现解决了 CSS 中无法适配设备尺寸的问题,让 CSS 拥有了处理简单逻辑的能力。
媒体查询就像进店试穿衣服一样,穿得上,咱就用这一套;穿不上,咱就换一套;都穿不上,那就还是穿进店时身上这套吧~~
媒体查询
使用媒体查询之前,先要明白 媒体
二字是指的用户软件设备(比如:电脑中浏览器、网页打印预览等)。
媒体查询无法针对某个具体的 HTML 元素做出响应!!
也无法针对特定的硬件设备做出响应(比如:小米手机、苹果手机等)!!
它只能对用户设备的固定特性做出响应(比如浏览器的可视宽度,是否支持鼠标悬停,设备像素密度等)!!
语法
@media <media-query-list> {
<rule-list>
}
一个简单示例
查询媒体宽度在某个范围内时,设置不同的背景色:
<div class="box">
<div class="child">媒体查询应用</div>
</div>
<style>
.box {
margin: 20px 0;
width: 400px;
border: var(--base-border, 2px solid rgba(255, 71, 87,0.3));
resize: both;
overflow: auto;
}
.box .child {
margin: 10px;
border: 1px solid #ffa947;
padding: 10px;
}
@media (max-width: 450px) {
/* 宽度小于 450px 时,背景色为#ffa947 */
.box {
background-color: #ffa947;
}
}
@media (min-width: 450px) and (max-width: 600px) {
/* 宽度在 450px 到 600px 之间时,背景色为#ff4757 */
.box {
background-color: #ff4757;
}
}
</style>
效果:
指定媒体类型
以上媒体查询在未指定媒体类型时,默认为 all
全部媒体类型,将会应用于屏幕和打印预览~
可使用关键字指定 screen
指定用于屏幕或 print
指定用于打印。
<div class="box">
<div class="child">媒体查询应用</div>
</div>
<style>
.box {
margin: 20px 0;
width: 400px;
border: var(--base-border, 2px solid rgba(255, 71, 87,0.3));
resize: both;
overflow: auto;
}
.box .child {
margin: 10px;
border: 1px solid #ffa947;
padding: 10px;
}
@media screen and (max-width: 1200px) {
/* 指定屏幕设备宽度小于 1200px 时,背景色为#ffa947 */
.box {
background-color: #ffa947;
}
}
@media print {
/* 指定打印 字体大小 和 字体颜色 */
.box {
font-size: 22pt;
color: red;
}
}
</style>
可在浏览器中 ctrl + p
查看打印样式:
使用逻辑运算符
使用逻辑运算符 and
、 not
、 only
、 ,
、 or
,可以组合多个媒体查询条件,实现更复杂的逻辑判断。
and
用于多个查询条件同时匹配时才应用样式:
@media screen and (min-width: 320px) and (max-width: 600px) {
.box {
line-height: 3;
}
}
not
用于查询条件不匹配时才应用样式:
@media not screen and (min-width: 600px) {
/* 指定屏幕设备宽度不大于 600px 时,背景色为 #ffa947 */
.box {
background-color: #ffa947;
}
}
only
仅在整个查询匹配时才应用样式。这对于防止较老的浏览器应用所选样式很有用。当不使用 only 时,较老的浏览器会将 screen and (max-width: 500px) 简单地解释为 screen,忽略查询的其余部分,并将其样式应用于所有屏幕。如果使用 only 运算符,则还必须指定媒体类型。 --- 摘自 MDN
@media only screen and (max-width: 600px) {
/* 指定屏幕设备宽度小于 600px 时,字体色为 #ff4757 */
.box {
color: #ff4757;
}
}
,
和 or
运算符等价,or
在媒体查询第 4 版中加入,仅 2022
年之后的浏览器支持:
@media screen, print {
.box {
font-size: 28px;
}
}
@media (not (color)) or (not (hover)) {
.box {
font-weight: bold;
}
}
需特别注意:逻辑运算符后面必须有至少一个空格!!比如 not(hover)
将不生效,必须写成 not (hover)
。
新语法
媒体查询第 4 版引入了一种新的范围语法,使用此语法需特别注意浏览器兼容性:
支持的运算符有:等于 =
、小于 <
、 小于等于 <=
、大于 >
、大于等于 >=
。
/* @media (max-width: 600px) { ... } 等价于 */
@media (width <= 600px) {
.box {
font-size: 28px;
}
}
/* @media (min-width: 600px) and (max-width: 1200px) { ... } 等价于 */
@media (600px <= width <= 1200px) {
.box {
font-size: 28px;
}
}
@media screen and (width = 320px) {
/* 指定屏幕设备宽度等于 320px 时,行高为 10 */
.box {
line-height: 10;
}
}
第 4 版的媒体查询 W3C 参考文档:https://drafts.csswg.org/mediaqueries/
常用媒体特性列表
any-hover
是否有任何可用的输入机制允许用户将鼠标悬停在元素上。有效值: none
、hover
。
width
可视区域的宽度,包括滚动条的宽度。
允许 min-
和 max-
前缀查询范围。
@media (width: 600px) {}
@media (min-width: 30rem) {}
@media (max-width: 40rem) {}
@media (any-hover: hover) {
/* 有鼠标悬停时(比如PC端),字体色为 #ff4757 */
.box {
color: #ff4757;
}
}
height
可视区域的高度。
允许 min-
和 max-
前缀查询范围。
@media (height: 600px) {}
@media (min-height: 30rem) {}
@media (max-height: 40rem) {}
resolution
输出设备的像素密度。
允许 min-
和 max-
前缀查询范围。
@media (resolution: 150dpi) {}
@media (min-resolution: 300dpi) {}
@media (max-resolution: 2dpcm) {}
orientation
可视区域的方向。有效值:portrait
(纵向:高度大于或等于宽度)、landscape
(横向:宽度大于高度)。
@media (orientation: portrait) {}
@media (orientation: landscape) {}
pointer
主输入机构是否为指针设备,如果是,其准确性如何。有效值:none
(不包括定点设备)、coarse
(精度有限的定点设备,例如触摸屏上的手指)、fine
(精确指针设备,例如鼠标)。
@media (any-pointer: fine) {}
@media (any-pointer: coarse) {}
hover
输入机制是否允许用户将鼠标悬停在元素上。有效值:none
(无法悬停或无法方便地悬停)、hover
(可以方便地将鼠标悬停)。
@media (hover: hover) {}
aspect-ratio
可视区域的宽高纵横比。有效值:4/3
、1.33333
。
允许 min-
和 max-
前缀查询范围。
@media (min-aspect-ratio: 8/5) {}
@media (aspect-ratio: 1/1) {}
@media (max-aspect-ratio: 8/5) {}
@media screen and (min-aspect-ratio: 16/9) {}
prefers-color-scheme
检测用户是喜欢浅色还是深色配色方案。 在 Media Queries Level 5 中添加。有效值:light
(浅色)、dark
(深色)。
@media (prefers-color-scheme: dark) {}
不常用媒体特性列表
any-pointer
是否有任何可用的输入机制是指针设备。有效值: none
、fine
或 coarse
。
@media (any-pointer: fine) {
/* 至少一个输入机制包括精确指针设备 */
}
@media (any-pointer: coarse) {
/* 至少一个 input 机制包括精度有限的定点设备 */
}
color
输出设备的每个颜色分量的位数,如果设备不支持输出彩色,则为 0
。
允许 min-
和 max-
前缀查询范围。
/* 任何颜色设备 */
@media (color) {}
/* 每个颜色分量至少有8位的颜色设备 */
@media (min-color: 8) {}
color-gamut
用户代理和输出设备支持的颜色的大致范围。有效值:srgb
、p3
、rec2020
。
@media (color-gamut: srgb) {}
color-index
输出设备的颜色查找表中的条目数,如果设备不使用此类表,则为 0
。
允许 min-
和 max-
前缀查询范围。
@media (color-index) {}
@media (min-color-index: 16000) {}
device-posture 实验性
检测设备的当前状态,即可视区域是处于平放状态还是折叠状态。在 Device Posture API 中定义。有效值:continuous
平面屏幕状态、folded
折叠屏幕状态。
@media (device-posture: folded) and (orientation: landscape) {}
@media (device-posture: continuous) {}
display-mode
应用程序的显示模式:例如,全屏或画中画模式。 在 Media Queries Level 5 中添加。有效值:浏览器 browser
、全屏 fullscreen
、画中画 picture-in-picture
、minimal-ui
、standalone
、window-controls-overlay
。
@media all and (display-mode: fullscreen) {}
dynamic-range
用户代理和输出设备支持的亮度、对比度和颜色深度的组合。在 Media Queries Level 5 中添加。有效值:standard
(任何可视设备)、high
(支持的亮度、对比度和颜色深度的组合)。
@media (dynamic-range: standard) {}
@media (dynamic-range: high) {}
forced-colors
检测 User Agent 是否限制调色板。 在 Media Queries Level 5 中添加。有效值:none
、active
(强制颜色模式处于活动状态)。
@media (forced-colors: active) {}
grid
设备是否使用网格屏幕还是点阵屏幕。有效值:0
、1
。
@media (grid: 0) {}
@media (grid: 1) {}
inverted-colors
用户代理或底层作系统是否反转了颜色。在 Media Queries Level 5 中添加。有效值:none
(颜色正常显示)、inverted
(所有像素都已反转)。
@media (inverted-colors: inverted) {}
@media (inverted-colors: none) {}
monochrome
输出设备的单色帧缓冲区中每像素的位数,如果设备不是单色的,则为 0
。
允许 min-
和 max-
前缀查询范围。
@media (monochrome: 0) {}
@media (max-monochrome: 8) {}
overflow-block
输出设备如何处理沿块轴溢出可视区域的内容。有效值:none
(不显示溢出内容)、scroll
(滚动显示)、optional-paged
、paged
。
@media (overflow-block: scroll) {}
overflow-inline
沿内联轴溢出可视区域的内容是否可以滚动。有效值:none
(不显示溢出内容)、scroll
(滚动显示)。
@media (overflow-inline: scroll) {}
prefers-contrast
检测用户是否请求系统增加或减少相邻颜色之间的对比度。 在 Media Queries Level 5 中添加。有效值:no-preference
(无偏好)、more
(增加对比度)、less
(减少对比度)、custom
(自定义对比度)。
@media (prefers-contrast: more) {}
prefers-reduced-data
检测用户是否请求了消耗较少 Internet 流量的 Web 内容。有效值:no-preference
(无偏好)、reduce
(减少数据流量)。
@media (prefers-reduced-data: no-preference) {}
prefers-reduced-motion
用户喜欢在页面上进行较少的运动。 在 Media Queries Level 5 中添加。有效值:no-preference
(无偏好)、reduce
(减少运动)。
@media (prefers-reduced-motion) {}
prefers-reduced-transparency
检测用户是否在其设备上启用了设置,以减少设备上使用的透明或半透明图层效果。有效值:no-preference
(无偏好)、reduce
(减少透明效果)。
@media (prefers-reduced-transparency) {}
scan
显示输出是逐行扫描还是隔行扫描。有效值:progressive
(逐行扫描)、interlace
(隔行扫描)。
@media screen and (scan: interlace) {}
@media screen and (scan: progressive) {}
scripting
检测脚本(即 JavaScript)是否可用。 在 Media Queries Level 5 中添加。有效值:none
(脚本不可用)、initial-only
(脚本在初始页面加载期间启用,但之后不会启用)、enabled
(脚本可用)。
@media (scripting: none) {}
@media (scripting: initial-only) {}
@media (scripting: enabled) {}
shape 实验性
检测设备的形状以区分矩形和圆形显示器。有效值:rect
(矩形或正方形)、round
(圆形或与圆形相似的形状)。
@media (shape: rect) {}
@media (shape: round) {}
update
输出设备可以修改内容外观的频率。有效值:none
(不支持)、slow
(慢速)、fast
(快速)。
@media (update: none) {}
@media (update: slow) {}
@media (update: fast) {}
video-dynamic-range
用户代理和输出设备的视频平面支持的亮度、对比度和颜色深度的组合。在 Media Queries Level 5 中添加。有效值:standard
(标准)、high
(高)。
@media (video-dynamic-range: high) {}
@media (video-dynamic-range: standard) {}
写在最后
虽然媒体查询多用于响应式布局,但多了解一些其他媒体特性,可做出一些很有用的交互设计效果,比如:深色、浅色主题适配;指针设备、和非指针设备适配等等~~
媒体查询兼容性参考文档:https://developer.mozilla.org/en-US/docs/Web/CSS/@media#browser_compatibility
参考资料:https://developer.mozilla.org/zh-CN/docs/Web/CSS/@media
Web前端入门第 47 问:CSS @media 媒体查询不要只会视口宽度适配的更多相关文章
- CSS Media媒体查询使用大全,完整媒体查询总结
前面的话 一说到响应式设计,肯定离不开媒体查询media.一般认为媒体查询是CSS3的新增内容,实际上CSS2已经存在了,CSS3新增了媒体属性和使用场景(IE8-浏览器不支持).本文将详细介绍媒体查 ...
- 深入理解CSS Media媒体查询
× 目录 [1]媒介类型 [2]媒体属性 [3]语法[4]方法 前面的话 一说到响应式设计,肯定离不开媒体查询media.一般认为媒体查询是CSS3的新增内容,实际上CSS2已经存在了,CSS3新增了 ...
- CSS3@media媒体查询
CSS3@media媒体查询 定义 media媒体查询, 当文档宽度变化时, 就可以根据文档宽度的变化来运用样式,不同的宽度应用不同的样式 使用 @media 查询,你可以针对不同的媒体类型定义不同的 ...
- 好程序员web前端分享值得参考的css理论:OOCSS、SMACSS与BEM
好程序员web前端分享值得参考的css理论:OOCSS.SMACSS与BEM 最近在The Sass Way里看到了Modular CSS typography一文,发现文章在开头部分就提到了OOCS ...
- web前端入坑第五篇:秒懂Vuejs、Angular、React原理和前端发展历史
秒懂Vuejs.Angular.React原理和前端发展历史 2017-04-07 小北哥哥 前端你别闹 今天来说说 "前端发展历史和框架" 「前端程序发展的历史」 「 不学自知, ...
- 好程序员web前端分享18个用CSS制作出来的东西
好程序员web前端分享18个用CSS制作出来的东西,与流行的看法相反,CSS不仅仅是用来提供一个WEB页面的基本风格,以使它看起来更有吸引力.还有很多其他的事情,CSS也可以做的很好.由于它创建动画和 ...
- 进击的Python【第十三章】:Web前端基础之HTML与CSS样式
进击的Python[第十四章]:Web前端基础之HTML与CSS样式 一.web框架的本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客 ...
- Android零基础入门第47节:自动完成文本框AutoCompleteTextView
原文:Android零基础入门第47节:自动完成文本框AutoCompleteTextView 上一期学习的Spinner的使用,掌握的怎么样?本期一起来学习AutoCompleteTextView的 ...
- css3 media媒体查询器用法总结
随着响应式设计模型的诞生,Web网站又要发生翻天腹地的改革浪潮,可能有些人会觉得在国内IE6用户居高不下的情况下,这些新的技术还不会广泛的蔓延下去,那你就错了,如今淘宝,凡客,携程等等公司都已经在大胆 ...
- css3 media媒体查询器用法总结(附js兼容方法)
css3 media媒体查询器用法总结 标签:class 代码 style html sp src 随着响应式设计模型的诞生,Web网站又要发生翻天腹地的改革浪潮,可能有些人会觉得 ...
随机推荐
- DeepSeek-R1本地部署如何选择适合你的版本?看这里
DeepSeek-R1本地部署:选择最适合你的版本,轻松搞定! 关于本地部署DeepSeek-R1前期知识 如果你正在考虑将DeepSeek-R1部署到本地服务器上,了解每种类型的硬件需求是非常重要的 ...
- ABC323E Playlist 题解
考虑第 \(i\) 时刻时,第 \(j\) 首歌刚好结束与第 \(i-j\) 时刻有关,因此设 \(dp_{i,j}\) 表示第 \(i\) 时刻第 \(j\) 首歌刚好结束的概率,那么 \(dp\) ...
- Edge、谷歌浏览器默认下载器开启多线程下载
浏览器默认下载器开启多线程下载 Chrome 浏览器,地址栏输入并回车: chrome://flags/#enable-parallel-downloading Edge 新版浏览器,地址栏输入并回车 ...
- Linux - VMware workstation安装虚拟机
Step1:新建虚拟机 主页/文件 >> 创建新的虚拟机 新建虚拟机向导 典型(推荐)(T) 通过几个简单的步骤创建Workstation虚拟机 自定义(高级)(C) 创建带有SCSI控制 ...
- 使用form-create监听组件的事件
FormCreate 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成组件.支持5个UI框架,并且支持生成任何 Vue 组件.内置20种常用表单组件和自定义组件,再复杂的 ...
- 【目标检测】一、初始的R-CNN与SVM
1.流程 为什么要用SVM而不是CNN最后一层的softmax? 取什么模型必然是有标准衡量,这个流程取得是书上[4]写的,作者说他得实验证明SVM比FC的mAP要高,所以我流程暂且这样画了. R-C ...
- .net core datatable 导出 pdf 支持中文
1.nuget 安装 iTextSharp (V4.1.6) to .NET Core. 2.code public DataTable ToDataTable<T>(IEnumerab ...
- MySQL索引最左原则:从原理到实战的深度解析
MySQL索引最左原则:从原理到实战的深度解析 一.什么是索引最左原则? 索引最左原则是MySQL复合索引使用的核心规则,简单来说: "当使用复合索引(多列索引)时,查询条件必须从索引的最左 ...
- Anaconda使用记录
1 安装 windows下,安装完添加环境变量(哦安装时勾选添加环境变量选项就是加这些变量的) ## (记anaconda软件目录为%ANACONDA3%) %ANACONDA3%\ %ANACOND ...
- Pwnable_orw
题源 题解 保护 只开启了栈保护 分析 进入ida分析 main函数如下 seccomp (Secure Computing Mode)是一种 Linux 内核安全机制,它可以 限制进程可执行的系统调 ...