CSS媒体查询中样式规则必须嵌套在选择器规则集中,不能直接写在@media块内

css媒体查询中样式规则必须嵌套在选择器规则集中,不能直接写在@media块内

你在使用 @media screen and (max-width: 960px) 时遇到的报错(如“expected curly brace”),根本原因在于:CSS不允许在媒体查询内部直接书写样式声明。你当前的代码:

@media screen and (max-width: 960px) {
  display: flex;
  justify-content: spacebetween;
  height: 80px;
}

这段代码语法非法——@media 是一个条件容器,它本身不选择任何元素,因此不能直接包含样式属性。所有 CSS 样式(如 display、justify-content)必须隶属于某个选择器规则集(selector + { ... })

✅ 正确写法是:先指定要修改的元素(例如 .header、nav 或 body),再将该规则集放入媒体查询中:

/* ✅ 正确:为 .navbar 在小屏下启用 Flex 布局 */
@media screen and (max-width: 960px) {
  .navbar {
    display: flex;
    justify-content: space-between; /* 注意:正确拼写是 'space-between',不是 'spacebetween' */
    height: 80px;
  }
}

⚠️ 同时注意两个常见细节错误:

立即学习“前端免费学习笔记(深入)”;

  • justify-content: spacebetween → 应为 justify-content: space-between(带连字符);
  • display: flex 等属性对无选择器的裸规则无效,CSS 解析器会在第 2 行就因缺少左花括号 { 报错——因为它期待的是 selector { ... },而非孤立的声明。

? 小结:

  • @media 只负责「何时生效」,不负责「作用于谁」;
  • 「作用于谁」由选择器(如 .menu、#hero、main)定义;
  • 所有样式声明必须包裹在 selector { ... } 内,无论是否在媒体查询中;
  • 初学者常误将媒体查询当作“全局样式开关”,实则它是“带条件的选择器包装器”。

掌握这一结构逻辑,就能避免 90% 的媒体查询语法错误。