重拾CSS,前端样式精读-媒体查询

前言

本文收录于CSS系列文章中,欢迎阅读指正

说到媒体查询,大家首先想到的可能是有关响应式的知识点,除此之外,它还可以用于条件加载资源,字体大小,图像和视频的优化,用户界面调整等等方面,学好媒体查询可以为页面增添条件样式,应对不同的设备类型。它是基于CSS2中的@media规则扩展而来,在CSS3中增加了特性查询的能力,使得它更加灵活和强大。

语法

媒体查询的起源

媒体查询发展到现在已经有五个版本,其中1-3版都被css2及更早版本支持,当前正处于第五版(截止目前第四版文档最后编辑时间是24年2月)

早期版本的媒体查询规则也允许你根据媒体类型应用不同的样式,与CSS3相比,CSS2中的@media规则较为简单,主要关注于媒体类型的区分,并没有引入复杂的表达式和特性查询。

基本语法如下

@media mediatype {
/* CSS rules */
}

mediatype是指定的媒体类型:

  1. all - 适用于所有设备
  2. aural - 专为语音和音频合成器设计(目前已弃用)
  3. braille - 用于盲文触觉反馈设备(目前已弃用​​​​​​​)
  4. handheld - 适合小型的手持设备(目前已弃用​​​​​​​)
  5. print - 目标为打印文档或打印预览
  6. projection - 适用于演示,如投影仪(目前已弃用​​​​​​​)
  7. screen - 主要指色彩电脑屏幕
  8. tty - 用于使用固定间距的字母网格显示的媒介,如电传打字机和终端(目前已弃用​​​​​​​)
  9. tv - 适用于电视类型的设备(目前已弃用​​​​​​​)
@media print {.box {border: 1px solid #000;}
}@media screen {.box {border-radius: 50%;}
}

使用@import语法同样可以限制引入对应查询条件的标签

@import url("fineprint.css") print;
@import "common.css" screen, projection;

此外CSS2中的@media效果还可以通过使用<style>,<link>,<source>等标签中的media属性来实现

<link rel="stylesheet" media="print" href="./print.css">
<link rel="stylesheet" media="screen" href="./screen.css">

上述代码中当打印状态下就会引用print.css文件,在普通浏览器中会引入screen.css的内容

CSS3的媒体查询

回到现代CSS中的媒体查询语法,它不仅扩充了媒体类型还在原有类型的基础上增加了媒体的特点以及一些组合语法,如:如视口宽度、设备朝向等

基本语法

@media not|only mediatype and (expressions) {/* CSS规则 */
}

媒体特征

媒体特征用于描述设备的各种属性,例如屏幕尺寸、方向、分辨率等,常用的媒体特征如下:

  • width/height:视口宽度和高度。
  • min-width/max-width:最小和最大视口宽度。
  • min-height/max-height:最小和最大视口高度。
  • orientation:设备方向,可以是landscape(横向)或portrait(纵向)。
  • resolution:输出设备的分辨率。
  • aspect-ratio:视口的宽高比。
  • color:可用的颜色数。
  • color-index:设备的色彩索引表中的颜色数。
  • monochrome:单色帧缓冲中每像素的位数。

更多媒体特征参照@media - CSS:层叠样式表 | MDN

来看看它的用法:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>@media</title>
</head>
<style>.box,.box2 {width: 100px;height: 100px;text-align: center;line-height: 100px;}@media (min-width: 900px) {.box {background: lightcoral;}}@media (hover: hover) {.box2:hover {background: yellow;}}
</style><body><div class="box">box</div><div class="box2">box2</div>
</body></html>

上述代码表示视窗大于900时box会改变颜色,当当前设备支持hover功能时,box2的hover生效

逻辑运算

与CSS选择器类似,媒体查询同样支持条件组合的逻辑运算,在媒体特征,媒体类型之间使用not、and、only和or(四版本之前使用的是逗号 , )关键字可以达到组合查询的效果。

not

用于排除某些媒体或条件,同js的!

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>not</title>
</head>
<style>.box {width: 100px;height: 100px;text-align: center;line-height: 100px;background: lightcoral;}@media not print {.box {background: navy;color: white;}}@media not (min-width: 900px) {.box {background: lightblue;}}
</style><body><div class="box">box</div>
</body></html>

上述代码非打印页面背景切换navy和非宽度大于(小于等于)900px背景为亮蓝。当二者都满足则遵循css样式规则,后面的属性覆盖前面的属性,看看效果:

and

用于组合多个条件的逻辑操作符,同js的&&

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>and</title>
</head>
<style>.box {width: 100px;height: 100px;text-align: center;line-height: 100px;background: lightcoral;}@media screen and (min-width: 800px) and (max-width: 1024px) {/* 视口宽度在800到1024像素之间的屏幕上应用这些样式 */.box {background-color: lightblue;}}@media screen and (min-width: 600px) and (max-width: 800px) {/* 视口宽度在600px到800px之间的屏幕上应用这些样式 */.box {background-color: lightgreen;}}
</style><body><div class="box">box</div>
</body></html>

当窗口宽度在600-800显示绿色,800-1024显示蓝色,其余显示红色

or

表示可以选择多个媒体查询中的任意一个来应用样式,在媒体查询四版本之前一般使用逗号(,)表示该效果,类似与js中的||,思考下面的代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>or</title>
</head>
<style>/* 其余600-800显示默认 */.box {width: 100px;height: 100px;text-align: center;line-height: 100px;background: lightcoral;}@media (max-width: 600px) or (min-width: 800px) {/* 小于600或大于800生效 */.box {background-color: lightblue;}}@media (max-width: 400px),(min-width: 1000px) {/* 小于400或大于1000生效 */.box {background-color: lightgreen;}}
</style><body><div class="box">box</div>
</body></html>

only

only关键字在CSS媒体查询中的作用是用来防止旧版浏览器误解和应用不支持的媒体查询,比如上面说到的css2中只支持媒体类型的写法,当我们要兼容旧浏览器又想使新版写法生效时可以使用only,思考下面一段代码

@media only screen and (min-width: 800px) and (max-width: 1024px)

当代码处于老版本浏览器时,and后面的条件都会失效变成以下代码

@media screen

​​​​​​​​​​​​​​总结

媒体查询​​​​​​​允许开发者为不同的媒体类型和条件编写特定的样式规则。通过使用媒体查询,可以创建响应式网页布局,确保网页可以适配多种不同尺寸和分辨率的设备,在实际应用中,媒体查询使得CSS样式可以根据不同的浏览环境动态地适应变化,从而提供跨设备的无缝用户体验。

感谢你看到这里,以上就是文章全部内容了,如果觉得文章不错的话,还请三连鼓励一下,你的支持就是我创作的最大动力,谢谢!

相关代码

myCode: 基于js的一些小案例或者项目 - Gitee.com

知识点参考

使用媒体查询 - CSS:层叠样式表 | MDN

媒体查询入门指南 - 学习 Web 开发 | MDN

Media Queries Level 4

Media Queries Level 3

语法参考

@media - CSS:层叠样式表 | MDN​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络的正则化(一)

目录 摘要Abstract1. 引言2. 参数范数惩罚3. 显式约束和重投影3.1 显式约束3.2 重投影 4. 数据集增强5. 多任务学习6. 提前终止7. 参数绑定和共享8. 稀疏表示9. Bagging和其他集成方法10. 对抗训练参考总结 摘要 本周&#xff0c;我学习了神经网络中的正则化方法。 Abstract T…

普通用户切换到 root 用户不需要输入密码配置(Ubuntu20)

在 Ubuntu 系统中&#xff0c;允许一个普通用户切换到 root 用户而不需要输入密码&#xff0c;可以通过以下步骤配置 sudo 设置来实现。 步骤&#xff1a; 打开 sudoers 文件进行编辑&#xff1a; 在终端中&#xff0c;输入以下命令来编辑 sudoers 文件&#xff1a; sudo visu…

MySQL系统优化

文章目录 MySQL系统优化第一章&#xff1a;引言第二章&#xff1a;MySQL服务架构优化1. 读写分离2. 水平分区与垂直分区3. 缓存策略 第三章&#xff1a;MySQL配置优化1. 内存分配优化Buffer Pool 的优化查询缓存与表缓存Key Buffer 2. 连接优化最大连接数会话超时连接池 3. 日志…

菲涅耳全息图

菲涅耳全息图&#xff1a;记录介质在物光波场的菲涅耳衍射区(物体到记录介质表面的距离在菲涅耳衍射区内)。 一、点源全息图的记录和再现 1.1 记录 设物光波和参考光波是从点源O(xo, yo, zo)和点源 R(xr, yr, zr)发出的球面波, 波长为λ1, 全息底片位于z0 的平面上, 与两个点源…

动态规划不同维度分析leetcode198.打家劫舍问题

class Solution {public int rob(int[] nums) {return robByTwoDim(nums);}// 二维dp算法 一层for训练public int robByTwoDim(int[] nums){int[][] dp new int[2][nums.length 1];for(int j 1; j < nums.length; j){dp[0][j] nums[j - 1] dp[1][j - 1]; // 偷,那么再…

多线程-阻塞队列

目录 阻塞队列 消息队列 阻塞队列用于生产者消费者模型 概念 实现原理 生产者消费者主要优势 缺陷 阻塞队列的实现 1.写一个普通队列 2.加上线程安全和阻塞等待 3.解决代码中的问题 阻塞队列 阻塞队列&#xff0c;是带有线程安全功能的队列&#xff0c;拥有队列先进…

Qt小知识-Q_GLOBAL_STATIC

你还在为创建全局静态对象烦恼嘛&#xff0c;它来了&#xff01;它来了&#xff01; qt5提供了两个宏定义Q_GLOBAL_STATIC和Q_GLOBAL_STATIC_WITH_ARGS来实现。可以创建一个全局静态对象&#xff0c;对象在第一次使用时初始化自身&#xff0c;这意味着它不会增加应用程序或库的…

ARM CCA机密计算安全模型之简介

安全之安全(security)博客目录导读 目录 1、引言 2、问题陈述 3、CCA 安全保证 3.1 对领域所有者的安全保证 3.2 对host环境的安全保证 Arm 机密计算架构&#xff08;CCA&#xff09;安全模型&#xff08;SM&#xff09;定义了 CCA 隔离架构的安全要求和基本安全属性。这…

css样式:flex布局

文章目录 简介简单使用直接使用一行放不下的换行水平方向上对齐方式竖直方向上对齐方式布局中排列顺序放大比例缩小比例单个元素与其他元素不同的对齐 文章目录 简介简单使用直接使用一行放不下的换行水平方向上对齐方式竖直方向上对齐方式布局中排列顺序放大比例缩小比例单个元…

MySQL LOAD DATA INFILE导入数据报错

1.导入命令 LOAD DATA INFILE "merge.csv" INTO TABLE 报名数据 FIELDS TERMINATED BY , ENCLOSED BY " LINES TERMINATED BY \n IGNORE 1 LINES; 2.表结构 CREATE TABLE IF NOT EXISTS 报名数据 ( pid VARCHAR(100) NOT NULL, 查询日期 VARCHAR(25) NO…

详解模版类pair

目录 一、pair简介 二、 pair的创建 三、pair的赋值 四、pair的排序 &#xff08;1&#xff09;用sort默认排序 &#xff08;2&#xff09;用sort中的自定义排序进行排序 五、pair的交换操作 一、pair简介 pair是一个模版类&#xff0c;可以存储两个值的键值对.first以…

C#从入门到放弃

C#和.NET的区别 C# C#是一个编程语言 .NET .NET是一个在window下创建程序的框架 .NET框架不仅局限于C#,它还可以支持很多语言 .NET包括了2个组件&#xff0c;一个叫CLR(通用语言运行时)&#xff0c;另一个是用来构建程序的类库 CLR 用C写一个程序&#xff0c;在一台8688的机器…

设计模式练习(二) 简单工厂模式

设计模式练习(二) 简单工厂模式 题目描述 小明家有两个工厂&#xff0c;一个用于生产圆形积木&#xff0c;一个用于生产方形积木&#xff0c;请你帮他设计一个积木工厂系统&#xff0c;记录积木生产的信息。 输入描述 输入的第一行是一个整数 N&#xff08;1 ≤ N ≤ 100&a…

算法复杂度详解

目录 算法定义 复杂度概念 时间复杂度 大O的渐近表示法 空间复杂度 常见复杂度对比 算法定义 算法(Algorithm):就是定义良好的计算过程&#xff0c;他取一个或一组的值为输入&#xff0c;并产生出一个或一组值作为 输出。简单来说算法就是一系列的计算步骤&#xff0c;用来…

AI写作(十)发展趋势与展望(10/10)

一、AI 写作的崛起之势 在当今科技飞速发展的时代&#xff0c;AI 写作如同一颗耀眼的新星&#xff0c;迅速崛起并在多个领域展现出强大的力量。 随着人工智能技术的不断进步&#xff0c;AI 写作在内容创作领域发挥着越来越重要的作用。据统计&#xff0c;目前已有众多企业开始…

电子应用设计方案-12:智能窗帘系统方案设计

一、系统概述 本设计方案旨在打造便捷、高效的全自动智能窗帘系统。 二、硬件选择 1. 电机&#xff1a;选用低噪音、扭矩合适的智能电机&#xff0c;根据窗帘尺寸和重量确定电机功率&#xff0c;确保能平稳拉动窗帘。 2. 轨道&#xff1a;选择坚固、顺滑的铝合金轨道&…

AI技术对软件开发带来的发展

AI 重塑软件开发&#xff1a;流程、优势、挑战与展望 一、流程与模式介绍【传统软件开发 VS AI 参与的软件开发】 传统软件开发流程与模式 需求分析阶段&#xff1a;开发团队与客户进行深入沟通&#xff0c;通过面谈、问卷调查、文档分析等方式收集需求信息。例如&#xff0c;开…

数据结构《栈和队列》

文章目录 一、什么是栈&#xff1f;1.1 栈的模拟实现1.2 关于栈的例题 二、什么是队列&#xff1f;2.2 队列的模拟实现2.2 关于队列的例题 总结 提示&#xff1a;关于栈和队列的实现其实很简单&#xff0c;基本上是对之前的顺序表和链表的一种应用&#xff0c;代码部分也不难。…

基于BERT的命名体识别(NER)

基于BERT的命名实体识别&#xff08;NER&#xff09; 目录 项目背景项目结构环境准备数据准备代码实现 5.1 数据预处理 (src/preprocess.py)5.2 模型训练 (src/train.py)5.3 模型评估 (src/evaluate.py)5.4 模型推理 (src/inference.py) 项目运行 6.1 一键运行脚本 (run.sh)6…

从0-1训练自己的数据集实现火焰检测

随着工业、建筑、交通等领域的快速发展,火灾作为一种常见的灾难性事件,对生命财产安全造成了严重威胁。为了提高火灾的预警能力,减少火灾损失,火焰检测技术应运而生,成为火灾监控和预防的有效手段之一。 传统的火灾检测方法,如烟雾探测器、温度传感器等,存在响应时间慢…