响应&动态背景图像 - 最佳实践

时间:2017-07-27 20:25:33

标签: javascript html css responsive-design background-image

很长一段时间,当我不得不创建一个包含许多不同页面的网站(并且每个页面都有一个具有不同背景图像的英雄部分)时,我曾经这样做过:

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in group statement is ambiguous

以下css:

<div class="hero" style="background-image: url(my-dynamic-img.jpg)"></div>

图像将为每个页面动态加载。在CMS中,例如,客户端可以自己更改图像,而无需更改css

但是现在,我意识到它并不好,因为你最终会在每台设备(手机,平板电脑,台式机......)上加载相同的图像。

所以我想对你做到这一点的最佳方式有你的意见:为同一背景设置3个不同的图像(hero-mobile.jpg,hero-tablet.jpg和hero-desktop.jpg)并定位自动好。 3个图像的声明必须在HTML中,而不是在css中(因此客户端可以随时更改它)

4 个答案:

答案 0 :(得分:4)

您是否发现了srcset属性? srcset的作用是允许您在<img>代码中添加多个图片并为其设置某些条件。根据满足的条件,将显示相应的图像。一个例子的时间

如果您想要查看一半用户视口宽度的图像,您可以使用

<img src="images/space-needle.jpg" sizes="50vw"
srcset="images/space-needle.jpg 200w, images/space-needle-2x.jpg 400w,
images/space-needle-hd.jpg 600w">  

这样做的目的是找出用户视口宽度有多大,比如500px宽,这样你的图像images/space-needle.jpg 200w就会为用户加载。

在此示例中,我们指定图像需要占据屏幕宽度sizes="50vw"的一半。在500px宽屏幕上显示600px或400px宽的图像是不可能的,并且只能在视口的一半处显示它,因此它选择200w选项。

有很多方法可以指定图像应加载的条件,设备像素比,屏幕大小,浏览器大小等等。

教育链接:
https://www.sitepoint.com/how-to-build-responsive-images-with-srcset/
https://www.udacity.com/course/responsive-images--ud882

答案 1 :(得分:0)

有多种方法可以做到这一点,但在您的情况下,由于您希望客户端修改HTML,您应该使用css中的@media

E.g

然后在CSS中,您应该为每个

进行媒体查询
@media (min-width: 430px) {


    .tablet {
        display:block !important;
    }
      .mobile {
        display: none !important;
    }
    .desktop{
      display: none !important;
    }
}

@media (max-width: 600px) {
    .mobile {
        display:block !important;
    }
    .tablet {
       display: none !important;
    }
    .desktop{
      display: none !important;
    }
}

@media (min-width: 900px) {
    .tablet {
       display: none !important;
    }
      .mobile {
       display: none !important;
    }
    .desktop{
      display:block !important;
    }
}

示例: https://plnkr.co/edit/Cet7wG4qrK9DcG1vlOVg?p=preview

答案 2 :(得分:0)

我们将使用媒体屏幕在移动设备,笔记本电脑和磁盘顶屏幕中显示图像

&#13;
&#13;
.hero img{
   background-repeat: no-repeat;
   background-position: center center;
   background-size: cover;
   width:100%;
   }
  @media screen and (max-width: 500px){
        .hero img{
            display: block !important;
        }
    }
    @media screen and (min-width: 501px) and (max-width:880px){
        .hero1 img{
            display: block !important;
        }
    }
    @media screen and (min-width: 881px){
        .hero2 img{
            display: block !important;
        }  
    }
&#13;
    <div class="hero" >
         <img src="https://cdn.pixabay.com/photo/2013/06/09/18/50/tulip-123795_960_720.jpg" alt="" style="display: none">
     </div>
     <div class="hero1">
         <img src="https://cdn.pixabay.com/photo/2012/03/03/23/13/tulips-21598_960_720.jpg" alt="" style="display: none">
     </div>
     <div class="hero2">
         <img src="https://cdn.pixabay.com/photo/2016/10/07/14/01/tangerines-1721620_960_720.jpg" alt="" style="display: none">
     </div>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

试试

img {
  max-width: 100%;
  height auto; 
}