最近,我一直在设计响应速度更快的网站,并且经常使用CSS媒体查询.我注意到的一种模式是,定义媒体查询的顺序实际上很重要.我没有在每个浏览器上测试它,只是在Chrome上测试.对这种行为有什么解释吗?有时,当您的站点不能正常工作,并且您不确定是查询还是查询的编写顺序时,您会感到沮丧.

下面是一个例子:

HTML

<body>
    <div class="one"><h1>Welcome to my website</h1></div>
    <div class="two"><a href="#">Contact us</a></div>
</body>

CSS:

body{
font-size:1em; /* 16px */
}

.two{margin-top:2em;}



/* Media Queries */

@media (max-width: 480px) {
    .body{font-size: 0.938em;}

}
/* iphone */
@media only screen and (-webkit-min-device-pixel-ratio: 2) {
    body {font-size: 0.938em;}
}
/*if greater than 1280x800*/
@media (min-width: 1200px) {
       .two{margin-top:8em;}
            }
/*1024x600*/
@media (max-height: 600px) {
       .two{margin-top:4em;}
}
/*1920x1024*/
@media (min-height: 1020px) {
       .two{margin-top:9em;}
}
/*1366x768*/
@media (min-height: 750px) and (max-height: 770px) {
       .two{margin-top:7em;}
}

但是,如果我在上一次为1024x600编写查询,浏览器会忽略它,并应用CSS开头指定的边距值(边距顶部:2em).

/* Media Queries - Re-arranged version */

@media (max-width: 480px) {
    .body{font-size: 0.938em;}
}
/* iphone */
@media only screen and (-webkit-min-device-pixel-ratio: 2) {
    body {font-size: 0.938em;}
}
/*if greater than 1280x800*/
@media (min-width: 1200px) {
       .two{margin-top:8em;}
}
/*1920x1024*/
@media (min-height: 1020px) {
       .two{margin-top:9em;}
}
/*1366x768*/
@media (min-height: 750px) and (max-height: 770px) {
       .two{margin-top:7em;}
}
 /*1024x600*/
@media (max-height: 600px) {
       .two{margin-top:4em;}
}

如果我对媒体查询的理解是正确的,那么顺序应该无关紧要,但似乎很重要.可能的原因是什么?

推荐答案

这是通过CSS-级联样式表的设计实现的.

这意味着,如果将两个冲突的规则应用于相同的元素,它将 Select 最后一个声明的规则,除非第一个规则具有!imp或tant标记或更具体(例如html > bodybody,后者不太具体).

因此,考虑到这个CSS

@media (max-width: 600px) {
  body {
    background: red;
  }
}

@media (max-width: 400px) {
  body {
    background: blue;
  }
}

如果浏览器窗口为350像素宽,背景将为蓝色,而使用此CSS

@media (max-width: 400px) {
  body {
    background: blue;
  }
}

@media (max-width: 600px) {
  body {
    background: red;
  }
}

和相同的窗口宽度,背景将是红色的.这两个规则确实是匹配的,但第二个规则是应用的,因为它是最后一个规则.

最后,与

@media (max-width: 400px) {
  body {
    background: blue !imp或tant;
  }
}

@media (max-width: 600px) {
  body {
    background: red;
  }
}

@media (max-width: 400px) {
  html > body {
    background: blue;
  }
}

@media (max-width: 600px) {
  body {
    background: red;
  }
}

背景将为蓝色(具有350像素宽的窗口).

Css相关问答推荐

如何将表格单元格的最后一个子级与单元格底部对齐?

如何使用在另一个层定义块中定义的sass层作用域变量

在Reaction中自定义ANTD日期选取器

如何引用 SCSS 中的现有类?

CSS 中的 :not(style) ~ :not(style) 是什么?

滚动弹性盒

使用 place-content: center 的全宽 CSS 网格项目

如何使用显示网格制作不同大小的列取决于元素的数量

当父元素处于子元素 input 的焦点状态时更改父元素的样式

Nativewind 的某些样式不适用于本机 (Android),但它们适用于网络

React Typescript 中的自动 typewriter 效果

将 CSS 注入 Shadow 根.然而风格正在受到影响

bootstrap 模式对话框中的谷歌 map 自动完成结果

如何隐藏锚文本而不隐藏锚?

纯 CSS 复选框图像替换

下拉框中溢出文本的省略号

谷歌浏览器两种元素样式的区别

在 Twitter Bootstrap 中创建圆角的正确方法

使用 CSS 垂直居中旋转文本

在 CSS 中使用多个 @font-face 规则