前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库CSS media query logical operators and not
CSS响应式设计

媒体查询里的 and、逗号和 not 怎么组合?

and 要求两边条件同时成立;逗号分隔的是多个备选查询,任意一个匹配就应用规则。not 否定的是它所在的整个媒体查询,不是紧跟着的单个特性。要表达“宽度不是小屏”,可写 @media not all and (max-width: 600px),但边界和媒体类型要写清楚,避免把未知特性也算进预期。

前端进阶之旅 · 一题精讲更新于 2026.09.29
CSS#响应式设计
先看核心答案读代码示例
理解线索

`not` 否定的是整条查询

  1. and把媒体类型与多个特性同时收紧,例如屏幕够宽且可悬停
  2. 逗号每个逗号分支独立判断,窄屏或打印任一成立即可
  3. not作用于整条查询,不能只把紧邻的括号当作否定对象

逗号连接的是备选查询,只要有一项匹配,规则就可生效。

核心回答

先记住这个答案

同一条媒体查询中,and 把多个条件收紧;逗号相当于提供多条独立候选,任一匹配即可。not 的作用范围是它所在的整条查询,所以 not screen and (max-width: 600px) 不能简单读成“屏幕宽度大于 600px”:非屏幕介质也可能匹配。需要给某个特性取反时,先写出完整媒体类型与边界,再在实际设备上检验结果。

  • and 要求条件同时成立
  • 逗号连接备选查询
  • not 否定所在的完整查询
  • 范围边界和媒体类型要核对

宽屏悬停与打印规则怎么组合

设计稿要求“宽屏并且支持悬停”的增强效果,而打印时也需要一套单独样式。可以把屏幕宽度和悬停能力用 and 连接,把打印方案写在另一条 @media print 里。逗号常用于共享同一规则的多个环境,例如窄屏或打印;这不是把两个条件同时成立。阅读复杂表达式时,先按逗号拆成各个查询,再看每一条内部的 and 和 not。

宽屏、悬停与打印两组查询CSS
@media screen and (min-width: 900px) and (hover: hover) {
  .menu { display: flex; } /* 宽屏且能悬停 */
}
@media (max-width: 600px), print {
  .sidebar { display: none; } /* 任意一个查询匹配 */
}

媒体查询列表类似逻辑“或”,每一项再由媒体类型和特性组成。 把上面两条规则放进一个 1000px 宽、支持鼠标悬停的屏幕环境里,.menu 会变成横排,而 .sidebar 不会隐藏;把窗口缩到 500px,第一条失效,第二条的窄屏分支生效。进入打印预览时,不论纸张宽度,第二条的 print 分支也会生效。这样逐个环境代入,比把 and 和逗号都想成“拼在一起”更容易排查。

not 否定的是整条查询

not 放在查询开头时,会否定整项查询,容易被误读为仅否定括号里的宽度。对于区间条件,直接使用 (min-width: 601px) 往往比否定小屏更易读,但两者在边界和适用媒体类型上要核对。CSS 已支持范围比较语法时也可以写成 (width > 600px),不要凭直觉把逻辑运算符当成 JavaScript 表达式。

有两个逗号分隔的候选时,每个候选都是一条完整查询;not 不会自动跨过逗号否定另一条。比如要给打印机或宽屏分别套样式,应该先把两个条件写清,再分别在打印预览和窗口缩放下检验。更复杂的组合可用媒体查询范围语法或显式分开两条规则,避免为了省行数牺牲可读性。

回答前,多想一步

容易答错的地方

把逗号当成同时满足
逗号连接的是备选查询,只要有一项匹配,规则就可生效。
把 not 当作只否定一个括号
not 作用于所在的整条媒体查询;写复杂否定时要检查媒体类型和范围边界。
试着用自己的话回答

面试官还会怎么问?

能在一个查询里用括号表示复杂“或”吗?

媒体查询可以使用条件组合语法,但可读性和支持范围要考虑;常见“或”直接用逗号拆成两项最直观。

“非小屏”为什么可能不等于“大屏”?

not 否定的媒体类型、未知特性和查询整体会影响结果;直接写大屏最小宽度通常更明确。

多条查询同时命中怎么办?

媒体查询只决定规则是否参与级联;最终样式仍由来源、层、优先级和顺序决定。

从一道题,走向一组知识

把知识连起来

响应式设计

多条媒体查询都匹配时,最终用哪条样式?

多个条件都匹配时还要经过级联,逻辑运算只决定规则是否入场。

响应式设计

媒体类型和媒体特性有什么区别,能一起写吗?

媒体类型是整条查询的一部分,not 与 and 的作用范围要一起看。

响应式设计

怎样用 prefers-reduced-motion 照顾不适合动画的用户?

减少动态效果的查询可与其他条件用 and 组合,先分清用户偏好与视口条件。

参考资料

  • @media CSS at-rule

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 宽屏悬停与打印规则怎么组合
  3. not 否定的是整条查询
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑