用于更改图像不起作用的媒体查询

时间:2017-12-28 02:35:25

标签: css media-queries

我一直在尝试根据屏幕尺寸在主页上显示不同的图像。我在网上看到的解决方案都没有帮助。相反,两个图像都显示在所有屏幕上。这是我尝试过的方法之一。首先,在我的样式表中,我把:

.screen-only {
  display: block;
}

.mobile-only {
  display: none;
}

@media screen and (max-width: 480px) {
  .screen-only {
    display: none;
  }

  .mobile-only {
    display: block;
  }
}

然后,在我的主页中,我有:

<div id="titleBar" class="screen-only">
  <img src="assets/images/screenpic.png"  class="screen-only" />
</div>
<div id="titleBar" class="mobile-only">
  <img src="assets/images/mobilepic.png" class="screen-only" />
</div>

我很困惑,如果我应该把这个类放在div或图像部分,但不管怎样我把它,或者如果我像我在这里的例子中那样放两次,两个图像都显示在所有尺寸。

2 个答案:

答案 0 :(得分:2)

你的代码似乎是正确的,除了你的第二个&#34; div&#34;在&#34; div&#34;中没有相同的类和&#34; img&#34;标签。你的&#34; img&#34;标签应该有一个&#34;仅限移动设备&#34;不是&#34;仅限屏幕&#34;

答案 1 :(得分:0)

错误和混淆的一个可能来源是您使用仅屏幕和仅限移动设备作为类名称。也许这是允许的,但它令人困惑,也不难避免。

另一个可能的错误是您已使用仅限屏幕类标记两个图像。

以下是我认为更清楚一点,实际上应该有效:

在css中

div.responsive {
    background-image: url("assets/images/screenpic.png");
}
@media only screen and (max-width: 480px) {
    div.responsive {
        background-image: url("assets/images/mobilepic.png");
    }
}

in html

<div id="title-bar" class="responsive"> </div>

这是一个完整的html文件,其中包含内联样式,可显示您所追求的内容。我使用SO中的图像只是为了表明它是有效的,你应该用你的图像重新替换img标签。

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
div.responsive {
    background-color: lightgreen;
}
#mobile-title {
    display: none;
}
#desktop-title {
    display: block;
}

@media only screen and (max-width: 480px) {
div.responsive {
    background-color: lightblue;
}
#mobile-title {
    display: block;
}
#desktop-title {
    display: none;
}

}
</style>
</head>
<body>
<div id="mobile-title" class="responsive">
    <img src="https://i.stack.imgur.com/9LROA.png?s=32&amp;g=1" width="32" height="32">
</div>
<div id="desktop-title" class="responsive">
    <img src="https://www.gravatar.com/avatar/598b1b70f462d6708ff9a459a102d500?s=32&amp;d=identicon&amp;r=PG&amp;f=1" alt="" width="32" height="32">
</div>
</body>
</html>