图片分为已知尺寸和未知尺寸的,已知尺寸的水平垂直居中相对比较容易,不再多说。这里着重介绍未知尺寸的,列出几种常见方法出来,供大家参考。
考虑如下问题:
1 |
|
大概有几种解法:
以下办法兼容性各有不同,慎重使用
background
大法
通过
background
设置图片在容器内居中
css代码
1 |
|
html代码
1 |
|
table-cell
大法
通过设置
display:table-cell
css
1 |
|
html
1 |
|
flex
大法
通过 flex 的布局居中
css
1 |
|
html
1 |
|
transform
大法
通过
position: absolute;
和transform
搭配使用
css
1 |
|
html
1 |
|
margin:auto
大法
通过
margin:auto
和 top,right,bottom,left 为 0 搭配使用
css
1 |
|
html
1 |
|
grid
大法
css
1 |
|
html
1 |
|
截至本稿发出时(2018-08-26),
grid
兼容性不是很好,如下图所示:
writing-mode
大法
这个方法比较冷门,可能好多同学都没特别了解过writing-mode
。
writing-mode
能改变内容的显示方向。最初是用来作文字排版用的,比较常用的场景就是中国古诗词的垂直显示。如有兴趣了解,可以移步至CSS writing-mode与文字垂直排版实例
css:
1 |
|
html:
1 |
|
object-fit
大法
如果仅考虑本题的图片居中场景,则可以使用object-fit
这个css属性。object-fit
官方描述如下:
The object-fit CSS property specifies how the contents of a replaced element should be fitted to the box established by its used height and width.
是不是看不懂?其实我也看不懂😂。大概意思是说:object-fit
属性指定了一个替换元素的内容如何适应到它的框(这个框有可能是指定了宽高的)。
那什么是替换元素?
其内容不受CSS视觉格式化模型控制的元素,比如image, 嵌入的文档(iframe之类)或者applet。比如,img元素的内容通常会被其src属性指定的图像替换掉。替换元素通常有其固有的尺寸:一个固有的宽度,一个固有的高度和一个固有的比率。比如一幅位图有固有用绝对单位指定的宽度和高度,从而也有固有的宽高比率。另一方面,其他文档也可能没有固有的尺寸,比如一个空白的html文档。
CSS渲染模型不考虑替换元素内容的渲染。这些替换元素的展现独立于CSS。object, video, textarea, input也是替换元素,audio和canvas在某些特定情形下为替换元素。
使用CSS的content属性插入的对象是匿名替换元素。
object-fit
有5个值:
- fill: 填充。默认值。替换内容拉伸填满整个content box, 不保证保持原有的比例。
- contain: 包含。保持原有尺寸比例。保证替换内容尺寸一定可以在容器里面放得下。因此,此参数可能会在容器内留下空白。
- cover: 覆盖。保持原有尺寸比例。保证替换内容尺寸一定大于容器尺寸,宽度和高度至少有一个和容器一致。因此,此参数可能会让替换内容(如图片)部分区域不可见。
- none: 无。保持原有尺寸比例。同时保持替换内容原始尺寸大小。
- scale-down: 缩减。就好像依次设置了none或contain, 最终呈现的是尺寸比较小的那个。
在这里,我们使用none
即可。
1 |
|
实际上,我们这里省略了另一个属性object-position
。这个属性用来控制替换元素内容的显示位置,一般是与object-fit
一起使用的,它的默认值是center center
, 与我们当前场景符合,所以在这里我们省略了它。它的值所有值列举如下:
值 | 描述 | 备注 |
left top | 左上 | 如果只指定第一个值,则第二个值默认为 center |
left center | 左中 | |
left bottom | 左下 | |
right top | 右上 | |
right center | 右中 | |
right bottom | 右下 | |
center top | 中部居顶 | |
center center | 横竖居中 | |
center bottom | 中部居底 | |
x% y% | 第一个是水平位置,第二个是垂直位置。比如:左上是0% 0%, 右下是:100% 100% | 如果只指定x%,则 y% 为 50% |
xpos ypos | 第一个是水平位置,第二个是垂直位置。比如:左上是0 0,单位可以是像素(px)或其它css单位,也可使用百分比 | 如果只指定xpos,则 ypos 为 50%,你可以混合使用 数值和百分比 |