代码地址如下:
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. Android异步消息处理机制(多线程)

    当我们需要执行一些耗时操作,比如说发起一条网络请求时,考虑到网速等其他原因,服务器未必会立刻响应我们的请求,如果不将这类操作放在子线程里去执行,就会导致主线程被阻塞住,从而影响用户对软件的正常使用. ...

  2. 将字符串的编码格式转换为utf-8

    方式一: /** * 将字符串的编码格式转换为utf-8 * * @param str * @return Name = new * String(Name.getBytes("ISO-88 ...

  3. node webkit (nw.js) 无法调试的结局方案之一

    之前做过nw项目,当时主要内容是由别人做的!过后回到家中,自己研究了下这方面.结果发现我自己写的nw 客户端不可以调试!在网上各种找办法,没找到,深感绝望,突然看到 (https://github.c ...

  4. Java 的BigDecimal

    原文:http://blog.csdn.net/diyu122222/article/details/76887382 decimal decimal(18,0) 18是定点精度,0是小数位数. de ...

  5. UNICODE串转换成char类型串的四种方法

    1. 调用 WideCharToMultiByte() API int WideCharToMultiByte (     UINT    CodePage,                //1 U ...

  6. 利用cca进行fmri分析

    在肖柯的硕士毕业论文中<基于CCA的fMRI时空模型数据处理方法的研究>,他的总体思路是利用cca提取出fmri图像在时间和空间上两个相关系数,也就是两个特征,然后利用pca,对这两个特征 ...

  7. XMPP 常见错误:<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>

    一般登陆/注册 出错,会在认证失败这里打印出error信息 - (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLEleme ...

  8. Spring事务管理笔记

    事务的目的就是要保证数据的高度完整性和一致性. 在实际的项目中,大多都是使用注解的方式来实现事物,这里也就简单记录下使用@Transactional方法和注意事项. 在xml中添加配置 1234567 ...

  9. weblogic生成和配置SSL证书

    采用Linux自带的OPENSSL进行证书的生成工作 准备阶段 以root登录,同时在el01gbcn01上完成 [oracle@el01gbcn01]# which java /u01/FMW/we ...

  10. kafka 学习之初体验

    学习问题: 1.kafka是否需要zookeeper?2.kafka是什么?3.kafka包含哪些概念?4.如何模拟客户端发送.接受消息初步测试?(kafka安装步骤)5.kafka cluster怎 ...