为什么我的CSS3媒体查询不起作用?


182

在styles.css中,我正在使用媒体查询,这两个查询都使用以下变体:

/*--[ Normal CSS styles ]----------------------------------*/

@media only screen and (max-width: 767px) {

    /*--[ Mobile styles go here]---------------------------*/
}

当我缩小窗口时,网站的大小会调整为我希望在常规浏览器(Safari,Firefox)中使用的布局,但是,手机上的移动布局根本无法显示。相反,我只是看到默认的CSS。

谁能指出我正确的方向?


3
这是什么手机?Media Queries是CSS中的一项新功能,并非所有手机浏览器都支持它...
Sparky

1
我也正在使用iPhone 4和iPhone 4在分辨率为320 x 480的Android手机(2.2 Froyo)上进行测试。
redconservatory 2011年

实际上,我在iPhone 4上切换到了以下媒体查询,并且可以工作(但我必须更改CSS以适应更高的分辨率)@media only屏幕和(-webkit-min-device-pixel-ratio:2){}
redconservatory

我终于明白了,我错过了px@media (max-width: 320px)
瑞安

就我而言,这是因为chrome开发人员控制台已打开,因此高度并不是我所想的
Rabolf

Answers:


475

所有这三个都是有用的提示,但看来我需要添加一个元标记:

<meta content="width=device-width, initial-scale=1" name="viewport" />

现在它似乎可以同时在Android(2.2)和iPhone上使用...


59
实际上<meta name =“ viewport” content =“ width = device-width,initial-scale = 1”>
Lukas Lukac 2014年

4
8年后,这仍然有用。我也跳过了meta标签,并且无法使媒体查询在项目中工作。视口标签和沼泽地,它的工作原理
SoWhat

1
9年后,仍然如此有用。无法相信我
忘记

@LukasLukac为什么?
琼索波利斯

68

不要忘记在媒体查询上方使用标准的CSS声明否则该查询也不起作用。

.edcar_letter{
    font-size:180px;
}

@media screen and (max-width: 350px) {
    .edcar_letter{
        font-size:120px;
    }
}

5
实际上,将css样式按从标准尺寸到最小尺寸的降序排列。如果所有媒体查询都在同一文件中,则规则仍然适用。
菲尔·安德鲁斯

1
即使我没有针对该类的标准CSS声明,也可以为我工作。
梅森

这解决了我的问题。非常感谢...我忽略了CSS被覆盖的可能性。
pmcg521 '18

20

我怀疑关键字only可能是这里的问题。使用这样的媒体查询,我没有任何问题:

@media screen and (max-width: 480px) { }


20

我在新闻网站上使用了引导程序,但在IE8上不起作用,我使用css3-mediaqueries.js javascript,但仍无法正常工作。如果您希望您的媒体查询与此JavaScript文件一起使用,则将屏幕添加到CSS中的媒体查询行

这是一个例子:

<meta name="viewport" content="width=device-width" />


<style>
     @media screen and (max-width:900px) {}
     @media screen and (min-width:900px) and (max-width:1200px) {}
     @media screen and (min-width:1200px) {}
</style>

<link rel="stylesheet" type="text/css" href="bootstrap.min.css">
<script type="text/javascript" src="css3-mediaqueries.js"></script>

css链接线和上面的线一样简单。


12

今天我也有类似情况。媒体查询无效。过了一会儿,我发现'and'之后的空格丢失了。正确的媒体查询应如下所示:

@media screen and (max-width: 1024px) {}

1
这就是为什么我们有CSS验证器。这与该特定问题无关,因为OP已经指出媒体查询实际上确实可以在非移动浏览器中工作。
cimmanon

4
仍然发现这很有用,因为这是我的问题
Loren Shqipognja

4

CSS代码的顺序也很重要,例如:

@media(max-width:600px){
  .example-text{
     color:red;
   }
}
.example-text{
   color:blue;
}

上面的代码由于执行的命令而无法正常工作。需要写如下:

.example-text{
   color:blue;
}
@media(max-width:600px){
  .example-text{
     color:red;
   }
}

那是我犯的错误。谢谢。
VorganHaze

4

始终以px或rem等单位提及max-width和min-width。这为我解决了。如果我写的时候没有单位,只有数字值,浏览器将无法读取媒体查询。示例: 这是错误的 @media only屏幕和(max-width:950), 这是正确的 @media only屏幕和(max-width:950px)


谢谢!尽管我正在查看所有示例,但我从未发现自己忘记了px!
markand

2

把另一个答案扔进去。如果您尝试使用CSS变量,那么它将悄然失败。

@media screen and (max-device-width: var(--breakpoint-small)) {}

CSS变量不适用于媒体查询(根据设计)。


2

我从未见过的奇怪原因:如果您在媒体查询(在Firefox 69中)之外使用“父>子”选择器,则可能会中断媒体查询。我不确定为什么会发生这种情况,但是对于我的情况,这没有用...

@media whatever {
    #child { display: none; }
}

但是,将父级添加到页面上进一步匹配其他一些CSS的情况下,这是可行的...

#parent > #child { display: none; }

好像指定父级似乎无关紧要,因为id是非常特定的,应该没有歧义。也许这是Firefox中的错误?


2

OP的代码段显然使用了正确的注释标记,但是CSS可能会以渐进方式中断—因此,如果出现语法错误,此后的所有操作都可能会失败。有几次,我依靠可信赖的消息来源提供了错误的注释标记,这打乱了我的样式表。由于OP仅提供了其代码的一小部分,因此我建议以下内容:

确保所有的CSS注释使用这个标记/*...... */- 这是根据MDN对CSS的正确注释标记

使用lint或安全的在线验证器验证您的css。这是W3的一部

更多信息:我去检查了引导程序4中最新推荐的媒体查询断点,最终直接从他们的文档中复制了样板。几乎每个代码块都标有javascript样式的注释//,这破坏了我的代码—并给了我仅用于进行疑难解答的神秘编译错误,这些错误当时使我头疼不已。

IntelliJ文本编辑器允许我使用ctrl + /热键在LESS文件中注释掉CSS的特定行,这很不错,除了默认情况下会在无法识别的文件类型上插入//。它不是免费软件,少一些是相当主流的,所以我信任它并接受了它。那打破了我的代码。有一个首选项菜单,可为它教授每种文件类型的正确注释标记。


1
OP已使用正确的注释标记,如post所示
TylerH '17

实际上,如果将鼠标悬停在向下投票按钮上,您将确切看到它们的用途。除此之外,不赞成投票的人是1)匿名和2)没有巨魔。此外,开除某人并不是让他们改变您认为自己所做的事情的方式。
TylerH '18

天啊!你救了我的日子。
limfinity

2

包含如下所示的meta标签可能会导致浏览器以不同的方式处理视口缩放。

<meta content="width=device-width, initial-scale=1" name="viewport" />


1

我最近也遇到了这个问题,后来我发现这是因为我没有在and和之间放置空格(。这是错误

@media screen and(max-width:768px){
}

然后我将其更改为此进行更正

@media screen and (max-width:768px){
}

0

我使用几种方法视情况而定。在同一样式表中,我使用:@media(最大宽度:450像素),或者单独使用,确保您在标题中具有正确的链接。我看了看一下您的fixmeup,发现您有一系列混乱的CSS链接。就像您所说的那样,它对HTC的愿望S也有作用。


再次看一下CSS,谢谢...很高兴知道它可以在某些东西上工作。
redconservatory 2011年

0
@media all and (max-width:320px)and(min-width:0px) {
  #container {
    width: 100%;
  }
  sty {
    height: 50%;
    width: 100%;
    text-align: center;
    margin: 0;
  }
}

.username {
  margin-bottom: 20px;
  margin-top: 10px;
}

7
请在您的代码中添加一些说明,以说明它如何解决问题-这将在将来对其他人有所帮助,您的答案更有可能被接受
香蕉上的人

2
尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。
Ferrybig '16

0

对我来说,我表示的max-height不是max-width

如果是您,请更改它!

    @media screen and (max-width: 350px) {    // Not max-height
        .letter{
            font-size:20px;
        }
    }

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.