当前位置: 首页 > news >正文

响应式CSS 媒体查询——WEB开发系列39

CSS媒体查询(Media Queries)是响应式设计中的核心技术之一,帮助我们在不同设备上展示不同的样式。通过媒体查询,开发者可以检测用户设备的特性,如屏幕宽度、高度、分辨率、方向等,针对性地调整网页布局。


一、CSS媒体查询基础

1.1 什么是媒体查询?

媒体查询是CSS3引入的一种技术,允许开发者根据用户的设备特性应用不同的样式规则。它不仅可以检测设备的类型,还能检查诸如设备宽度、高度、分辨率等特性。通过媒体查询,可以实现同一页面在不同设备上呈现不同的布局。


1.2 媒体类型(Media Types)

媒体类型是媒体查询中的基础,它定义了应用媒体查询的设备类型。常见的媒体类型包括以下几种:

  • all:适用于所有设备,不限制设备类型。这是默认的媒体类型,即如果没有指定其他类型,媒体查询将应用于所有设备。
  • print:用于打印机或打印预览时应用的样式。这种媒体类型在设计打印样式时非常有用,可以确保页面在打印时格式正确,隐藏一些不必要的内容,如导航栏等。
  • screen:专为屏幕设备设计的样式,适用于电脑、平板、手机等显示屏幕的设备。
  • speech:用于屏幕阅读器等有声设备,帮助为语音输出设备提供优化样式。

示例:

/* 适用于所有设备 */
@media all {body {font-size: 16px;}
}/* 适用于屏幕设备 */
@media screen {body {background-color: #f4f4f4;}
}/* 适用于打印机 */
@media print {body {color: black;}
}

1.3 媒体特征规则(Media Features)

媒体特征是媒体查询的核心部分,允许开发者根据设备的特性应用样式。常见的媒体特征包括设备的宽度、高度、分辨率和方向等。以下是几个关键的媒体特征:


1.3.1 宽度和高度(Width & Height)

​width​​和​​height​​​分别表示设备视口的宽度和高度,这两个特征通常用于针对不同设备的尺寸调整布局。例如,手机的屏幕较窄,通常需要在窄屏设备上显示单列布局,而宽屏设备可以显示多列布局。

/* 适用于视口宽度大于等于768px的设备 */
@media screen and (min-width: 768px) {body {font-size: 18px;}
}/* 适用于视口宽度小于768px的设备 */
@media screen and (max-width: 768px) {body {font-size: 16px;}
}
1.3.2 朝向(Orientation)

​orientation​​媒体特征用于检测设备的屏幕朝向,分为​​portrait​​(竖屏)和​​landscape​​​(横屏)。这对于处理移动设备的屏幕旋转非常有用。

/* 适用于竖屏设备 */
@media screen and (orientation: portrait) {body {background-color: lightblue;}
}/* 适用于横屏设备 */
@media screen and (orientation: landscape) {body {background-color: lightcoral;}
}
1.3.3 使用指点设备(Pointer)

​pointer​​媒体特征用于检测用户是否使用了指点设备(如鼠标、触控笔)。它有三个可能的值:

  • none:表示设备没有指点能力。
  • coarse:表示设备使用粗略的指点设备,如手指。
  • fine:表示设备使用精确的指点设备,如鼠标。
/* 适用于使用精确指点设备的设备,如鼠标 */
@media (pointer: fine) {body {cursor: pointer;}
}/* 适用于使用粗略指点设备的设备,如手指 */
@media (pointer: coarse) {body {cursor: default;}
}

二、更复杂的媒体查询

CSS媒体查询不仅可以通过单一特征进行判断,还可以通过逻辑运算符构建更加复杂的查询条件。下面将介绍如何通过“与”、“或”和“非”逻辑组合媒体查询。


2.1 媒体查询中的“与”逻辑(​​and​​)

​and​​​运算符允许开发者组合多个媒体特征,只有当所有特征条件都满足时,样式才会生效。例如,我们可以同时检测设备的宽度和屏幕朝向,只有当设备宽度大于768px且为竖屏时,才应用特定的样式。

/* 适用于宽度大于等于768px且为竖屏的设备 */
@media screen and (min-width: 768px) and (orientation: portrait) {body {background-color: lightgreen;}
}

2.2 媒体查询中的“或”逻辑(​​or​​)

​or​​​运算符可以通过多个查询条件中的任意一个满足条件时应用样式。通过逗号分隔多个条件实现“或”逻辑。

/* 适用于宽度大于等于1024px的设备或横屏设备 */
@media screen and (min-width: 1024px), screen and (orientation: landscape) {body {background-color: lightyellow;}
}

2.3 媒体查询中的“非”逻辑(​​not​​)

​not​​​运算符用于排除某些条件,即当条件不满足时应用样式。

/* 不适用于屏幕设备 */
@media not screen {body {display: none;}
}

三、如何选择断点

断点是媒体查询中定义不同样式的关键点。选择合理的断点可以确保网页在各种设备上表现良好。一般情况下,断点应基于内容,而非设备。常见的做法是根据内容的布局需求设定断点,而不是针对具体设备型号。


3.1 常用断点示例

/* 小屏设备(如手机) */
@media screen and (max-width: 600px) {body {font-size: 14px;}
}/* 中等屏设备(如平板) */
@media screen and (min-width: 601px) and (max-width: 1024px) {body {font-size: 16px;}
}/* 大屏设备(如桌面) */
@media screen and (min-width: 1025px) {body {font-size: 18px;}
}

3.2 内容优先原则

选择断点时,应遵循内容优先原则,即根据网页的内容来确定何时需要更改布局。例如,当一个多列布局在较窄的屏幕上变得难以阅读时,这就是一个适合定义断点的时机。


四、移动优先的响应式设计

移动优先(Mobile First)是现代响应式设计的基本理念,指的是首先为移动设备设计页面样式,然后通过媒体查询为更大屏幕设备添加样式。这种设计方式确保页面在小屏设备上的加载和展示更高效,适合当前移动设备用户量大幅增长的趋势。

4.1 移动优先的媒体查询

在移动优先设计中,我们通常使用​​min-width​​​媒体查询,即默认样式适用于所有设备,然后通过断点逐步为更大屏幕的设备添加样式。​

/* 默认样式适用于移动设备 */
body {font-size: 14px;
}/* 适用于平板和桌面设备 */
@media screen and (min-width: 768px) {body {font-size: 16px;}
}/* 适用于桌面设备 */
@media screen and (min-width: 1024px) {body {font-size: 18px;}
}

可以看到移动设备优先设计的思想,即所有设备默认使用小屏设备的样式,然后针对更大的屏幕逐步增强样式。


如有表述错误及欠缺之处敬请指正补充。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 安卓framework美化手势导航侧滑返回UI
  • 使用CUBE_MX实现STM32 DMA 功能(存储器到存储器)
  • 打开VSCod安装“PHP Intelephense”或“PHP Server”PHP扩展
  • 通过SQL语句判断奇偶数的几种方法
  • QXml 使用方法
  • 物联网之ESP32与微信小程序实现指示灯、转向灯
  • FloodFill算法(DFS+BFS)【上】
  • NLP基础及其代码-tokenizer
  • 如何保证消息不重复消费
  • 【Power Compiler手册】13.UPF多电压设计实现(3)
  • Vant 按需引入导致 Typescript,eslint 报错问题
  • 【专题】2024跨境出海供应链洞察-更先进供应链报告合集PDF分享(附原数据表)
  • 什么是 Grafana?
  • 【组件】前端js HEIC/HEIF 转换为JPEG、PNG或GIF格式 苹果格式
  • 前端开发macbook——NVM环境配置以及git配置流程
  • 自己简单写的 事件订阅机制
  • .pyc 想到的一些问题
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • angular学习第一篇-----环境搭建
  • ECMAScript6(0):ES6简明参考手册
  • IDEA常用插件整理
  • jdbc就是这么简单
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • leetcode98. Validate Binary Search Tree
  • mac修复ab及siege安装
  • python 装饰器(一)
  • quasar-framework cnodejs社区
  • SpringBoot几种定时任务的实现方式
  • 订阅Forge Viewer所有的事件
  • 那些年我们用过的显示性能指标
  • 三栏布局总结
  • 提醒我喝水chrome插件开发指南
  • 线上 python http server profile 实践
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 进程与线程(三)——进程/线程间通信
  • ​低代码平台的核心价值与优势
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #大学#套接字
  • $().each和$.each的区别
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (13)DroneCAN 适配器节点(一)
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (21)起落架/可伸缩相机支架
  • (4)Elastix图像配准:3D图像
  • (AngularJS)Angular 控制器之间通信初探
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二十六)Java 数据结构
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214