CSS媒体查询(@media)全面解析

news/2024/7/5 12:06:20

随着移动设备的快速普及,用户不再只是通过传统的电脑系来浏览 Web 内容,越来越多的用户开始使用各种尺寸的智能手机、平板电脑或者其它设备来浏览 Web 内容,为了确保使用不同设备的用户都能拥有不错的体验就需要用到媒体查询。

媒体查询是 CSS 样式表最重要的功能之一,所谓媒体查询指的就是根据不同的媒体类型(设备类型)和条件来区分各种设备(例如:电脑、手机、平板电脑、盲文设备等),并为它们分别定义不同的 CSS 样式。媒体查询能让 CSS 可以更精确的作用于不同的设备或同一设备的不同条件,让所有用户都能得到很好的用户体验。

1. 媒体类型

媒体类型用来表示设备的类别,CSS 中提供了一些关键字来表示不同的媒体类型,如下表所示:

媒体类型描述
all表示所有的媒体设备
aural(听觉的,听的)表示语音和音频合成器(听觉设备)
braille(用盲文写的)表示盲人用点字法触觉回馈设备
embossed表示盲人用点字法打印机
handheld表示小型手持设备,如手机、平板电脑
print表示打印机
projection表示投影设备
screen表示电脑显示器
tty表示使用固定密度字母栅格的媒体,比如打字机或终端设备
tv表示电视机类型的设备

2. 媒体特性

除了具体的类型外,还可以通过一些属性来描述设备的具体特征,例如宽度、高度、分辨率等,如下表所示:

描述
aspect-ratio(纵横比)输出设备页面可见区域的宽高比
color输出设备每个像素的比特值,常见的有 8、16、32 位。如果设备不支持输出彩色,则该值为 0
color-index输出设备的颜色查询表中的条目数量。如果没有使用颜色查询表,则该值等于 0
device-aspect-ratio输出设备的宽高比
device-height输出设备屏幕的可见高度
device-width输出设备屏幕的可见宽度
grid查询输出设备使用的是网格屏幕还是点阵屏幕
height页面可见区域的高度
max-aspect-ratio输出设备屏幕可见区域宽度与高度的最大比率
max-color输出设备每个像素比特值的最大值
max-color-index输出设备的颜色查询表中的最大条目数
max-device-aspect-ratio输出设备屏幕可见区域宽度与高度的最大比率
max-device-height输出设备屏幕可见区域的最大高度
max-device-width输出设备屏幕的最大可见宽度
max-height页面可见区域的最大高度
max-monochrome输出设备单色帧缓冲区中每个像素的最大位深度。如果设备并非黑白屏幕,则该值为 0
max-resolution设备的最大分辨率
max-width页面可见区域的最大宽度
min-aspect-ratio输出设备屏幕可见区域宽度与高度的最小比率
min-color输出设备每个像素比特值的最小值
min-color-index输出设备的颜色查询表中的最小条目数
min-device-aspect-ratio输出设备的屏幕可见区域宽度与高度的最小比率
min-device-width输出设备的屏幕的最小可见宽度
min-device-height输出设备的屏幕的最小可见高度
min-height页面可见区域的最小高度
min-monochrome输出设备单色帧缓冲区中每个像素的最小位深度。如果设备并非黑白屏幕,则该值为 0
min-resolution设备的最小分辨率
min-width页面可见区域的最小宽度
monochrome输出设备单色帧缓冲区中每个像素的位深度。如果设备并非黑白屏幕,则该值为 0
orientation页面可见区域的旋转方向
resolution设备的分辨率。如:96dpi、300dpi、118dpcm
scan电视类设备的扫描工序
width页面可见区域的宽度

3. 逻辑操作符

逻辑操作符包含 not、and 和 only 三个,通过逻辑操作符可以构建复杂的媒体查询,您还可以通过逗号来分隔多个媒体查询,将它们组合为一个规则。

  • and:用于将多个媒体查询组合成一条媒体查询,当每个查询规则都为真时则该条媒体查询为真,另外通过 and 操作符还可以将媒体特性与媒体类型结合在一起;
  • not:用于否定媒体查询,当查询规则不为真时则返回 true,否则返回 false。如果使用 not 操作符,则还必须指定媒体类型;
  • only:仅在整个查询匹配时才会生效,当不使用 only 时,旧版的浏览器会将 screen and (max-width: 500px) 简单地解释为 screen,忽略查询的其余部分,并将样式应用于所有屏幕。 如果使用 only 运算符,则还必须指定媒体类型。

4. 定义媒体查询

目前您可以通过以下两种方式来定义媒体查询:

  • 使用 @media 或 @import 规则在样式表中指定对应的设备类型;
  • 用 media 属性在 <style>、<link>、<source> 或其他 HTML 元素中指定特定的设备类型。

1) @media

在《CSS @规则》一节中我们已经简单了解 @media,使用 @media 您可以指定一组媒体查询和一个 CSS 样式块,当且仅当媒体查询与正在使用的设备匹配时,指定的 CSS 样式才会应用于文档。示例代码如下:

/* 在小于或等于 992 像素的屏幕上,将背景色设置为蓝色 */
@media screen and (max-width: 992px) {
  body {
    background-color: blue;
  }
}
 
/* 在 600 像素或更小的屏幕上,将背景色设置为橄榄色 */
@media screen and (max-width: 600px) {
  body {
    background-color: olive;
  }
}

2) @import

@import 用来导入指定的外部样式文件并指定目标的媒体类型,示例代码如下:

@import url("css/screen.css") screen;   /* 引入外部样式,该样式仅会应用于电脑显示器 */
@import url("css/print.css") print;     /* 引入外部样式,该样式仅会应用于打印设备 */
body {
    background: #f5f5f5;
    line-height: 1.2;
}

 

注意:所有 @import 语句都必须出现在样式表的开头,而且在样式表中定义的样式会覆盖导入的外部样式表中冲突的样式。

3) media 属性

您还可以在 <style>、<link>、<source> 等标签的 media 属性中来定义媒体查询,示例代码如下:

/* 当页面宽度大于等于 900 像素时应用该样式 */
<link rel="stylesheet" media="screen and (min-width: 900px)" href="widescreen.css">
/* 当页面宽度小于等于 600 像素时应用该样式 */
<link rel="stylesheet" media="screen and (max-width: 600px)" href="smallscreen.css">

 提示:在 media 属性中您还可以指定多种媒体类型,每种媒体类型之间使用逗号进行分隔,例如 media="screen, print"。


http://lihuaxi.xjx100.cn/news/1087686.html

相关文章

贪心算法OJ刷题(2)

多机调度问题 题目描述 某工厂有n个独立的作业&#xff0c;由m台相同的机器进行加工处理。作业i所需的加工时间为 t i t_i ti​&#xff0c;任何作业在被处理时不能中断&#xff0c;也不能进行拆分处理。现厂长请你给他写一个程序&#xff1a;算出n个作业由m台机器加工处理的…

PromQL,让你轻松实现监控可视化!快来了解一下吧!

Prometheus 中的一些关键设计&#xff0c;比如注重标准和生态、监控目标动态发现机制、PromQL等。 PromQL 是 Prometheus 的查询语言&#xff0c;使用灵活方便&#xff0c;但很多人不知道如何更好利用它&#xff0c;发挥不出优势。 PromQL主要用于时序数据的查询和二次计算场…

【热门框架】Maven依赖传递,可选依赖以及排除依赖指的是什么?有什么意义?

Maven依赖传递是指当一个项目依赖另一个项目时&#xff0c;Maven会自动下载并构建这些依赖项&#xff0c;同时还会将这些依赖项所依赖的其他项一并下载并构建。这个过程会一直递归下去&#xff0c;直到所有依赖的项都被下载并构建完成。这个过程就称为依赖传递。 依赖传递可以…

【MySQL】函数和约束

如标题所说,本文重点只有两个:MySQL语句里面的函数和约束 目录 1. 函数1.1 字符串函数1.2 数值函数1.3 日期函数1.4 流程函数 2.约束2.1 外键的删除更新行为 1. 函数 因为在前一篇文章里面有讲到聚合函数,所以在这里就不重复介绍了,本文所介绍的函数有4类:字符串函数,数值函数…

数据结构与算法之数组: Leetcode 605. 种花问题 (Typescript版)

种花问题 https://leetcode.cn/problems/can-place-flowers/ 描述 假设有一个很长的花坛&#xff0c;一部分地块种植了花&#xff0c;另一部分却没有。可是&#xff0c;花不能种植在相邻的地块上&#xff0c;它们会争夺水源&#xff0c;两者都会死去。 给你一个整数数组 flo…

Java 中的线程是什么,如何创建和管理线程-中(十二)

书接上文 三、Java 线程的同步 Java 中的线程同步是通过 synchronized 关键字实现的。在多线程环境下&#xff0c;当多个线程同时访问共享资源时&#xff0c;如果不进行同步控制&#xff0c;就会出现数据不一致、死锁等问题。为了保证多个线程之间的安全访问&#xff0c;需要…

MCU固件升级系列1(STM32)

本系列将从升级流程、boot代码编写、APP代码编写以及固件打包来介绍&#xff0c;硬件选用STM32F407ZGT6&#xff08;手里只有&#xff09;&#xff0c;来完成这系列教程。 前言 为什么需要固件升级: 功能更新&#xff1a;随着产品的迭代和用户需求的变化&#xff0c;可能需要…

Prometheus监控系统存储容量优化攻略,让你的数据安心保存!

云原生监控领域不可撼动&#xff0c;Prometheus 是不是就没缺点&#xff1f;显然不是。 一个软件如果什么问题都想解决&#xff0c;就会导致什么问题都解决不好。所以Prometheus 也存在不足&#xff0c;广受诟病的问题就是 单机存储不好扩展。 1 真的需要扩展容量吗&#xff…