重拾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​​​​​​​

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 Grafana api 查询 Datasource 数据

一、使用grafana 的api 接口 官方API 二、生成Api key 点击 Administration -》Users and accss -》Service accounts 进入页面 点击Add service account 创建 service account 点击Add service account token 点击 Generate token , 就可以生成 api key 了 三、进入grafana…

uniapp luch-request 使用教程+响应对象创建

1. 介绍 luch-request 是一个基于 Promise 开发的 uni-app 跨平台、项目级别的请求库。它具有更小的体积、易用的 API 和方便简单的自定义能力。luch-request 支持请求和响应拦截、全局挂载、多个全局配置实例、自定义验证器、文件上传/下载、任务操作、自定义参数以及多拦截器…

革新人脸图片智能修复

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月16日20点46分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…

OpenGL ES 文字渲染方式有几种?

在音视频或 OpenGL 开发中,文字渲染是一个高频使用的功能,比如制作一些酷炫的字幕、为视频添加水印、设置特殊字体等等。 实际上 OpenGL 并没有定义渲染文字的方式,所以我们最能想到的办法是:将带有文字的图像上传到纹理,然后进行纹理贴图。 本文分别介绍下在应用层和 C+…

Javaweb-day12(登录认证)

登录功能 登录校验&#xff08;重点&#xff09; 登录校验指的是在服务器接收到浏览器发送过来的请求之后&#xff0c;首先要对这个请求进行校验&#xff0c;先要校验一下用户登录了没有 怎么来实现登录校验的操作呢&#xff1f;具体的实现思路可以分为两部分&#xff1a; 在…

DBeaver中PostgreSQL数据库显示不全的解决方法

本文介绍在DBeaver中&#xff0c;连接PostgreSQL后&#xff0c;数据库显示不全的解决方法。 最近&#xff0c;在DBeaver中连接了本地的PostgreSQL数据库。但是连接后打开这个数据库时发现&#xff0c;其所显示的Databases不全。如下图所示&#xff0c;Databases只显示了一个pos…

计算机视觉 1-8章 (硕士)

文章目录 零、前言1.先行课程&#xff1a;python、深度学习、数字图像处理2.查文献3.环境安装 第一章&#xff1a;概论1.计算机视觉的概念2.机器学习 第二章&#xff1a;图像处理相关基础1.图像的概念2.图像处理3.滤波器4.卷积神经网络CNN5.图像的多层表示&#xff1a;图像金字…

如何使用EasyExcel生成多列表组合填充的复杂Excel示例

作者&#xff1a;Funky_oaNiu 一、&#xff08;需求&#xff09;生成的表格效果&#xff1a;二、搞一个模板文件三、建立对应的表格实体类四、开始填充五、Vue3前端发起请求下载六、官方文档及AI问答 一、&#xff08;需求&#xff09;生成的表格效果&#xff1a; 其中只有顶部…

手机ip地址异常怎么解决

在现代社会中&#xff0c;手机已成为我们日常生活中不可或缺的一部分&#xff0c;无论是工作、学习还是娱乐&#xff0c;都离不开网络的支持。然而&#xff0c;有时我们会遇到手机IP地址异常的问题&#xff0c;这不仅会影响我们的网络体验&#xff0c;还可能带来安全隐患。本文…

Python酷库之旅-第三方库Pandas(218)

目录 一、用法精讲 1021、pandas.DatetimeIndex.inferred_freq属性 1021-1、语法 1021-2、参数 1021-3、功能 1021-4、返回值 1021-5、说明 1021-6、用法 1021-6-1、数据准备 1021-6-2、代码示例 1021-6-3、结果输出 1022、pandas.DatetimeIndex.indexer_at_time方…

基于 CentOS7.6 的 Docker 下载常用的容器(MySQLRedisMongoDB),解决拉取容器镜像失败问题

安装MySQL&Redis&MongoDB mysql选择是8版本&#xff0c;redis是选择4版本、mongoDB选择最新版&#xff0c;也可以根据自己的需要进行下载对应的版本&#xff0c;无非就是容器名:版本号 这样去拉去相关的容器镜像。如果你还不会在服务器中安装 docker&#xff0c;可以查…

讯飞、阿里云、腾讯云:Android 语音合成服务对比选择

在 移动端 接入语音合成方面&#xff0c;讯飞和腾讯云等都是优秀的选择&#xff0c;但各有其特点和优势。咱们的需求是需要支持普通话/英语/法语三种语言&#xff0c;以下是对各个平台的详细比较&#xff1a; 一、讯飞语音合成介绍 与语音听写相反&#xff0c;语音合成是将一段…

设计模式之责任链模式(Chain Of Responsibility)

一、责任链模式介绍 1、责任链模式介绍 职责链模式(chain of responsibility pattern) 定义: 避免将一个请求的发送者与接收者耦合在 一起&#xff0c;让多个对象都有机会处理请求。将接收请求的对象连接成一条链&#xff0c;并且沿着这条链 传递请求&#xff0c;直到有一个对…

游戏引擎学习第12天

视频参考:https://www.bilibili.com/video/BV1yom9YnEWY 这节没讲什么东西&#xff0c;主要是改了一下音频的代码 后面有介绍一些alloc 和malloc,VirtualAlloc 的东西 _alloca 函数&#xff08;或 alloca&#xff09;分配的是栈内存&#xff0c;它的特点是&#xff1a; 生命周…

更改liunx的磁盘名称

目录 1. 问题的提出 2. 机器环境说明 3. 解决方法 1. 问题的提出 今天在Linux上部署软件&#xff0c;发现要部署软件的硬盘名称带中文&#xff0c;当访问该磁盘时&#xff0c;中文则被转为长长的一串数字字符串&#xff0c;这很不方便&#xff0c;于是需要将带有中文的磁盘名…

基于Python 和 pyecharts 制作招聘数据可视化分析大屏

在本教程中&#xff0c;我们将展示如何使用 Python 和 pyecharts 库&#xff0c;通过对招聘数据的分析&#xff0c;制作一个交互式的招聘数据分析大屏。此大屏将通过不同类型的图表&#xff08;如柱状图、饼图、词云图等&#xff09;展示招聘行业、职位要求、薪资分布等信息。 …

论文PDF页面无法下载PDF

问题&#xff1a;通常在下载学术论文时&#xff0c;网页命名是PDF页面&#xff0c;但是无法下载PDF&#xff0c;下载的是html网页 解决&#xff1a; mac&#xff1a;按F12打开开发者界面 然后点击源代码/来源选项 然后打开下图所在位置&#xff0c;鼠标右键复制链接&#xff…

Ubuntu24 上安装搜狗输入法

link 首先在终端中依次输入以下代码 sudo apt update sudo apt install fcitx 找到语言支持 在终端中依次输入 sudo cp /usr/share/applications/fcitx.desktop /etc/xdg/autostart/ sudo apt purge ibus 进入网页 搜狗输入法linux-首页​ shurufa.sogou.com/linux 找到刚才下…

从0开始机器学习--Day27--主成分分析方法

主成分分析方法(Principal components analysis) 在降维算法中&#xff0c;比较普遍的是使用主成分分析方法&#xff08;PCA&#xff09; PCA算法简单示例 如图&#xff0c;假设我们有一个二维的特征&#xff0c;想要将其降为一维&#xff0c;简单的方法是寻找一条直线&#…

深度学习中的mAP

在深度学习中&#xff0c;mAP是指平均精度均值(mean Average Precision)&#xff0c;它是深度学习中评价模型好坏的一种指标(metric)&#xff0c;特别是在目标检测中。 精确率和召回率的概念&#xff1a; (1).精确率(Precision)&#xff1a;预测阳性结果中实际正确的比例(TP / …