窗口宽度 vs 实际宽度其实是一个超级有趣的话题。 Snuggug has a really extensive explanation for it,但简而言之,它是基于滚动条在不同浏览器中的放置方式。
某些浏览器会将滚动条覆盖在内容/网站的顶部。其他浏览器会缩短内容/网站的宽度,并在其旁边有滚动条next。这显然会在不同浏览器计算视口宽度的方式上产生一些差异。
一个潜在的问题是您使用em 作为度量单位。
请务必记住,em 是基于您当前字体大小的度量单位,因此对浏览器的解释是开放的。
根据您的font-family 和整体font-size,60em 通常在 800 像素左右。这意味着您的查询会更具体,如下所示:
@media screen and (max-width: 800px) {
.left {
display: none;
}
}
如果您不确定样式是否被覆盖,您始终可以应用如下重要规则:
@media screen and (max-width: 800px) {
.left {
display: none !important;
}
}
如果您希望不在您的 CSS 中使用 !important 标记,那么您需要确保注意下面列出的两种情况:
CSS 从上到下读取
这意味着如果您为 .left 元素指定了规则,则需要将其放置在之前您的媒体查询而不是之后
错误的布局如下所示:
@media screen and (max-width: 800px) { //media query BEFORE rule
.left {
display: none;
}
}
.left {
.display:block;
}
正确的布局如下所示:
.left {
.display:block;
}
@media screen and (max-width: 800px) { //media query AFTER rule
.left {
display: none;
}
}
接下来要记住的是:
嵌套的 CSS 选择器优先
在您的媒体查询规则中使用相同数量(或更多)的父选择器。
错误的选择器系列:
.container .left { //2 selectors used in query
.display:block;
}
@media screen and (max-width: 800px) {
.left { //only 1 selector used in query therefore overwritten by the previous rule - this should have atleast 2 selectors to overwrite the previous rule
display: none;
}
}
CORRECT 系列选择器:
.container .left { //2 selectors used in query
.display:block;
}
@media screen and (max-width: 800px) {
body .container .left { //3 selectors used in query
display: none;
}
}