Edge
  • Introduction
  • 文章
    • 如何将 emoji 当成单色 icon 使用
    • 在 web 使用 JavaScript 模块
    • 从零开始写一个 Promise 库
    • 魔幻语言 JavaScript 系列之类型转换、宽松相等以及原始值
    • React 整洁代码最佳实践
    • 魔幻语言 JavaScript 系列之 call、bind 以及上下文
    • 编写扁平化的代码
    • ES6 Promise:模式与反模式
    • 在 Node.js 中使用原生 ES 模块
    • 在工作中学习
    • JavaScript 中的匿名递归
    • 面向初学者的高阶组件介绍
    • CSS Animations vs Web Animations API
    • JavaScript 异常的防范与监控
    • 喜欢用 Git 做的一些小事
    • 移除在 ESM 模式生成的严格模式
    • 编写现代 JavaScript 代码
    • JavaScript 模块化现状
    • JS/React 开发者的 Atom 终极配置
    • 使用 ES6 的浏览器兼容性问题
    • 为什么是 JSONP
    • 实现不定尺寸图片居中的几种方式
    • Base64 简要笔记及其他
    • 关于内存对齐的一点注解
    • 康威生命游戏的简单实现
    • 使用双端队列模拟动态数组的部分功能
    • 三种变长编码方法的 C 实现
  • 聚沙成塔
    • Node.js
      • 包管理器
    • 基于 OS X 开发指南
    • OS X 小技巧
    • 基于 Windows 开发指南
    • Web Tools
    • Service Worker
    • vim
    • shell
    • 奇技
    • 程序员
    • BFC
    • 事件循环
    • 获取自定义全局变量
    • 颜色格式转换 rgb -> hex
    • 页面间 post 传参
    • 函数重载
    • Tree shaking
    • RequireJS tips
  • 算法
    • 约瑟夫问题
    • 简单排序
    • 快速排序
    • 快速排序优化
    • 三路快排和选择
    • 裴波那契
  • ECMAScript
    • 原型
    • Object.is
  • ES6+
    • ES6 Modules
    • import & export
  • React
    • setState
    • react 与 iscroll 的点击问题
    • pureRender
  • git
    • 重写提交信息
    • http 记住密码
  • 拾遗
    • 拾遗
Powered by GitBook
On this page
  • 最终的解决方法如下:
  • 方式二:使用表格布局
  • 方式三:使用背景图片
  1. 文章

实现不定尺寸图片居中的几种方式

这是在实习工作中遇到的一个需求,实现未知尺寸的图片在一固定宽高的容器中水平和垂直居中。

比如是在一个 200px 的正方形容器,图片的宽高可能大于 200px,也可能小于 200px。对于小图片,就是简单的水平和垂直居中,而大图片则要求按比例缩放,并实现居中。

这个问题主要有两个方面的点:

  • 未知尺寸元素的垂直居中

  • 大图片的宽高适配

因为图片大小尺寸未知,且可能超出容器,很多垂直居中的方法不能用。

最终的解决方法如下:

HTML 大概是这样的:

  <div class="box">
    <img src="img/0.jpg" alt="earth shadow" title="It's me">
  </div>

CSS:

.box {
  width: 200px;
  height: 200px;
  position: relative;
  text-align: center;
}
.box img {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: auto;
  max-width: 200px;
  max-height: 200px;
}

将容器的位置设为 relative ,图片的位置设为 absolute ,然后将其 top, right, bottom, left 都设置成0,虽然图片尺寸未知,但是对于一张具体的图片而言是有固定宽高的,所以并不能使它四个方位间距都为0,因此 margin: auto; 会让它居中。如果仅对于宽高都小于200px的图片,这样就足够了,但是对于大图片就不适用,所以再加上 max-width: 200px; max-height: 200px; ,这样图片就可以自适应缩放。

方式二:使用表格布局

还是这段 HTML:

<div class="box1">
  <img src="img/0.jpg"  alt="earth shadow" title="It's me">
</div>

CSS这样写:

.box1 {
  width: 200px;
  height: 200px;
  min-width: 200px;
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}
.box1 img {
  max-width: 200px;
  max-height: 200px;
  vertical-align: middle;
}

方式三:使用背景图片

HTML就直接写了:

<div class="box2"></div>

CSS:

.box2 {
  width: 200px;
  height: 200px;
  background-image: url(img/0.jpg);
  background-repeat: no-repeat;
  background-position: center;
}

直接使用 background-position: center; 实现居中,如图片尺寸小于 200px 就 OK 了。但是对于大图片,会被截掉,所以还需加上 background-size: contain; ,可是对于小图片又有问题,因为加上这个属性会对图片缩放,小图也不例外。而在我们的需求里,对小图要求按照其原有大小显示。

貌似这种方式使用纯 CSS 行不通。

Previous为什么是 JSONPNextBase64 简要笔记及其他

Last updated 6 years ago

查看演示:

查看演示:

一个演示:

demo1
demo2
demo3