CSS的媒体查询:响应式布局的利器

news2024/10/6 17:19:13

Hippopx (2).jpg
在这里插入图片描述

关于CSS的媒体查询

CSS媒体查询是CSS层叠样式表(Cascading Style Sheets)中的一个核心功能,它使得开发者能够根据不同的设备特性和环境条件来应用不同的样式规则。这是实现响应式网页设计的关键技术,确保网站或应用能够在多种设备上,包括桌面、平板、手机等,提供良好的用户体验。

基础语法

媒体查询的基本结构如下:

@media media-type and (media-feature: value) {
    /* CSS 样式规则 */
}

选项解释

  • media-type:定义媒体类型,如 screen(用于电脑屏幕、手机屏幕等)、print(用于打印)、speech(用于屏幕阅读器)。默认值为 all,意味着规则适用于所有类型的媒体。
  • media-feature:媒体特性,用来检查设备的特定条件,比如视口宽度(width)、高度(height)、设备像素比(device-pixel-ratio)、颜色(color)等,这些特性允许你根据不同的设备条件和环境来定制样式。
  • value:媒体特性所对应的值或范围。
  • and, not, only:逻辑操作符,用于结合多个媒体类型或特性,实现更复杂的查询条件。

常见媒体特性

CSS媒体查询支持多种媒体特,以下是一些常用的媒体特性的详细说明:

  1. 宽度和高度特性:
  • width: 目标输出设备的视口宽度。
  • min-width: 视口宽度的最小值。
  • max-width: 视口宽度的最大值。
  • height: 目标输出设备的视口高度。
  • min-height: 视口高度的最小值。
  • max-height: 视口高度的最大值。
  1. 分辨率和像素比:
  • device-width 和 device-height: 设备的屏幕物理宽度和高度。
  • min-device-width 和 max-device-width: 设备屏幕物理宽度的最小值和最大值。
  • min-device-height 和 max-device-height: 设备屏幕物理高度的最小值和最大值。
  • resolution: 设备的分辨率,可以是dpi(每英寸点数), dpcm(每厘米点数)或 dppx(每像素点数)。
  • min-resolution 和 max-resolution: 分辨率的最小值和最大值。
  1. 方向和比例:
  • orientation: 设备的方向,取值为portrait(竖屏)或landscape(横屏)。
  • aspect-ratio: 输出设备的宽高比,格式为x/y。
  • device-aspect-ratio: 设备的屏幕宽高比。
  1. 颜色和颜色索引:
  • color: 设备的颜色位数。
  • min-color 和 max-color: 设备颜色位数的最小值和最大值。
  • color-index: 设备的颜色索引数。
  • min-color-index 和 max-color-index: 设备颜色索引数的最小值和最大值。
  1. 环境和设备特性:
  • monochrome: 单色设备的颜色位数。
  • grid: 是否为网格设备,如终端。
  • scan: 显示设备的扫描方式,如progressive(逐行扫描)或interlace(隔行扫描)。
  • update-frequency: 显示更新频率,如slow或fast。
  1. 其他特性:
  • any-hover: 检测是否有任何指针设备能悬停。
  • any-pointer: 指针精度,如fine、coarse或none。
  • hover: 指针是否能悬停。
  • pointer: 主要输入设备的精度。
  • inverted-colors: 用户是否启用了颜色反转。
  • prefers-color-scheme: 用户偏好颜色方案,如light、dark或no-preference。
  • prefers-reduced-motion: 用户是否偏好减少动画或运动。
  • prefers-contrast: 用户的对比度偏好,如no-preference、high或low。

使用示例

假设我们要为宽度小于等于480px的设备设置特定样式,可以这样写:

@media (max-width: 480px) {
    body {
        font-size: 14px;
    }
}

这段代码意味着,当视口宽度不超过480像素时,body元素的字体大小会被设置为14像素。

复杂的设计可能需要结合多个条件,例如:如果视口宽度在大于480,小于1000的时候,body元素的字体大小会被设置为18像素;如果视口宽度大于1000的时候,body元素的字体大小会被设置为22像素

@media  (min-width: 480px) and (max-width: 1000px) {
    body{
       font-size: 18px;
    }
}
@media  (min-width: 1000px) {
    body{
       font-size: 22px;
    }
}

实战应用

媒体查询广泛应用于响应式设计中,允许开发者根据不同设备的特性和用户的浏览环境,灵活地调整布局、字体大小、图片尺寸等,确保内容的可读性和易用性。

以下是几个CSS媒体查询的实战例子,这些示例覆盖了响应式设计中常见的应用场景:

  1. 调整字体大小以适应小屏幕

在屏幕宽度小于600px时减小文本的字体大小,以提高阅读体验。

@media (max-width: 600px) {
    body {
        font-size: 14px;
    }
}
  1. 切换导航栏布局

当屏幕宽度足够大时,显示水平导航栏;当屏幕较窄时,将其转换为垂直折叠式导航。

/* 默认样式,可能适用于移动端 */
.navbar {
    display: flex;
    flex-direction: column;
}

/* 当屏幕宽度至少为768px时,变为水平布局 */
@media (min-width: 768px) {
    .navbar {
        flex-direction: row;
    }
}

  1. 隐藏和显示内容

在小屏幕上隐藏某些非核心内容或组件,以减少信息密度,提升用户体验。

.sidebar {
    display: block;
}

@media (max-width: 992px) {
    .sidebar {
        display: none;
    }
}

  1. 优化图片展示

根据屏幕尺寸加载不同分辨率的图片,节省流量并提升加载速度。

<img src="image-mobile.jpg" srcset="image-desktop.jpg 1024w, image-tablet.jpg 768w" alt="Example Image">

<!-- CSS -->
@media (min-width: 769px) {
    img[src*="mobile"] {
        content: url("image-tablet.jpg");
    }
}

@media (min-width: 1025px) {
    img[src*="tablet"] {
        content: url("image-desktop.jpg");
    }
}

  1. 调整列布局

在不同屏幕尺寸下自动调整网格布局,比如从单列到两列再到多列布局。

.container {
    display: grid;
    grid-template-columns: repeat(1, 1fr);
}

@media (min-width: 768px) {
    .container {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (min-width: 1024px) {
    .container {
        grid-template-columns: repeat(3, 1fr);
    }
}

实战进阶

以上示例展示了媒体查询如何帮助我们根据不同的设备条件和屏幕尺寸来调整网页的视觉表现,从而实现更加灵活和优化的响应式设计。当然,还有一些更高级的用法,以实现更细致的设备特性和更精细的布局调整方面的灵活性。

  1. 结合多个条件调整布局

当屏幕宽度在992px到1199px之间,并且设备处于横屏状态时,对页面布局进行特殊调整。

@media (min-width: 992px) and (max-width: 1199px) and (orientation: landscape) {
    .content {
        grid-template-columns: 2fr 1fr;
    }
    .sidebar {
        order: 1;
    }
}

  1. 使用特性查询来改变滚动行为

在触摸屏设备上启用更平滑的滚动体验。

@media (hover: none) and (pointer: coarse) {
    body {
        overflow-y: scroll;
        -webkit-overflow-scrolling: touch;
    }
}
  1. 根据颜色深度调整图像

针对具有高色彩深度显示的设备提供更高品质的图像资源。

@media (color-gamut: p3) {
    .high-color-image {
        content: url('image-p3-color-gamut.jpg');
    }
}

  1. 动态调整字体大小以适应不同的阅读距离

根据设备的像素密度调整字体大小,以确保在不同设备上字体的物理尺寸一致。

@media (min-resolution: 2dppx) {
    body {
        font-size: calc(16px + (24 - 16) * ((100vw - 320px) / (1600 - 320)));
    }
}

  1. 针对不同分辨率和方向优化视频尺寸

在宽屏设备上保持视频的宽高比,并在窄屏设备上全屏显示视频。

@media (min-aspect-ratio: 16/9) {
    video {
        width: 100%;
        height: auto;
    }
}

@media (max-aspect-ratio: 16/9) {
    video {
        width: auto;
        height: 100%;
    }
}

今天分享的内容非常干,也很实用,得空好好消化一下吧。

喜欢就关注一下吧.gif

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

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

相关文章

flask 接收vuejs element el-upload传来的多个文件

el-upload通过action指定后端接口,并通过name指定传输的文件包裹在什么变量名中 <el-uploadclass="upload-demo"dragaction="https://ai.zscampus.com/toy/upload"multiplename="fileList":limit="10"accept=

World of Warcraft [CLASSIC] plugin lua

World of Warcraft [CLASSIC] plugin lua 魔兽世界lua脚本插件 World of Warcraft API - Wowpedia - Your wiki guide to the World of Warcraft D:\World of Warcraft\_classic_\Interface\AddOns zwf.lua function CountdownFunc()CountdownFrame CreateFrame("Fram…

【RedHat】使用VMware Workstation创建配置RedHat操作系统

目录 &#x1f31e;1.前言 &#x1f31e;2. 使用 VMware Workstation 创建配置RedHat &#x1f33c;2.1 VMware Workstation 创建虚拟机 &#x1f33c;2.2 安装RedHat 7.6 &#x1f30a;2.2.1 添加光盘 &#x1f30a;2.2.2 开始安装操作系统 &#x1f30a;2.2.3 系统初始…

大数据开发需要哪些职场知识

职场是个人情世故的江湖&#xff0c;除了专业技能&#xff0c;成功的大数据开发人员还需要掌握多种职场知识。以下是一些重要的职场知识和技能&#xff0c;结合实际例子详细说明。 目录 理论知识与工程实践理论知识工程实践例子 项目经验总结项目管理总结和反思例子 做事方式方…

指针并不是用来存储数据的,而是用来存储数据在内存中地址(内存操作/函数指针/指针函数)

推荐&#xff1a;1、4、5号书籍 1. 基本概念 首先&#xff0c;让小明了解指针的基本概念&#xff1a; 指针的定义&#xff1a;指针是一个变量&#xff0c;它存储的是另一个变量的地址。指针的声明&#xff1a;例如&#xff0c;int *p表示一个指向整数的指针变量p。 2. 形象…

RocketMQ:日常开发中有哪些使用MQ的场景

什么是消息队列&#xff1f; 消息队列是一种通信方法&#xff0c;允许应用程序通过发送和接收消息来互相通信。这些消息/任务/指令存储在一个中间介质中&#xff08;即队列&#xff09;&#xff0c;并由生产者发送&#xff0c;消费者接收。 使用场景 场景一&#xff1a;任务…

2024黑盾杯复现赛题MISC部分

一、一个logo 一张png图片&#xff0c;查看颜色通道即可发现flag 二、 学会Office 最好用联想自带的excel工具查看&#xff0c;我用WPS打开未解出题目 这里会发现有隐藏信息 隐藏信息为宏加密 。去百度了解宏加密后&#xff0c;发现有俩个宏&#xff0c;一个加密一个解密 执…

华为---配置基本的访问控制列表(ACL)

11、访问控制列表&#xff08;ACL&#xff09; 11.1 配置基本的访问控制列表 11.1.1 原理概述 访问控制列表ACL(Access Control List)是由permit或deny语句组成的一系列有顺序的规则集合&#xff0c;这些规则根据数据包的源地址、目的地址、源端口、目的端口等信息来描述。A…

uview中的utabs组件item字数不一致导致滑块偏移

给item单独设置宽度&#xff0c;使滑块计算准确 ::v-deep .u-scroll-box .u-tab-item {width: 80px !important;&:nth-child(3),&:nth-child(4),&:nth-child(5) {width: 60px !important;}flex: 1 1 0% !important; }效果如下&#xff1a;

让DroidVNC-NG支持中文输入

DroidVNC-NG支持控制端输入内容&#xff0c;但是仅支持英文字符&#xff0c;如果需要控制输入法软键盘输入中文的话就没办法了&#xff0c;经过摸索找到了解决办法。 这个解决办法有个条件就是让DroidVNC-NG成为系统级应用&#xff08;这个条件比较苛刻&#xff09;&#xff…

STL中的迭代器模式:将算法与数据结构分离

目录 1.概述 2.容器类 2.1.序列容器 2.2.关联容器 2.3.容器适配器 2.4.数组 3.迭代器 4.重用标准迭代器 5.总结 1.概述 在之前&#xff0c;我们讲了迭代器设计模式&#xff0c;分析了它的结构、角色以及优缺点&#xff1a; 设计模式之迭代器模式-CSDN博客 在 STL 中&a…

俯视LLM的灵魂:一文搞懂稀疏自动编码器

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…

【python】OpenCV—Color Map

文章目录 cv2.applyColorMapcv2.putText小试牛刀自定义颜色 参考学习来自 OpenCV基础&#xff08;21&#xff09;使用 OpenCV 中的applyColorMap实现伪着色 cv2.applyColorMap cv2.applyColorMap() 是 OpenCV 中的一个函数&#xff0c;用于将灰度图像或单通道图像应用一个颜色…

【秋招刷题打卡】Day03-二分系列之-二分答案

Day03-二分系列之-二分答案 给大家推荐一下咱们的 陪伴打卡小屋 知识星球啦&#xff0c;详细介绍 >笔试刷题陪伴小屋-打卡赢价值丰厚奖励 < ⏰小屋将在每日上午发放打卡题目&#xff0c;包括&#xff1a; 一道该算法的模版题 (主要以力扣&#xff0c;牛客&#xff0c;…

HexPlane代码复现(十几分钟就复现成功的一篇论文代码!!!!!)

https://caoang327.github.io/HexPlane/ 一、 python setup.py develop命令用不了了 running develop /home/uriky/anaconda3/envs/hexplane/lib/python3.8/site-packages/setuptools/command/easy_install.py:144: EasyInstallDeprecationWarning: easy_install command is d…

仓库管理系统14--仓库设置

1、添加窗体 <UserControl x:Class"West.StoreMgr.View.StoreView"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://schemas.openxmlformats.…

算法金 | 没有思考过 Embedding,不足以谈 AI

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 抱个拳&#xff0c;送个礼 在当今的人工智能&#xff08;AI&#xff09;领域&#xff0c;Embedding 是一个不可或缺的概念。如果你没有…

背靠广汽、小马智行,如祺出行打得过滴滴和百度吗?

©自象限原创 作者丨艾AA 编辑丨薛黎 北京时间6月14日凌晨&#xff0c;在特斯拉股东大会上&#xff0c;马斯克阐述了对Robotaxi&#xff08;自动驾驶出租车&#xff09;商业模式的构想——特斯拉不仅会运营自己的无人驾驶出租车车队&#xff0c;还可以让特斯拉车主们的爱…

面试突击:Java 集合知识体系梳理

本文已收录于&#xff1a;https://github.com/danmuking/all-in-one&#xff08;持续更新&#xff09; 前言 哈喽&#xff0c;大家好&#xff0c;我是 DanMu。在 Java 开发中&#xff0c;集合类对象绝对是被使用最频繁的对象之一。因此&#xff0c;深入了解集合类对象的底层数…

Python操作MySQL数据库--使用pymysql模块

Python操作MySQL数据库--使用pymysql模块 一、新建数据库和数据表1.1 新建book数据库1.2 新建bookprice数据表二、连接数据库2.1 建立数据库连接三、新增数据3.1 新增单条数据3.2 新增多条数据3.3 批量新增四、修改数据4.1 修改单条数据4.2 修改多条数据五、删除数据5.1 删除单…