媒体查询

什么是媒体查询?

媒体查询(Media Queries)是CSS3的一个重要特性,它允许开发者根据不同的媒体类型和设备特性来应用不同的CSS样式。媒体查询是响应式设计的核心技术之一,它使得网页能够根据设备的屏幕尺寸、分辨率、方向等条件自动调整布局和样式。

媒体查询的语法

媒体查询的基本语法如下:

css
@media media-type and (media-feature) {
  /* CSS规则 */
}

媒体类型

媒体类型指定了样式适用的设备类型,常用的媒体类型包括:

媒体类型 描述
all 所有设备(默认值)
screen 彩色屏幕设备
print 打印预览和打印设备
speech 屏幕阅读器等语音合成设备
handheld 手持设备(已废弃,建议使用screen
projection 投影设备(已废弃,建议使用screen

媒体特性

媒体特性指定了样式适用的设备特性,常用的媒体特性包括:

媒体特性 描述 示例
width 视口宽度 (max-width: 768px)
height 视口高度 (min-height: 600px)
device-width 设备屏幕宽度 (device-width: 320px)
device-height 设备屏幕高度 (device-height: 568px)
orientation 设备方向 (orientation: portrait)(orientation: landscape)
aspect-ratio 视口宽高比 (aspect-ratio: 16/9)
device-aspect-ratio 设备屏幕宽高比 (device-aspect-ratio: 4/3)
resolution 设备分辨率 (min-resolution: 300dpi)
color 颜色深度 (color: 8)
hover 是否支持悬停 (hover: hover)
pointer 主输入设备类型 (pointer: fine)(pointer: coarse)

逻辑操作符

媒体查询支持使用逻辑操作符组合多个条件:

操作符 描述
and 逻辑与,同时满足多个条件
not 逻辑非,排除满足条件的设备
only 仅在特定设备上应用样式,用于兼容旧浏览器
, 逻辑或,满足任一条件即可

媒体查询的用法

1. 基本用法

css
/* 当屏幕宽度小于768px时应用样式 */
@media screen and (max-width: 768px) {
  body {
    font-size: 16px;
  }
}

2. 组合多个条件

css
/* 当屏幕宽度在768px到1024px之间,且为横向时应用样式 */
@media screen and (min-width: 768px) and (max-width: 1024px) and (orientation: landscape) {
  .container {
    width: 90%;
  }
}

3. 使用逻辑或

css
/* 当屏幕宽度小于768px或大于1200px时应用样式 */
@media screen and (max-width: 767px), screen and (min-width: 1201px) {
  .sidebar {
    display: none;
  }
}

4. 使用not操作符

css
/* 除了打印设备外的所有设备都应用样式 */
@media not print {
  body {
    background-color: #f0f0f0;
  }
}

5. 使用only操作符

css
/* 仅在屏幕宽度小于768px的设备上应用样式(兼容旧浏览器) */
@media only screen and (max-width: 768px) {
  .menu {
    flex-direction: column;
  }
}

媒体查询的位置

媒体查询可以放在CSS文件的任何位置,但通常有两种常见的组织方式:

1. 内联媒体查询

将媒体查询直接放在相关样式之后:

css
.container {
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
}

/* 响应式调整 */
@media screen and (max-width: 768px) {
  .container {
    padding: 0 20px;
  }
}

2. 集中式媒体查询

将所有媒体查询集中放在CSS文件的末尾:

css
/* 基础样式 */
.container {
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
}

/* 所有响应式样式集中在文件末尾 */
@media screen and (max-width: 1200px) {
  /* 大屏幕样式 */
}

@media screen and (max-width: 992px) {
  /* 中等屏幕样式 */
}

@media screen and (max-width: 768px) {
  /* 小屏幕样式 */
}

@media screen and (max-width: 576px) {
  /* 超小屏幕样式 */
}

常用断点

断点是指触发媒体查询的屏幕宽度阈值。虽然没有固定的标准,但以下是一些常用的断点:

断点 设备类型
max-width: 576px 手机设备
min-width: 577px and max-width: 768px 平板设备
min-width: 769px and max-width: 992px 小型桌面设备
min-width: 993px and max-width: 1200px 中型桌面设备
min-width: 1201px 大型桌面设备

媒体查询的最佳实践

  1. 移动优先:从移动设备的样式开始,然后逐步为更大的屏幕添加样式
  2. 合理使用断点:不要使用过多的断点,只在必要时添加
  3. 使用相对单位:在媒体查询中使用相对单位(如rem、em)而不是绝对单位(如px)
  4. 测试多种设备:在不同设备上测试媒体查询的效果
  5. 避免过度设计:保持响应式设计简洁,避免过度复杂的布局调整

媒体查询的局限性

  1. 性能影响:过多的媒体查询可能会影响页面加载性能
  2. 设备多样性:随着设备类型的增加,很难覆盖所有可能的屏幕尺寸
  3. 维护难度:复杂的媒体查询可能会增加CSS的维护难度

总结

媒体查询是响应式设计的核心技术,它允许开发者根据不同的设备特性应用不同的CSS样式。通过合理使用媒体查询,可以创建出在各种设备上都能良好显示的响应式网页。

最后更新:2026-02-08