用Bootstrap写响应式banner长条图

需求:1、需要实现响应式,在各种手机浏览器和在PC上正常显示;2、长条图图片响应式,手机上和PC上分别使用不同大小的长条图。

分析:首先要让长条图居中自适应,有两种方式,①让长条图作为div的背景图,自适应;②将长条图banner以<img>插入div中,自适应;

 

我们一步一步的完成:

step1:这里我们先使用背景图的方式处理

<div id="header"></div>

#header{
  height: 350px;
  background-image: url('../images/banner@1920x350.jpg');
  background-position: center center; // 让背景居中垂直水平居中显示
  background-repeat: no-repeat;
  background-size: cover; // 按照较小边对图片进行缩放
}

单现在的问题是当屏幕宽度缩放到移动设备的时候banner的内容展示不全,我们希望当我们缩小到快要展示不全时使用banner小图进行展示。这就需要使用图片响应式。

step2:使用图片响应式,我们不能在background-image: url()中将图片写死,需要让JS去判断该使用什么图片,并且将图片src作为data属性的值从html中传递给js。

<div id="header" data-image-lg="images/banner@1920x350.jpg" data-image-sm="images/banner@750x325.jpg"></div>

#header{
  height: 350px;
  // background-image: url('../images/banner@1920x350.jpg');
  background-position: center center;
  background-repeat: no-repeat;
  background-size: cover;
}

js:

$(document).ready(function(){
  resize();
  $(window).on('resize', resize);
})

function resize() {
  //屏幕宽度发生变化改变banner
  var windowWidth = $(window).width();
  var isSmall = windowWidth < 840; //当前屏幕宽度是否小于840px
  var imgSrc = isSmall ? $('#header').data('image-sm') : $('#header').data('image-lg')
  $('#header').css('backgroundImage', 'url('+imgSrc+')');
}

但是现在还是有点小问题,在屏幕宽度小于840px时候,背景图确实会变成小图,我们继续缩小发现有一部分想要的内容还是没法看见,如下图:

我们希望的情况是当我们再缩小时,图片高度和宽度都可以按照视口大小缩放。这显然用背景图的方式就没法完成,思路是当小于840px我们使用<img>的方式。

step3:修改下我们的js代码和css代码

$(document).ready(function(){
  resize();
  $(window).on('resize', resize);
})

function resize() {
  //屏幕宽度发生变化改变banner
  var windowWidth = $(window).width();
  var isSmall = windowWidth < 840;
  var imgSrc = isSmall ? $('#header').data('image-sm') : $('#header').data('image-lg')
  $('#header').css('backgroundImage', 'url('+imgSrc+')');

  if (isSmall) { // 小于840px使用img元素添加banner
      $('#header').html('<img src="'+imgSrc+'">')
  } else {
      $('#header').empty();
  }
}
#header{
  background: #f0f0f0;
  background-repeat: no-repeat;
  background-position: center center;
  background-size: cover;
}
/** 如果屏幕大于840px才设置header的高度,小于让图片撑开 **/
@media (min-width: 840px) {
  #header{
    height: 350px;
  }
}
/** 设置img banner的宽度100% **/
#header > img{
  width: 100%;
}

完成,效果和素材可以在github下载查看:https://github.com/MesopotamiazZ/shenma

 

posted @ 2017-08-14 16:59  MesopotamiazZ  阅读(3444)  评论(0编辑  收藏  举报