木厶笔记存放站木厶笔记存放站
首页
文章
首页
文章
  • Web

    • 网络

      • 01-01 HTTP 基础
      • 01-02 HTTP1.1 首部字段
      • 01-03 HTTP 优化
      • 01-04 HTTPS
      • 01-05 TCP 和 UDP
      • 01-06 URI 和 URL
      • 01-07 Cookie 和 Session
      • 01-08 输入URL_至页面显示的过程
    • 安全

      • CSRF 攻击
      • JSON Web Token
      • sql 注入
      • XSS 攻击
    • 浏览器机制

      • 提升SEO
      • 浏览器内核
      • 浏览器的进程和线程
      • 浏览器缓存机制
      • 跨域
    • 场景实现

      • 优化大量图片加载
      • 扫码登录
    • 性能优化

      • 性能分析
      • 资源请求优化
      • 运行时优化
      • 重排重绘
      • 静态资源优化
  • HTML

    • HTML5基础

      • 01-01 简介
      • 01-02 全局属性
      • 01-03 特殊字符编码
      • 01-04 标签
      • 02-01 图片标签
      • 02-02 a标签
      • 02-03-1 video&audio
      • 02-03-2 AudioContext
      • 02-04 iframe
      • 02-05 表格标签
      • 03-01 form
      • 03-02 fieldset
      • 03-03 label
      • 03-04 input
      • 03-05 select
      • 03-06 datalist
      • 03-07 textarea
      • 03-08 progress
      • 03-09 meter
      • 04-01 dialog
      • 04-02 折叠标签
    • WEBAPI

      • 01-01 Canvas
      • 01-02 Canvas-绘制图形
      • 01-03 Canvas-画布处理
      • 01-04 Canvas-像素滤镜
      • 01-05 OffscreenCanvas
      • 01-06 Canvas-性能优化
      • 02-01 Svg
      • 02-02 Svg-d属性
      • 02-03 Svg-动画
      • 02-04 Svg-foreignObject
      • 03-01 customElements
      • 03-02 shadow-dom
      • 03-03 template
      • 04-01 Drag
  • CSS

    • 基础

      • 01-01 CSS 架构
      • 01-02 At规则
      • 01-03 媒体查询
      • 01-04 @support
      • 02-01 层叠顺序与堆栈上下文
      • 02-02 盒模型
      • 02-03 文档流
      • 02-04 float 浮动
      • 03-01 视觉格式化模型-基础概念
      • 03-02 视觉格式化模型-格式化上下文(FC)
      • 04-01-显示默认值
      • 05-01 RGB&HSL&HWB&LAB&LCH
      • 05-02 色域和颜色空间
      • 05-03 OKLCH&OKLAB
      • 05-04 相对颜色语法
      • 05-05 color-min()
      • 05-06 线性渐变
      • 05-07 径向渐变
      • 05-08 锥形渐变
      • 06-01 比较函数-min&max&clamp
      • 06-02 三角函数
      • 07-01 文本换行
      • 08-01 CSS变量
      • 08-02 @property
      • 09-01 相对单位
      • 10-01 CSS 嵌套
      • 11-01 固定宽高比
      • CSS 动画
      • 元素不可见
      • 雪碧图
    • CSS 选择器

      • 01 选择器优先级
      • 02 选择符
      • 03 属性选择器
      • 04 伪类
      • 05 树结构伪类
      • 06 逻辑选择器
      • 07 数学函数
    • 布局

      • flex 布局--实用
      • flex 布局
      • Grid 布局--实用
      • Grid 布局
      • 三栏布局
      • 两栏布局
      • 响应式布局
      • 移动端布局
    • 实用

      • 修改svg图片颜色
      • 初始化 CSS
      • 换肤
      • 文本省略号
      • 消除 inline-block 间隙
      • 自定义字体
    • CSS-揭秘

      • 2-1 半透明边框
      • 2-2 多重边框
      • 2-3 灵活的背景定位
      • 2-4 边框内圆角
      • 2-5 条纹背景
      • 2-6 复杂的背景图案
      • 2-8 连续的图像边框
      • 3-1 自适应的椭圆
      • 3-2 平行四边形
      • 3-3 菱形图片
      • 3-4 切角效果
      • 3-5 梯形标签页
      • 3-6 简单的饼图
      • 4-1 单侧投影
      • 4-2 不规则投影
      • 4-3 染色效果
      • 4-4 毛玻璃效果
      • 4-5 折角效果
      • 5-1 连字符断行
      • 5-2 插入换行
      • 5-3 文本行的斑马线条
      • 5-6 华丽的 & 符号
      • 5-7 自定义下划线
      • 5-8 现实中的文字效果
      • 5-9 环形文字
      • 6-1 选用合适的鼠标光标
      • 6-2 扩大可点击区域
      • 6-3 自定义复选框
      • 6-4-5 通过阴影(模糊)来弱化背景
      • 6-6 滚动提示
      • 6-7 交互式的图片对比控件
      • 7-1 自适应内部元素
      • 7-2 精确控制表格列宽
      • 7-3 根据兄弟元素的数量来设置样式
      • 7-4 满幅的背景,定宽的内容
      • 7-5 垂直居中
      • 7-6 紧贴底部的页脚
      • 8-1 缓动效果
      • 8-2 逐帧动画
      • 8-3 闪烁效果
      • 8-4 打字动画
      • 8-5 状态平滑的动画
      • 8-6 沿环形路径平移的动画
    • 奇妙属性

      • @property
      • mask
  • JavaScript

    • 基础

      • 2 script标签
      • 3-1 语法
      • 3-3 var let const
      • 3-4-1 typeof 和 instanceof
      • 3-4-2 Undefined 类型
      • 3-4-3 Null 类型
      • 3-4-4 Boolean 类型
      • 3-4-5 Number 类型
      • 3-4-6 String 类型
      • 3-4-7 Symbol 类型
      • 3-4-8 Object 类型
      • 3-4-9 BigInt 类型
      • 3-5 操作符
      • 3-6 隐式转换
      • 4-1 原始值和引用值
      • 4-2 执行上下文与作用域
      • 4-3 垃圾回收
      • 5-1 Date
      • 5-2 RegExp
      • 5-3 原始值包装类型
      • 5-4-1 Global 单例内置对象
      • 5-4-2 Math 单例内置对象
      • 6-2 Array
      • 6-3 Map
      • 6-4 WeakMap
      • 6-5 Set
      • 6-6 WeakSet
      • 7-1 迭代器与生成器
      • 8-1-1 Object 属性
      • 8-1-2 Object 构造函数方法
      • 8-1-3 Object 语法增强和解构
      • 8-2 Object 创建
      • 8-3 原型和继承
      • 8-4 class 类
      • 8-5 this
      • 8-6 可选链和空值合并运算符
      • 9 proxy 代理与反射
      • 10-1 Function 函数
      • 10-2 apply call bind
      • 10-3 闭包
      • 10-4 私有变量
      • 10-5 扩展运算符和 rest
      • 11-1 event loop 事件循环机制
      • 11-2 Promise 期约
      • 11-3 async await
      • 12-1 BOM
      • 14-1-1 DOM 节点
      • 14-1-2 DOM Document 类型
      • 14-1-3 DOM Element 类型
      • 14-1-4 DOM Text 和 Comment 类型
      • 14-2 动态脚本和动态样式
      • 14-3 MutationObserver 监听节点变化
      • 14-4 Intersection Observer
      • 16-2-1 操控样式
      • 16-2-2 元素尺寸
      • 16-3 DOM 深度优先遍历
      • 17-1 事件流
      • 17-2 事件处理程序
      • 17-3 事件对象
      • 17-4-1 UI 和焦点事件
      • 17-4-2 鼠标和滚轮事件
      • 17-4-3 键盘与输入事件
      • 17-4-4 HTML5 事件
      • 17-4-5 设备和触摸事件
      • 17-6 模拟事件
      • 18-1 requestAnimationFrame&requestIdleCallback
      • 18-2 canvas
      • 19-1 表单基础
      • 19-2 文本框编程
      • 19-3 选择框编程
      • 19-5 富文本编辑器
      • 20-10 Perfromance API
      • 20-11-1 HTML 模板
      • 20-11-2 影子 DOM
      • 20-11-3 自定义元素
      • 20-14 MessageChannel和BroadcastChannel
      • 20-15 AbortController
      • 20-4 File API 与 Blob API
      • 20-7 Notifications API
      • 20-8 Page Visibility API
      • 20-9 Streams API
      • 23 JSON
      • 24-03 Server-Sent-Events
      • 24-04 WebSocket
      • 24-1 XMLHttpRequest
      • 24-5 Fetch API
      • 25-01 cookie
      • 25-02 Web-Storage
      • 26-1 模块语法
      • 26-2 CommonJs 与 ES6 Module 的差异
      • 27-01 WebWorker
    • 设计模式

      • 单例模式
      • 发布订阅模式
      • 工厂模式
      • 策略模式
      • 装饰器模式
      • 观察者模式
      • 适配器模式
    • 手写实现

      • apply call bind
      • flat
      • instanceof
      • JSONP
      • new
      • Promise API
      • trim
      • 数组去重
      • 柯里化
      • 深拷贝
      • 防抖和节流
    • 场景题

      • 映射 URL 参数
      • 模拟红绿灯
      • 请求-丢弃旧时序的请求
      • 请求-并发请求
      • 通过 value 找 key
      • 闭包题
    • 移动端

      • touch 事件
      • visualViewport
      • 像素
      • 移动端布局
      • 视口 Viewport
    • 实用

      • better-scroll 滚动组件
      • Proxy实现英文字母升降序
      • 区别数组和对象
      • 图片懒加载
      • 按首字母排序的列表
      • 控制粘贴板
    • PIXI

      • 1 Application
      • 2 Graphics
      • 3 loader
      • 4 Sprite
      • 5 Spine
      • 6 事件
      • 7 Renderer
  • Node

    • 基础

      • crypto 加密模块
      • fs 模块
      • http 模块
      • mysql 模块
      • redis 模块
    • 框架

      • express
      • koa2
    • 实用

      • @elasticelasticsearch
      • restful Mock 数据
      • 自定义 Mock 数据
    • 错误

      • pm2-watch报错 502
      • spawn 中文乱码
  • Jquery

    • 基础

      • 事件
      • 动画
      • 工具方法
      • 操作 dom
      • 获取元素
  • TypeScript

    • 环境

      • config
      • 环境
    • 基础

      • 01 原始类型和特殊类型
      • 02 字面量和类型拓宽
      • 03 interface 和 type
      • 04 数组和元组
      • 05 class(类)
      • 06 函数和重载
      • 07 联合类型和交叉类型
      • 08 泛型
      • 09 类型推断和类型断言
      • 10 匹配提取
      • 11 重新构造
      • 12 递归循环
      • 13数组长度做计数
      • 14 特殊特性
      • 15 内置高级类型
      • 16 inter extends
      • 17 协变和逆变
  • Vue

    • 环境

      • 安装
      • 自定义环境变量
    • 基础(2.x)

      • data
      • keep-alive
      • nextTick
      • props和sync
      • ref
      • v-for和v-if
      • 事件绑定
      • 动态组件
      • 动画
      • 循环渲染
      • 插槽 slot
      • 条件渲染
      • 样式绑定
      • 模板语法
      • 生命周期
      • 组件通讯
      • 自定义指令
      • 表单绑定
      • 计算属性和监听器
    • 基础(3.x)

      • Composition API
      • Script setup
      • Suspense
      • sync 语法糖
      • Teleport
      • vue3的升级点
      • 常用动画
      • 生命周期
    • router

      • vue-router 3
      • vue-router 4
    • vuex

      • pinia
      • vuex
      • vuex4
      • 刷新不丢失 vuex
    • 底层

      • MVVM
      • 双向绑定
      • 响应式
      • 模板编译
      • 渲染过程
      • 虚拟DOM和diff算法
    • 应用

      • 权限管理
  • React

    • 环境

      • 安装
      • 自定义环境变量
    • 基础

      • JSX
      • ref
      • SCU
      • 不可变数据 setState
      • 事件
      • 动画
      • 异步组件
      • 插槽
      • 条件
      • 生命周期
      • 组件公共逻辑抽离
      • 组件通讯
      • 表单
      • 逃离组件 portals
    • hooks

      • hooks
      • react-query
      • useClickOutSide —— 点击外面
      • useDebounce —— 防抖
      • useURLQueryParam —— 输入框值与search绑定
    • router

      • react-router-com 6
      • react-router-dom hooks
      • react-router-dom
    • redux

      • react-redux
      • redux 与 hooks
      • redux-persist
      • redux-thunk
      • redux-toolkit
      • redux
    • 底层

      • JSX本质
      • setState 原理
      • 合成事件
    • 实用

      • CSS-in-JS
      • 字体库
      • 数组优化为哈希表
      • 组件的子元素只能是规定的元素
  • Echarts

    • 基础

      • 仪表盘
      • 基础
      • 折线图
      • 散点图
      • 柱状图
      • 雷达图
      • 饼图
  • Electron

    • 环境

      • 基本安装
      • 集合 react
    • 基础

      • Dialog
      • 原生菜单
      • 右键菜单
      • 进程
  • 前端工程化

    • babel

      • babel7 实践
      • 工作原理
      • 生态
    • Browserslist

      • 基础
    • npm

      • npm模块安装机制
      • npm脚本
    • qiankun

      • 隔离原理
    • Vite

      • css
      • gzip-打包
      • vite config 常见配置
      • 环境
      • 静态资源
    • webpack

      • css环境
      • js&ts环境
      • loader
      • loader和plugin的区别及编写
      • plugin
      • splitChunks
      • webpack5--模块联邦
      • 代码压缩
      • 优化性能
      • 图片
      • 性能分析工具
      • 提高构建速度
      • 构建性能--并行
      • 构建性能--持久化缓存
      • 热更新
    • 代码提交规范

      • husky&lint-staged
  • Java

    • 环境

      • idea 创建 maven-archetype-webapp
      • spring boot web 的配置参考
      • spring 从初始配置
      • 与 git 集合
    • Web 基础

      • mybatis pager的应用
      • [] 和 List 和 Set
      • 全局 cors 跨域
      • 接口例子——登录
      • 文件接口——图片
      • 有效时间的唯一字符串
      • 自定义类
      • 通用的泛型服务端响应对象
  • Elastic

    • 基础

      • 分词规则
      • 基础概念
      • 基础语法
      • 环境搭建
    • 实用

      • canal——数据库准实时导入
      • logstash——数据库基于时间轴导入
  • Mysql

    • 基础

      • 字段操作
      • 数据库操作
      • 查询操作
      • 表操作
  • Python

    • 基础

      • 1-1-Number
      • 1-2-String
      • 1-3-list和tuple
      • 1-4-序列
      • 1-5-set
      • 1-6-dict
      • 2-1-运算符
      • 2-2-对象比较
      • 3-1-条件判断
      • 3-2-循环
      • 4-1-模块-包
      • 4-2-模块-__init__
      • 4-3-模块-内置变量
      • 4-4-模块-导入
      • 5-1-解包
      • 5-2-函数参数
      • 5-3-作用域
      • 5-4-高阶函数&三元表达式
      • 6-1-类
      • 6-2-类的继承
      • 6-3-枚举
      • 7-1-json
      • 8-1-文件IO
      • 8-2-pathlib
  • Flutter

    • 环境

      • 创建及运行项目
      • 第三方库
      • 运行环境
      • 静态资源
    • Dart

      • dynamic var object
      • List
      • Map
      • Number
      • Set
      • String
      • URI
      • 函数
      • 变量
      • 库
      • 异步
      • 流程控制语句
      • 类
      • 运算符
    • 基础

      • 1 Widget
      • 2 StatelessWidget & StatefulWidget
      • 3 State生命周期
      • 4 状态管理
      • 5 路由
    • 基础组件

      • Button
      • Text
      • 单选开关和复选框
      • 图片及ICON
      • 表单
      • 输入框
      • 进度指示器
    • 布局组件

      • 1 布局约束
      • 2 线性布局(Row & Column)
      • 3 弹性布局(Flex)
      • 4 流式布局(Wrap & Flow)
      • 5 层叠布局(Stack & Positioned)
      • 6 绝对定位(Align)
      • 7 LayoutBuilder & AfterLayout
    • 容器类组件

      • Container
      • Scaffold
      • 变换-Transform
      • 空间适配-FittedBox
      • 裁剪-Clip
      • 装饰-DecoratedBox
    • 可滚动组件

      • SingleChildScrollView
      • 通用属性
  • Git

    • 基础

      • Git commit message 规范
    • 实用

      • cherry-pick
      • stash
      • 分支&修改最近一次commit
      • 撤销
  • 算法

    • 基础

      • leetcode
      • 时间复杂度
    • 收录

      • 阿拉伯数字转中文
    • 数据结构

      • 哈希表、集合
      • 并查集
      • 数组、链表、跳表
      • 栈、队列
      • 树、二叉树、二叉搜索树
    • 算法

      • DFS 和 BFS
      • 二分查找
      • 二叉树路径问题题目
      • 动态规划2--基础题
      • 动态规划2--背包问题
      • 区间类题目
      • 岛屿类题目
      • 排列组合子集类题目
      • 排序算法
      • 摩尔投票
      • 递归
      • 链表
  • 部署

    • centos8

      • bitwarden_rs
      • ElasticSearch
      • git
      • https及http2
      • mac 向 centos 传输文件
      • nginx
      • nvm
    • 其他

      • docker
      • sitemap
      • 重装系统
  • 图形学

    • 基础

      • 1 三角函数
      • 2 斜率k
      • 3 向量
      • 4 矩阵
  • AI

    • huggingface

      • 01-01-使用和下载模型
      • 01-02-数据集
      • 01-03-文本分类任务微调
    • langchain

      • 01-01-Message
      • 01-02-promptTemplate-提示词模版
      • 01-03-outputParser-输出解析器
      • 01-04-fewShot
      • 02-01-LECL&chain
      • 02-02-stream
      • 03-01-debug
      • 04-01-多模态
      • 05-01-tool
      • 06-01-agent
      • 07-01-embedding基础
      • 07-02-向量数据库
      • 08-01-RAG
    • langgraph

      • 1-01-图
      • 1-02-1-状态
      • 1-02-2-消息状态
      • 1-03-节点
      • 1-04-边
      • 1-05-Send
      • 1-06-Command
      • 1-07-配置-configurable
      • 1-08-1-内存持久性
      • 1-08-2-删除持久消息
      • 1-08-3-向量数据库
      • 1-08-4-持久上下文token优化
      • 1-09-1-工具
      • 1-09-2-大量工具优化
      • 1-10-1-人机交互-interrupt
      • 1-10-2-人机交互-interrupt_before
      • 1-11-1-流式输出
      • 1-11-2-自定义流式传输
      • 1-11-3-输出特定的流式消息
      • 1-12-1-子图
      • 1-13-1-ReAct
    • mcp

      • 01-简介
      • MCP Client nodejs
      • MCP Server Python
      • MCP Server TS
    • prompt

      • 提示词策略
      • 输出output

媒体查询

使用媒体查询

HTML 中使用

  1. 在 <head> 中的 <link> 元素,通过它来引用不同的 CSS 样式文件,并且通过 media 属性来指定媒体查询的条件
<head>
    <!-- 所有用户 -->
    <link rel="stylesheet" href="all.css" media="all" />

    <!-- 浏览器视窗宽度至少是20em,相当于 Mobile -->
    <link rel="stylesheet" href="small.css" media="(min-width: 20em)" />

    <!-- 浏览器视窗宽度至少是64em, 相当于 Tablet -->
    <link rel="stylesheet" href="medium.css" media="(min-width: 64em)" />

    <!-- 浏览器视窗宽度小于是90em,相当于 Desktop -->
    <link rel="stylesheet" href="large.css" media="(min-width: 90em)" />

    <!-- 浏览器视窗宽度至少是 120em,超大屏幕,比如 TV -->
    <link rel="stylesheet" href="extra-large.css" media="(min-width: 120em)" />

    <!-- 用于打印设备 -->
    <link rel="stylesheet" href="print.css" media="print" />
</head>
  1. 在 <picture> 的 <source> ,通过它来引用不同的图片资源,并且通过 media 属性来指定媒体查询的条件
<picture> 
    <source media="(max-width: 799px)" srcset="./elva-480w-close-portrait.jpeg"> 
    <source media="(min-width: 800px)" srcset="./elva-800w.jpeg"> 
    <img src="./elva-800w.jpeg" alt="Chris standing up holding his daughter Elva"> 
</picture>
  1. 在 <style> 元素设置 media 属性的值,用来指定媒体查询所需要匹配的条件
<style media="all and (max-width: 500px)">
    p {
        background-color: yellow;
        color: blue;
    }
</style>

CSS 中使用

  1. 使用 @media 查询规则
@media only screen and (min-width: 961px) {
    body {
        background-color: #b2d6ff;
    }
}
  1. 在样式表中使用 @import 引入 .css 文件,并在其后面紧跟媒体查询
@import "print.css" print; 
@import "mobile.css" (max-width: 320px); 

JS 中使用

将媒体查询字符串传递给 matchMedia(),其会返回 MediaQueryList 对象,然后检查对象中 matches 属性,可判断Document 是否匹配媒体查询

通过MediaQueryList 对象的 addEventListener 方法可以监听 change,但媒体查询情况改变时,会触发方法

逻辑运算符

  • and:运算符用于将多个媒体查询规则组合成单条媒体查询,当每个查询规则都为真时则该条媒体查询为真(即 & 逻辑)
@media screen (width > 300px) and (height > 800px) {}
  • not:运算符用于否定媒体查询,如果不满足这个条件则返回 true,否则返回 false。 如果出现在以逗号分隔的查询列表中,它将仅否定应用了该查询的特定查询。如果使用 not 运算符,则还必须指定媒体类型。
@media not print {}

@media screen not (width > 300px) {}
  • , (逗号) :逗号用于将多个媒体查询合并为一个规则。 逗号分隔列表中的每个查询都与其他查询分开处理。 因此,如果列表中的任何查询为 true,则整个 media 语句均返回 true。 即 | 逻辑,(or)运算符

比较操作符

Media Queries Level 4 规范中新增了操作符:

  • < :计算一个值是否小于另一个值
  • > :计算一个值是否大于另一个值
  • = :计算一个值是否等于另一个值
  • >= :计算一个值是否大于或等于另一个值
  • <= :计算一个值是否小于或等于另一个值

老式查询方式:

@media (min-width: 375px) { 
    /* 视窗宽度大于或等于 375px */ 
}

@media (max-width: 768px) { 
    /* 视窗宽度小于或等于 768px */
}

@media (min-width: 375px) and (max-width: 768px) { 
    /* 视窗宽度在 375px ~ 768px 之间 */ 
}

使用新比较操作符(更易使用和理解):

@media (width >= 375px) {
    /* 视窗宽度大于或等于 375px */ 
}

@media (width <= 768px) { 
    /* 视窗宽度小于或等于 768px */
}

@media (375px <= width <= 768px) { 
    /* 视窗宽度在 375px ~ 768px 之间 */ 
} 

媒体特性 -- 视窗和页面媒体特性

width 和 height

可以使用 width 和 height 来查询终端设备上浏览器视窗的精确宽度或高度

orientation

  • portrait:竖屏,屏幕视窗高度大于宽度
  • landscape:横屏,屏幕视窗宽度大于高度

当视窗高度大宽度时,竖屏(portrait)就会触发

当视宽宽度大于高度,横屏(landscape)就会被触发

resolution

使用 resolution 媒体特性可以测试显示像素密度

在使用 resolution 时也可像 width 类似,添加 min- 和 max- 做前缀:

@media (min-resolution: 72dpi) { 
	p { 
		text-decoration: underline; 
	} 
}

另外还可以使用 x 来替代 dppx:

@media (min-resolution: 1x) { 
	body { 
		background-color: #f36; 
	} 
}

在旧浏览器还没有 resolution 媒体查询,但它有一个和该特性等同的私有特性,即 -webkit-device-pixel-ratio,它接受一个没有单位的数字:

@media (-webkit-min-device-pixel-ratio: 1), (min-resolution: 1x) { 
	body { 
		background-color: #f36; 
	} 
}

color-gamut

  • srgb:sRGB 颜色空间是指由红、绿、蓝三组值表示,它们标识了 sRGB 颜色空间中的一个点
  • p3:它是现代 iPhone 所使用的,通常被称为“宽色域”(或“丰富色域”),指的是 Display-p3,Display-P3 颜色空间颜色要比 sRGB 颜色空间中的颜色更鲜艳,也可以说 Display-p3 是 sRGB 的一个超集,大约要大 35%
  • rec2020:这是目前可用的最大的色彩空间
p {
  color: rgb(255 0 0);
}

/* 支持p3(Display-p3)颜色空间 */
@media (color-gamut: p3) {
  p {
    color: color(display-p3 1 0 0); 
  }
}

hover

检测用户的主要输入机制是否能够悬停在元素上

  • none 检测主要输入机制不能悬停或不能方便地悬停,如大多数手机和平板电脑;
  • hover 检测主要输入机制能够悬停在元素上(例如,台式电脑、笔记本电脑和带有触控笔的智能手机)。

在某些需要悬停的才能显示重要信息的情况下:

但在手机端,不存在悬浮的能力,应该直接展示这些信息,所以将元素悬浮状态下的效果都放置在 @media (hover:hover) {} 媒体查询块中

@media (hover: hover) {
  .card:hover {
    animation: xxx;
  }
}

pointer + hover

不同设备类型对各种交互媒体特性的支持情况:

媒体特性触摸屏幕触摸屏幕+鼠标台式机或笔记本电脑台式机或笔记本电脑+触摸屏
pointer:coarse✓✓✗✗
pointer:fine✗✗✓✓
hover:none✓✓✗✗
hover:hover✗✗✓✓
any-pointer:coarse✓✓✗✓
any-pointer:fine✗✓✓✓
any-hover:none✓✗✗✗
any-hover:hover✗✓✓✓

比如要检测设备是带有鼠标、触控版的设备(如 Mac 电脑,iPad 等)

@media (hover: hover) and (pointer: fine) { }

媒体特性 -- 用户偏好设置

prefers-reduced-motion

使用 prefers-reduced-motion 媒体查询用于检测用户的系统是否被开启了动画减弱功能:

  • no-preference:用户未修改系统动画相关特性
  • reduce:这个值意味着用户修改了系统设置,将动画效果最小化,最好所有的不必要的移动都能被移除

可以在代码中加入一下css代码,实现设置动画减弱功能后(和设备性能差情况),快速播放动画

@media screen and (prefers-reduced-motion: reduce), (update: slow) { 
  * { 
    animation-duration: 0.001ms !important; 
    animation-iteration-count: 1 !important; 
    transition-duration: 0.001ms !important; 
  } 
} 

prefers-contrast prefers-contrast

检测用户是否要求系统增加或减少相邻颜色之间的对比度。比如一些喜欢阅读电子书的用户,在阅读与文本背景对比度相差不大的文本时会遇到困难,他们更喜欢较大的对比度,利于阅读:

  • no-preference:用户未向系统显式设置任何首选项。此关键字值在布尔上下文中计算为 false
  • high:用户更喜欢对比度较高的界面
  • low:用户更喜欢对比度较低的界面

prefers-reduced-transparency

用于检测用户是否要求系统最小化它所使用的透明或半透明层效果。换句话说,一些操作系统提供了减少系统使用透明或半透明分层效果的选项

  • no-preference:用户未向系统显式设置任何首选项
  • reduce:用户更喜欢最小化透明或半透明层效果的界面
.transparency { 
  opacity: 0.5; 
} 

@media (prefers-reduced-transparency: reduce) { 
  .transparency { 
    opacity: 1; 
  } 
}

prefers-color-scheme

检测用户是否打开了设备上 Dark Mode

forced-colors

检测用户代理是否启用了强制颜色模式

  • none:强制色彩模式不活跃,页面的颜色没有被限制在一个有限的调色板中
  • active:强制色彩模式已开启
.colors { 
    background-color: red; 
    color: grey; 
} 

@media (forced-colors: active) { 
  .colors { 
    background-color: white; 
    color: black; 
  } 
}

prefers-reduced-data

检测用户设备是否启用了低流量模式

  • none:没有开启低流量模式
  • reduce:开启
.image { 
    background-image: url("images/heavy.jpg"); 
} 

@media (prefers-reduced-data: reduce) { 
  .image { 
    background-image: url("images/light.avif"); 
  } 
} 

light-level

可以根据用户是在白天还是晚上来调整 Web 页面或应用的样式:

  • dim:该设备是在昏暗的环境中使用的。在这种环境中,过高的对比度和亮度会分散读者的注意力或让用户阅读时眼睛不舒服
  • normal:该设备是在一个环境中使用的光水平在理想的范围内,这并不需要任何特定的调整
  • washed:该设备是在非常明亮的环境下使用的,导致屏幕被洗掉,难以阅读

媒体特性 -- 双屏幕和可折叠媒体

随着技术不断的发展,我们所面对的终端个性化越来越强,比如现在市场上已有或将有的双屏幕和可折叠屏幕设备

页面要具备这种跨越屏幕的能力,也要具备响应这种跨越的能力,以及还可能需要具备逻辑分隔内容的能力等

可以如下使用:

/* 有缝折叠 */
@media (spanning: single-fold-vertical) { 
  /* CSS Code... */
} 

/* 无缝折叠 */
@media (screen-fold-posture: laptop){ 
  /* CSS Code... */ 
} 

/* 折叠角度查询 */
@media (max-screen-fold-angle: 120deg) { 
  /* CSS Code... */
} 

/* 视口数量查询 */
@media (horizontal-viewport-segments: 2) { 
  /* CSS Code... */ 
}

@media (vertical-viewport-segments: 2) { 
  /* CSS Code... */
} 
最近更新: 2025/11/13 00:05
Contributors: kingmusi
Prev
01-02 At规则
Next
01-04 @support