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

【Web】理解CSS媒体查询

CSS 媒体查询(Media Queries) 是实现响应式设计的核心技术,它允许你根据设备的特性(如屏幕宽度、分辨率、横竖屏等)条件性地应用 CSS 样式。简单来说,它让你可以对不同的设备“说不同的话”。

1. 什么是媒体查询?

媒体查询像是 CSS 的“如果-那么”语句:

  • 如果 屏幕宽度小于 768 像素,那么 使用单栏布局。
  • 如果 屏幕宽度大于 1024 像素,那么 使用多栏布局。

2. 基本语法

媒体查询由 @media 规则媒体特性 组成。常见语法:

@media (条件) { /* 满足条件时应用的 CSS */ }

示W例:

/* 当屏幕宽度小于等于 768px 时,应用以下样式 */ 
@media (max-width: 768px) { body { background-color: lightblue; /* 手机上背景变浅蓝 */ }
}

3. 常用媒体特性

特性描述例子
width屏幕宽度@media (max-width: 768px)
height屏幕高度@media (min-height: 600px)
orientation横屏或竖屏@media (orientation: landscape)
device-width设备物理宽度(少用,不如 width 灵活)@media (max-device-width: 480px)

4. 示例:响应式布局断点

以下是典型的响应式布局断点设置(结合 Bootstrap 等框架的常见做法):

/* 手机(竖屏) */
@media (max-width: 767px) { .container { width: 100%; padding: 10px; } .navbar { display: none; /* 隐藏导航栏,用汉堡菜单替代 */ } 
} 
/* 平板(横屏) */ 
@media (min-width: 768px) and (max-width: 1023px) { .container {width: 90%; } .sidebar { display: block; /* 显示侧边栏 */ } 
} 
/* 桌面 */ 
@media (min-width: 1024px) { .container { width: 80%; max-width: 1200px; margin: 0 auto; } .product-grid { display: grid; grid-template-columns: repeat(4, 1fr); /* 4 列商品 */ } 
}

5. 逻辑操作符

媒体查询支持逻辑操作符,让条件更灵活:

  • and:同时满足多个条件。
    @media (min-width: 768px) and (orientation: landscape) { /* 平板横屏时应用 */ }
  • ,(或):满足任一条件。
    @media (max-width: 600px), (orientation: portrait) { 
    /* 手机竖屏或任何宽度小于 600px 的设备 */
    }
  • not:排除某个条件。
    @media not (min-width: 768px) { 
    /* 非桌面设备(手机和平板竖屏) */ 
    }

6. 移动优先 vs 桌面优先

移动优先(推荐)

先写手机样式(基础样式),再用 min-width 逐步增强桌面样式:

/* 基础样式(手机) */ 
body { font-size: 14px; } 
/* 平板及以上 */@media (min-width: 768px) { body { font-size: 16px; } 
} 
/* 桌面 */ 
@media (min-width: 1024px) { body { font-size: 18px; } 
}
桌面优先(传统)

先写桌面样式,再用 max-width 适配小屏幕:

/* 基础样式(桌面) */ 
body { font-size: 18px; } 
/* 平板 */ 
@media (max-width: 1023px) { body { font-size: 16px; } 
} 
/* 手机 */ 
@media (max-width: 767px) { body { font-size: 14px; } 
}

7. 实际应用案例

案例 1:导航栏适配

/* 手机上隐藏导航链接,显示汉堡菜单 */ 
.nav-links { display: none; } 
@media (min-width: 768px) { .nav-links { display: flex; /* 桌面上显示导航链接 */ } .hamburger { display: none; /* 隐藏汉堡菜单 */ } 
}

案例 2:图片自适应

img { max-width: 100%; /* 图片不超过容器宽度 */ 
} 
/* 高分屏(如 Retina)加载高清图 */ 
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { .logo { background-image: url('logo@2x.png'); } 
}

8. 媒体查询的高级用法

结合媒体类型

媒体查询可以指定设备类型(如屏幕、打印机):

@media screen and (max-width: 768px) { /* 仅屏幕设备,宽度 ≤ 768px */ 
} 
@media print { 
/* 打印时应用的样式 */ body { font-size: 12pt; } .no-print { display: none; } /* 隐藏“不打印”元素 */ 
}

使用相对单位(em/rem)

避免固定像素,用 emrem 更灵活:

@media (max-width: 60em) {/* 60em ≈ 960px(假设基准字体 16px) */ .container { width: 90%; } 
}

9. 注意:

  1. 通过现有数据分析用户设备宽度,设置合理的断点。 例子:如果 80% 用户使用 360–768px 设备,就优先适配这个范围。

  2. 媒体查询本身不影响性能,但过度嵌套复杂样式会增加渲染时间。 因此我们要注意精简 CSS,一般只需 2–3 个关键断点(如 768px、1024px),避免代码臃肿。

  3. 平板用户可能横屏浏览,需测试 orientation: landscape

  4. 不能只关注宽度,高度(如 min-height)和分辨率(如 resolution)也很重要。

10.总结

媒体查询 = CSS 的条件判断,让网页自动适应设备。


文章转载自:

http://IcI6mIpx.qxwwg.cn
http://KDlDhP7d.qxwwg.cn
http://yCRKXGTC.qxwwg.cn
http://B5bzRqR3.qxwwg.cn
http://lpxfd2uE.qxwwg.cn
http://ewE92zWH.qxwwg.cn
http://cyMYpaiJ.qxwwg.cn
http://Oosje2jw.qxwwg.cn
http://2YtL6AuD.qxwwg.cn
http://dTeYYIDj.qxwwg.cn
http://VcyWVtZO.qxwwg.cn
http://TFl2fmOu.qxwwg.cn
http://7nKS0ATu.qxwwg.cn
http://Ycql1Eot.qxwwg.cn
http://Skmc3twS.qxwwg.cn
http://puIcEv32.qxwwg.cn
http://7VbM0CSp.qxwwg.cn
http://GLgBu1Eg.qxwwg.cn
http://26RvEu9m.qxwwg.cn
http://zWpxl6RG.qxwwg.cn
http://DLIJHzoV.qxwwg.cn
http://65lSUgC6.qxwwg.cn
http://bFmuvoaA.qxwwg.cn
http://UtKmOsWg.qxwwg.cn
http://z6z9vzCS.qxwwg.cn
http://KmyerbXt.qxwwg.cn
http://MS2aJBHf.qxwwg.cn
http://nxvsqmlX.qxwwg.cn
http://6YxmcIgJ.qxwwg.cn
http://ex6Xs6fk.qxwwg.cn
http://www.dtcms.com/a/368376.html

相关文章:

  • 编写前端发布脚本
  • 无密码登录与设备信任:ABP + WebAuthn/FIDO2
  • 消息队列-ubutu22.04环境下安装
  • Vue3源码reactivity响应式篇之EffectScope
  • 从Java全栈到前端框架:一位程序员的实战之路
  • 【Java实战㉖】深入Java单元测试:JUnit 5实战指南
  • 【AI论文】Robix:一种面向机器人交互、推理与规划的统一模型
  • C++(Qt)软件调试---bug排查记录(36)
  • yolov8部署在一台无显卡的电脑上,实时性强方案
  • Alibaba Cloud Linux 3 安装Docker
  • SQL面试题及详细答案150道(61-80) --- 多表连接查询篇
  • 详细解读Docker
  • 【OJ】C++ vector类OJ题
  • 【数据库】MySQL 数据库创建存储过程及使用场景详解
  • Ubuntu22.04-ROS2下navgation2编译到运行
  • OpenLayers常用控件 -- 章节四:图层控制与切换教程
  • [ubuntu][C++]onnxruntime安装cpu版本后测试代码
  • 一个专为地图制图和数据可视化设计的在线配色网站,可以助你制作漂亮的地图!
  • 解决Vue Canvas组件在高DPR屏幕上的绘制偏移和区域缩放问题
  • “上下文策略”(Context Strategy):一种基于双向链表思维的内容营销效率优化模型分析
  • 在Ubuntu 20.04的服务器上查找的服务器的IP地址
  • 用 Cursor AI 快速开发你的第一个编程小程序
  • 自动化运维-ansible中对roles的创建与使用
  • 《Ceph集群数据同步异常的根因突破与恢复实践》
  • 从零开始的云计算生活——第五十九天,基于Jenkins自动打包并部署Tomcat环境
  • 串口通信的学习
  • 企业为何仍困在“数据孤岛”?——从iPaaS重构信息流的实践路径
  • MySQL 主从复制详解:部署与进阶配置
  • 一笔成形,秒绘标准图!Pen Kit重构“自然书写”体验
  • 解决IntelliJ IDEA 提交代码时无复选框问题