代码地址如下:
http://www.demodashi.com/demo/11593.html

效果演示:

demo点查看效果

需求说明:

如下图所示为设计图,希望在图片上传无规则无规律的情况下实现设计。

结论说明:

并没有完美解决上传图片尺寸无规则但显示完美展现设计图的方案,(ps:如果小伙伴们有更好的方法,请联系我~)。题中说采用了5种样式,其中前4种为css样式处理,第5种为通过js处理。

一图说明5种样式区别

样式代码说明:

第一种样式图集1

第一种样式是采用了background的方式,把图片作为背景的url,使用background-size:cover使图片覆盖,位置选用了居中,图片撑开选用了占位图;css左右采用flex分割。(请忽略和设计图不一样非2:1分割的问题,因为没有找到2:1的占位图……);示例为上方的图集1,可以看出图片是居中覆盖,且随着屏幕的增大而不改变图片,但是由于图片居中所以会显示不全吗,且针对竖图时截的莫名其妙。

主要的html结构(左边容器):

<div class="wrap_hd">
<div class="left_hd">
<div class="img_wrap " >
<div class="real_img" style="background-image: url(http://www.sinaimg.cn/dy/slidenews/2_img/2016_27/76980_1845028_808632.jpg);"></div>
![](//upload-images.jianshu.io/upload_images/1094385-c20207eb99229aac.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
</div>
</div>
<div class="right_hd">
<div class="img_wrap">
<div class="real_img height_auto" style="background-image: url(http://m1.sinaimg.cn/maxwidth.2880/m1.sinaimg.cn/1e072ed856226419f37c4e24b4e91b81_683_1024.jpg);"></div>
![](//upload-images.jianshu.io/upload_images/1094385-fdf2080d8682860e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) </div>
<div class="img_wrap hdphoto_icon ">
<div class="real_img" style="background-image: url(http://www.sinaimg.cn/dy/slidenews/4_img/2016_29/704_1970744_807346.jpg);"></div>
![](//upload-images.jianshu.io/upload_images/1094385-254c783e492129be.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
</div>
</div>
</div>

涉及的css:

.wrap_hd{
clear: both;
overflow: hidden;
display: box;
display: -webkit-box;
display: flex;
margin-top: 5px;
}
.left_hd{
box-flex:1;
-webkit-box-flex:1;
flex:1;
margin-right: 5px;
}
.left_hd .img_wrap{
overflow: hidden;
position: relative;
}
.right_hd{
box-flex:1;
-webkit-box-flex:1;
flex:1;
}
.right_hd .img_wrap{
position: relative;
overflow: hidden;
}
.wrap_hd .real_img{
width: 100%;
height: 100%;
background-repeat: no-repeat;
background-position: center center;
background-size: cover;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 2;
}
.right_hd div{
overflow: hidden; }
.right_hd .img_wrap:first-child{
margin-bottom: 4px;
}
.right_hd .img_wrap:last-child{
}
.wrap_hd img{
max-width: none;
width: 100%;
}

第二种样式图集2

第二种样式及以下html结构与第一种样式不同,以下样式都是通过限制元素img及其父元素的宽高来限制图片

图集样式2是通过给图片限高固定200,而宽度按图来定做的,优点是高度保持不变,且图片不会被拉伸,缺点就是图片无法铺满而导致的视觉不好看。

主要的html如下:

<div class="wrap_hd1">
<div class="left_hd1">
![](//upload-images.jianshu.io/upload_images/1094385-9bae93a7605807f0.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
</div>
<div class="right_hd1">
<div >
![](//upload-images.jianshu.io/upload_images/1094385-f5b4e25b491bda73.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
</div>
<div>
![](//upload-images.jianshu.io/upload_images/1094385-be935c50d510a3d0.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
</div>
</div>
</div>

主要的css为:

.wrap_hd1 .left_hd1 img{
width: auto;
height:200px;
}
.wrap_hd1 .right_hd1 img{
width: auto;
height:98px;
}

第三种样式图集3

第三种样式是高度保持固定200px,而宽度会被铺满,如图集3,一个明显的缺点就是过宽时图片会被拉伸。感觉项目中不会采用这种方式的。html同图集2.

主要css:

.wrap_hd1 .left_hd2 img{
width: 100%;
height:200px;
}
.wrap_hd1 .right_hd2 img{
width: 100%;
height:98px;
}

第四种样式图集4

第四种样式如图集4,主要区别为高度采用max-height这样会使竖向无法对齐,宽度如果采用width:100%图片会拉伸,宽度如果采用width:auto图片会有空隙。

主要css:

.wrap_hd1 .left_hd3 img{
width: 100%;
max-height:200px;
}
.wrap_hd1 .right_hd3 img{
width: 100%;
max-height:98px;
}

第五种样式图集5

第五种样式在demo中有两个,一种是左边为横图图集,一种是左边为竖图图集,区别在于横图截取右侧部分,竖图截取下侧部分。js主要过程就是图片加载完成后获取当前图片的宽高,以及其父容器的宽高,两者相对比来决定当前容器中的图以定宽还是定高。缺点是过宽会有空隙。

主要js:

$('.j_hdphoto img').each(function(){
var self = this,
box_width,
box_height,
box_scale,
img_width,
img_height,
img_scale;
var img = new Image();
console.log(self.src);
img.onload=function(){
box_width = $(self).parent().width();
box_height = $(self).parent().height() != 0?$(self).parent().height():1;
box_scale = box_width/box_height;//父容器
img_width = $(self).width();
img_height = $(self).height() != 0?$(self).height():1;
img_scale = img_width/img_height;//图片
if(box_scale<img_scale){
//图片太宽
if(img_scale>1){
//横图
$(self).css('height',box_height);
}else{
//竖图
$(self).css('width',box_width);
}
}else{
//图片太高
if(img_scale>1){
//图片是个横图
$(self).css('height',box_height); }else{
//竖图
$(self).css('width',box_width);
} }
img.onload = null;
}
img.src = self.src;
})

项目文件截图:

只有一个HTML文件:

结论:

几种pk一下,感觉图集1、图集5还是比较可取的,做一个这样的对比主要是想说以后产品要求这个图就可以一个demo解决啦!有错误之处还请多多指教。5种样式实现div容器中三图摆放实例对比说明

代码地址如下:
http://www.demodashi.com/demo/11593.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

5种样式实现div容器中三图摆放实例对比说明的更多相关文章

  1. 让字体在div容器中垂直居中

    1. 只显示一行数据的话: 给容器设置height和line-height,并使两个值相等,再加上over-flow:hidden .test{ height:40px; line-height:40 ...

  2. div容器中内容垂直居中

    #box{ width:200px; height:200px; line-height: 200px; vertical-align: middle; margin: 5px; background ...

  3. IOC容器中bean的生命周期

    一.Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进行管理的过程如下: (1).通 ...

  4. Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签

    写在前面 上文Spring源码学习-容器BeanFactory(二) BeanDefinition的创建-解析前BeanDefinition的前置操作中Spring对XML解析后创建了对应的Docum ...

  5. 7 -- Spring的基本用法 -- 5... Spring容器中的Bean;容器中Bean的作用域;配置依赖;

    7.5 Spring容器中的Bean 7.5.1 Bean的基本定义和Bean别名 <beans.../>元素是Spring配置文件的根元素,该元素可以指定如下属性: default-la ...

  6. spring:如何用代码动态向容器中添加或移除Bean ?

    先来看一张类图: 有一个业务接口IFoo,提供了二个实现类:FooA及FooB,默认情况下,FooA使用@Component由Spring自动装配,如果出于某种原因,在运行时需要将IFoo的实现,则F ...

  7. 《转载》CSS中的三种样式来源:创作人员、读者和用户代理

    CSS中的样式一共有三种来源:创作人员.读者和用户代理,来源的不同会影响到样式的层叠方式,很多第一次学习CSS的朋友,对这三种来源可能会存在一些困惑,下面我写一下自己的理解,若有错误的地方还请指正. ...

  8. SS中的三种样式来源:创作人员、读者和用户代理

    CSS中的样式一共有三种来源:创作人员.读者和用户代理,来源的不同会影响到样式的层叠方式,很多第一次学习CSS的朋友,对这三种来源可能会存在一些困惑,下面我写一下自己的理解,若有错误的地方还请指正. ...

  9. html中css的三种样式

    在html中定义CSS样式的方法有三种,新建CSS文件 使用link 关联 这种是最常用的外部引用样式,第二种讲样式写在 head 头部里面 这种是页面样式 ,第三中样式直接写在行内  style里面 ...

随机推荐

  1. Ubuntu用户管理原理

    Ubuntu账户: Ubuntu有三类账户:超级用户.普通用户以及系统用户. 每一个用户在ubuntu中都必须拥有一种账户,在Ubuntu中, /etc/passwd用来保存每个账户的信息.实际密码保 ...

  2. 【BZOJ 1052】 1052: [HAOI2007]覆盖问题 (乱搞)

    1052: [HAOI2007]覆盖问题 Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄 膜把这些小树遮盖起来,经过一番长久的 ...

  3. AC自动机专题总结

    最近学习了AC自动机,做了notonlysuccess大牛里面的题,也该来个总结了. AC自动机(Aho-Corasick Automaton)在1975年产生于贝尔实验室,是著名的多模匹配算法之一. ...

  4. 实验四实验报告————Android基础开发

    实验四实验报告----Android基础开发 任务一 关于R类 关于apk文件 实验成果 任务二 活动声明周期 实验成果 任务三 关于PendingIntent类 实验成果 任务四 关于布局 实验成果 ...

  5. js作用域对象与运用技巧

    1. JS作用域 1.1 全局作用域和局部作用域 函数外面声明的就是 全局作用域 函数内是局部作用域 全局变量可以直接在函数内修改和使用 变量,使用var是声明,没有var是使用变量. 如果在函数内使 ...

  6. uva1632 (区间DP)

    题意:有n个宝藏,在x轴上,每个宝藏在某个时间会消失,问最少吃完所有宝藏的时间是多少,否则输出no solution 分析:区间DP,f[i][j][01]代表i到j区间内的全部吃完,停留在左/右端, ...

  7. Codeforces Gym 100269K Kids in a Friendly Class 构造题

    Kids in a Friendly Class 题目连接: http://codeforces.com/gym/100269/attachments Description Kevin resemb ...

  8. maven的几个重要配置文件pom.xml、settings.xml;Maven打包生成包含所有依赖的jar包

    一个java项目通过maven自动下载依赖时,会涉级读取三个配置文件,分别是项目下的pom.xml 文件 .用户家目录下的.m2/settings.xml 与 maven 全局配置settings.x ...

  9. [转]SSIS: By coding

    本文转自:http://www.codeproject.com/Articles/604197/SSIS-By-coding Introduction SSIS better known as “SQ ...

  10. lumisoft邮件内容中文乱码问题

    修改MIME_b_Text.cs文件,红色字体为添加的部分,绿色为修改部分 private static Encoding m_pEncoding = Encoding.Default; #regio ...