一,使用 JS,先上效果图,右图为定死宽高的效果,左图为处理之后的

1, 主要思路是,在图片 onload 后,将图片的宽高比和 div 容器的宽高比进行比较,

2, 从而确定拉伸或者压缩之后是宽还是高不足以填充容器

3,将不足以填充容器的方向设置为和容器一致

4,此时,图片的另一个方向可能超出容器,此时只要将图片做反方向的偏移,使其居中

5,容器定义超出部分不显示,以下是结合 Vue 的一个例子

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图片居中</title>
<link rel="stylesheet" href="../../common/css/common.css">
<script src="../../common/js/common.js"></script>
<script src="../../common/js/vue.min.js"></script>
<style type="text/css">
#main {
font-size: 0;
}
.box {
display: inline-block;
vertical-align: center;
width: 150px;
height: 150px;
overflow: hidden;
margin: 50px 0 0 20px;
}
</style>
</head>
<body>
<div id="main">
<div class="box" v-for="(item, i) in srcs">
<img :src="item" @load="resizeImg($event, 150, 150)">
</div>
</div>
<script type="text/javascript">
var vm = new Vue({
data: {
srcs: [
"http://img.zcool.cn/community/01b34f58eee017a8012049efcfaf50.jpg@1280w_1l_2o_100sh.jpg",
"http://img17.3lian.com/d/file/201703/07/4ceeb6fc3d7956ac7731290a603e0a84.jpg",
"https://up.enterdesk.com/edpic_source/f5/34/83/f53483429ccc69d00ae98dd5f05317a4.jpg",
"http://img.taopic.com/uploads/allimg/131125/240503-1311250IT642.jpg"
]
},
methods: {
// 对图片大小调整,使其能够刚好充满容器, 多余方向裁剪使得图片不变形
resizeImg: function (ev, w, h) {
var img = ev.target;
console.log(img)
var scalebox = w / h, shifting = 0;
var scaleImg = img.width / img.height;
if (scalebox > scaleImg) {
img.width = w;
shifting = parseInt((img.height - h) / 2);
img.style.marginTop = 0 - shifting + 'px';
} else {
img.height = h;
shifting = parseInt((img.width - w) / 2);
img.style.marginLeft = 0 - shifting + 'px';
}
}
}
}).$mount("#main");
</script>
</body>
</html>

 二,使用 CSS 的 backgroud-image,backgroud-size,backgroud-postion 属性,这个比较简单,兼容性也比较好,推荐使用

注意,绑定数据的时候,使用 backgroud-image 不要使用 backgroud,否则会覆盖 backgroud-size,backgroud-postion 这两个属性

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图片居中</title>
<link rel="stylesheet" href="../../common/css/common.css">
<script src="../../common/js/common.js"></script>
<script src="../../common/js/vue.min.js"></script>
<style type="text/css">
#main {
font-size: 0;
}
.box {
display: inline-block;
vertical-align: top;
margin: 50px 0 0 20px; width: 150px; /* 容器必须设置宽高 */
height: 150px;
background-size: cover;
background-position: center center;
}
</style>
</head>
<body>
<div id="main">
<div class="box" v-for="(item, i) in srcs" :style="{'background-image': 'url(' + item + ')'}"></div>
</div>
<script type="text/javascript">
var vm = new Vue({
data: {
srcs: [
"http://img.zcool.cn/community/01b34f58eee017a8012049efcfaf50.jpg@1280w_1l_2o_100sh.jpg",
"http://img17.3lian.com/d/file/201703/07/4ceeb6fc3d7956ac7731290a603e0a84.jpg",
"https://up.enterdesk.com/edpic_source/f5/34/83/f53483429ccc69d00ae98dd5f05317a4.jpg",
"http://img.taopic.com/uploads/allimg/131125/240503-1311250IT642.jpg"
]
}
}).$mount("#main");
</script>
</body>
</html>

HTML5 图片宽高自适应,居中裁剪不失真的更多相关文章

  1. css+background实现 图片宽高自适应,拉伸裁剪不变形

    图片宽高不固定 ,一样实现自适应,拉伸裁剪不变形,适应各大兼容性.  下面咱们在网上找两张宽高不一样的照片:     No.1                                      ...

  2. jquery操作html中图片宽高自适应

    在网站制作中如果后台上传的图片不做宽高限制,在前台显示的时候,经常会出现图片变形,实用下面方法可以让图片根据宽高自适应,不论是长图片或者高图片都可以完美显示. $("#myTab0_Cont ...

  3. JS实现图片宽高的等比缩放

    关于图片宽高的等比缩放,其实需求就是让图片自适应父容器的宽高,并且是等比缩放图片,使图片不变形. 例如,需要实现如下的效果: 要实现上面的效果,需要知道图片的宽高,父容器的宽高,然后计算缩放后的宽高. ...

  4. 从零开始学习前端开发 — 7、CSS宽高自适应

    一.宽度自适应 语法:width:100%; 注: a)块状元素的默认宽度为100% b) 当给元素设置宽度为100%时,继承父元素的宽度 c) 通常使用宽度自适应实现通栏效果 二.高度自适应 语法: ...

  5. php 图片上传的公共方法(按图片宽高缩放或原图)

    写的用于图片上传的公共方法类调用方法: $upload_name='pic';$type = 'logo_val';$file_name = 'logo_' . $user_id .create_st ...

  6. css3圆形头像(当图片宽高不相等时)

    1.图片宽高相等,width:300px: height:300px; 把他变成宽高100px的圆形头像 img{width:100px; height:100px; border-radius:50 ...

  7. JS快速获取图片宽高的方法

    快速获取图片的宽高其实是为了预先做好排版样式布局做准备,通过快速获取图片宽高的方法比onload方法要节省很多时间,甚至一分钟以上都有可能,并且这种方法适用主流浏览器包括IE低版本浏览器. 我们一步一 ...

  8. 007. 自定义ListBox的item的宽高, 字体居中

    /// <summary> /// 自定义ListBox的item的宽高, 字体居中 /// </summary> /// <param name="sende ...

  9. 转载:JS快速获取图片宽高的方法

    快速获取图片的宽高其实是为了预先做好排版样式布局做准备,通过快速获取图片宽高的方法比onload方法要节省很多时间,甚至一分钟以上都有可能,并且这种方法适用主流浏览器包括IE低版本浏览器. 我们一步一 ...

随机推荐

  1. windows 控制台cmd乱码(及永久修改编码)的解决办法

    注册 windows 控制台cmd乱码(及永久修改编码)的解决办法 转载 2017年11月02日 22:49:52 1067 windows 控制台cmd乱码的解决办法 我本机的系统环境: OS Na ...

  2. create-react-app快速搭建react-app

    npm i create-react-app -g 全局安装 create-react-app mydemo    创建一个项目,安装依赖 cd mydemo 进入mydemo目录 yearn sta ...

  3. solr4.9+tomcat7 multiCore

    ES不支持groupby,于是想看看solr怎么实现的. 搭建环境: 1)下载tomcat7.solr4.9,解压: 2)配置tomcat7的端口和URIEncoding(utf-8): 3)拷贝so ...

  4. Hadoop 管理工具HUE配置-filebrowser配置

    Hue提供了图形化截面管理HDFS数据,可谓之非常方便,但是在配置上,还是有点麻烦的. 1 /home/hadoop/software/cloud/hue/desktop/conf/pseudo-di ...

  5. webscoket通信初步(一)

    只要动手做起来,多投入时间和精力.耐心去研究,以大多人的智商加google,平时遇到的大部分问题我们都是可以自己解决的,大部分的知识我们都是可以掌握的. 我们都知道http协议是单向请求的,无法实现双 ...

  6. 关于git中自己的分支和主分支有冲突的解决方案(git和乌龟git)

    阐述一个案例,最近在开发中遇到一个问题.自己在代码的主分支拉了一个分支,开始快乐的开发修改了.同事小明也在主分支拉了一个分支,也在快乐的修改.小明的开发速度很快,一个问题很快就解决了,并且把自己的代码 ...

  7. centos6.5网络虚拟化技术

    一.配置KVM虚拟机NAT网络 1.创建脚本执行权限 下面是NAT启动脚本 # vi /etc/qemu-ifup-NAT 赋予权限 # chmod +x /etc/qemu-ifup-NAT 下载镜 ...

  8. B-树和B+树的应用

    1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树:⑵若根结点不是叶子结点,则至少 ...

  9. vue 动态路由 Get传值

    main.js //2.配置路由 注意:名字 const routes = [ { path: '/home', component: Home }, { path: '/news', compone ...

  10. tf.nn.embedding_lookup

    tf.nn.embedding_lookup(params, ids, partition_strategy=’mod’, name=None, validate_indices=True, max_ ...