元素居中的方法

我将使用下面的HTML结构从简单到复杂开始讲解:

<div class="center">
  <img src="jimmy-choo-shoe.jpg" alt>
</div>

使用absolute定位居中

这种 方案 有非常好的跨浏览器支持。有一个缺点就是必须显式声明外部容器元素的height:

.absolute-aligned {

    position: relative;

    min-height: 500px;

    background: hsl(200, 100%, 97%);

}

.absolute-aligned img {
    width: 50%;
    min-width: 200px;
    height: auto;
    overflow: auto;
    margin: auto;
    position: absolute;
    top: 0; left: 0;
    bottom: 0; right: 0;
}

使用translate居中

.center {
    background: hsl(180, 100%, 97%);
    position: relative;
    min-height: 500px;
}
.center img {
    position: absolute;
    top: 50%; left: 50%;
    transform: translate(-50%, -50%);
    width: 30%; height: auto;
}
但是有以下几种缺点:
CSS transform 在部分就浏览器上需要使用 前缀。
不支持 IE9 以下的浏览器。
外部容器需要设置height (或者用其他方式设置),因为不能获取 绝对定位 的内容的高度。
如果内容包含文字,现在的浏览器合成技术会使文字模糊不清。
##使用Flexbox居中
当新旧语法差异和浏览器前缀消失时,这种方法会成为主流的居中方案。

.center {
background: hsl(240, 100%, 97%);
display: flex;
justify-content: center;
align-items: center;
}
.center img {
width: 30%; height: auto;
}
在很多方面 flexbox 是一种简单的方案, 但是它有新旧两种语法以及早期版本的IE缺乏支持 (尽管可以使用 display: table-cell作为降级方案)。

使用calc居中

在某些情况下比flexbox更全面:

.center {
    background: hsl(300, 100%, 97%);
    min-height: 600px;
    position: relative;
}

.center img {
    width: 40%;
    height: auto;
    position: absolute;
    top: calc(50% - 20%);
    left: calc(50% - 20%);
}

很简单,calc 允许你基于当前的页面布局计算尺寸。在上面的简单计算中, 50% 是容器元素的中心点,但是如果只设置50%会使图片的左上角对齐div的中心位置。 我们需要把图片向左和向上各移动图片宽高的一半。计算公式为:

top: calc(50% - (40% / 2));
left: calc(50% - (40% / 2));

在现在的浏览其中你会发现,这种方法更适用于当内容的宽高为固定尺寸:

.center img {
    width: 500px; height: 500px;
    position: absolute;
    top: calc(50% - (300px / 2));
    left: calc(50% - (300px – 2)); 
}

这种方案和flex一样有许多相同的缺点: 虽然在现代浏览器中有良好的支持,但是在较早的版本中仍然需要浏览器前缀,并且不支持IE8。

.center img {
    width: 40%; height: auto;
    position: absolute;
    top: calc(50% - 20%);
    left: calc(50% - 20%);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 4,613评论 0 26
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,512评论 0 6
  • 元素居中 现在不管是水平居中还是垂直居中都有很多方法实现,但是选择适合项目的居中方法是一门优雅的学问,下文推荐一些...
    左冬的博客阅读 689评论 0 4
  • 绝对定位元素的居中实现 如果要问如何CSS实现绝对定位元素的居中效果,很多人心里已经有答案了。 一、 兼容性不错的...
    贰贰九阅读 236评论 1 1
  • 今天外面细雨一直没停过。 下午4点多钟看完余华小说,<在细雨中呼唤>。不知道是不是还没完全走出书中故事人物情节,心...
    舒y心阅读 269评论 2 11