css3媒体查询的用法

65 阅读4分钟

CSS3 媒体查询(Media Queries)是实现响应式布局的核心技术,它允许根据设备的特性(如屏幕宽度、高度、分辨率、方向等)为不同场景应用不同的 CSS 样式,使页面在手机、平板、电脑等设备上都能良好展示。

一、媒体查询的基本语法

媒体查询的核心是通过 @media 规则定义 “条件”,当条件满足时,内部的 CSS 样式才会生效。

/* 外部样式表中 */
@media [媒体类型] and (媒体特性) {
  /* 满足条件时生效的 CSS 样式 */
  选择器 {
    属性: 值;
  }
}
  • 媒体类型(可选):指定设备类型,常用值:

    • all:所有设备(默认值)
    • screen:屏幕设备(如电脑、手机、平板)
    • print:打印设备
  • 媒体特性(必选):通过 and 连接的条件,如屏幕宽度、方向等,需用括号 () 包裹。

二、常用媒体特性(条件判断)

媒体查询的核心是通过 “媒体特性” 判断设备状态,最常用的有:

媒体特性说明示例
min-width / max-width最小视口宽度 / 最大视口宽度(max-width: 768px)(宽度≤768px 时生效)
min-height / max-height最小视口高度 / 最大视口高度(min-height: 600px)(高度≥600px 时生效)
orientation设备方向(orientation: portrait)(竖屏,高度 > 宽度);(landscape)(横屏,宽度 > 高度)
device-pixel-ratio设备像素比(如 Retina 屏幕)(device-pixel-ratio: 2)(像素比为 2 时)

三、使用方式

1. 内嵌在 CSS 中(推荐)

直接在样式表中通过 @media 定义不同条件的样式:

/* 默认样式(适用于大屏幕) */
.container {
  width: 1200px;
  margin: 0 auto;
}

/* 当屏幕宽度 ≤ 992px 时(如平板) */
@media screen and (max-width: 992px) {
  .container {
    width: 900px;
  }
}

/* 当屏幕宽度 ≤ 768px 时(如手机) */
@media (max-width: 768px) { /* 省略 media type,默认 all */
  .container {
    width: 100%;
    padding: 0 15px;
  }
}

2. 链接外部样式表(按条件加载)

在 HTML 的 <link> 标签中通过 media 属性指定加载条件,仅当条件满足时才加载对应样式表:

<!-- 默认样式表 -->
<link rel="stylesheet" href="style.css">

<!-- 屏幕宽度 ≤ 768px 时加载手机样式表 -->
<link rel="stylesheet" href="mobile.css" media="(max-width: 768px)">

3. 嵌套在选择器中(较少用)

在单个选择器中通过媒体查询添加条件样式:

.box {
  font-size: 16px;
}

/* 屏幕宽度 ≤ 576px 时,.box 的字体变大 */
.box @media (max-width: 576px) {
  font-size: 18px;
}

四、逻辑运算符(组合条件)

媒体查询支持通过逻辑运算符组合多个条件,实现更精确的判断:

and:同时满足多个条件

/* 屏幕宽度在 768px ~ 992px 之间(平板横屏) */
@media (min-width: 768px) and (max-width: 992px) {
  /* 样式 */
}

, (或 or):满足任一条件

/* 屏幕宽度 ≤ 576px 或竖屏状态 */
@media (max-width: 576px), (orientation: portrait) {
  /* 样式 */
}

not:否定整个条件(不常用)

/* 不满足(屏幕宽度 > 768px)时生效(即 ≤768px 时) */
@media not all and (min-width: 768px) {
  /* 样式 */
}

五、响应式设计的常见断点(Breakpoints)

实际开发中,通常根据主流设备宽度设置 “断点”,以下是行业通用的断点参考:

/* 超小屏幕(手机,<576px) */
@media (max-width: 575.98px) { ... }

/* 小屏幕(平板竖屏,≥576px) */
@media (min-width: 576px) and (max-width: 767.98px) { ... }

/* 中等屏幕(平板横屏,≥768px) */
@media (min-width: 768px) and (max-width: 991.98px) { ... }

/* 大屏幕(桌面,≥992px) */
@media (min-width: 992px) and (max-width: 1199.98px) { ... }

/* 超大屏幕(大桌面,≥1200px) */
@media (min-width: 1200px) { ... }

六、注意事项

  1. 设置视口(viewport) :在 HTML 的 <head> 中必须添加视口标签,否则移动设备会按桌面尺寸缩放页面,媒体查询失效
<meta name="viewport" content="width=device-width, initial-scale=1.0">
  • width=device-width:让页面宽度等于设备宽度
  • initial-scale=1.0:初始缩放比例为 1(不缩放)
  1. 移动优先 vs 桌面优先
  • 移动优先:先写手机样式,再用 min-width 扩展大屏幕样式(推荐)
/* 手机默认样式 */
.box { width: 100%; }

/* 平板及以上 */
@media (min-width: 768px) {
  .box { width: 50%; }
}
  • 桌面优先:先写桌面样式,再用 max-width 适配小屏幕
  1. 避免过度使用:过多断点会增加代码复杂度,建议按核心设备尺寸设置 3-5 个断点即可。