资讯专栏INFORMATION COLUMN

CSS垂直居中,你会多少种写法?

caohaoyu / 1060人阅读

摘要:如果我们直接可以计算出正确的和值,岂不是一次到位函数正有此功能,当然我们需要知道子元素的宽高效果是一个作用于内联元素的属性。内联元素的特性是会和其它内联元素或者文字在同一行显示,但是默认情况下是与父元素基线对齐的。

  CSS控制居中是前端开发中非常常用的布局技能,本文列出几种CSS控制元素居中的几种方法。
  谈及HTML元素居中展示,涉及到水平居中和垂直居中,以及水平垂直居中。由于HTML文档流是水平方向的,所以水平方向上的布局控制比垂直方向要简单很多,居中也是如此。不过(水平)垂直居中还是有很多种写法,至少一只手是数不过来了,本文列出几种,并进行简单比较。

一、水平居中

  使用CSS控制水平居中很简单:

块级元素 设置width,并设置margin auto

内联元素 父元素设置text-align center

HTML代码如下:

水平居中哦
1. 块级元素水平居中
.container {
  height: 300px;
  width: 300px;
  border: 1px solid red;
}

.content {
  width: 10rem;
  border: 1px solid green;
  margin: 0 auto;
}

效果:

2. 内联元素水平居中
.container {
  height: 300px;
  width: 300px;
  border: 1px solid red;
  text-align: center;
}

.content {
  display: inline-block;
  border: 1px solid green;
}

效果:

代码很简单,而且没什么兼容性问题,所以通常也不需要用别的复杂方式来实现水平居中效果。

二、水平垂直居中

  使用CSS控制垂直居中(或者水平垂直居中)就不像控制垂直居中那么方便,这里主要罗列几种。

1. flex布局

flex布局出现以后,垂直居中就很方便了,直接设置父元素:

display flex
align-items center

如果同时要水平居中,则同时设置:

justify-content center

需要注意的是IE10+才支持,webkit前缀浏览器设置flex属性需要加webkit。

.container {
  width: 300px;
  height: 300px;
  border: 1px solid red;
  display: -webkit-flex;
  display: flex; // 关键属性
  align-items: center; // 垂直居中
  justify-content: center // 水平居中
}

.content {
  border: 1px solid green;
}

2. margin+ position:absolute布局

  position: absolute布局的元素,通过设置top/bottom, left/right这两对属性,可以让元素在垂直方向和水平方向分别具有了自适应的特性。就像div在水平方向的默认表现一样!
上文中对于块级元素的水平居中,我们设置宽度然后配合以margin可以实现水平居中。而对于设置了top/bottom,left/right的absolute定位元素,我们设置宽高再配合margin就可以达到水平垂直居中:

.container {
  width: 300px;
  height: 300px;
  position: relative;
  border: 1px solid red;
}

.content {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  width: 200px;
  height: 100px;
  margin: auto;
  border: 1px solid green;
}

效果:

兼容性很好,IE8以上支持。

3. transform + absolute

  absolute定位元素的left、top属性是子元素的左边界、上边界相对父元素进行定位;transform是CSS3中非常强大的一个属性,可以接收多个属性值,包括旋转、缩放、平移等多种功能。这里使用二者配合,先将子元素左上定点定位到父元素中心点,再使用transform将子元素中心点移动到父元素的中心点即可:

.container {
  width: 300px;
  height: 300px;
  position: relative;
  border: 1px solid red;
}

.content {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);  
  border: 1px solid green;
}

效果:

  这个方法有个小缺陷,就是translate函数的参数,最后的计算值不能为小数,否则有的浏览器渲染出来效果会模糊,所以使用本方法的话最好设置一下宽高为偶数。

4. absolute+margin负值

  与上一种方法很类似,上一种方法是使用transform将元素向左上平移,本方法则是使用margin负值的方式将元素拉向左上角。
代码:

.container {
  width: 300px;
  height: 300px;
  position: relative;
  border: 1px solid red;
}

.content {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 200px;
  height: 100px;
  margin-top: -50px;
  margin-left: -100px;
  border: 1px solid green;
}

效果:

5. absolute + calc

  从上两种方法可以看到,absolute设置了left和top再通过平移或者margin将元素重新定位回去。如果我们直接可以计算出正确的left和top值,岂不是一次到位?calc函数正有此功能,当然我们需要知道子元素的宽高:

.container {
  width: 300px;
  height: 300px;
  border: 1px solid red;
  text-align: center;
  position: relative;
}

.content {
  position: absolute;
  border: 1px solid green;
  width: 200px;
  height: 100px;
  left: calc(50% - 100px);
  top: calc(50% - 50px);
}

效果:

6. line-height + vertical-align

  vertical-align是一个作用于内联元素的属性。内联元素的特性是会和其它内联元素或者文字在同一行显示,但是默认情况下是与父元素“基线对齐”的。这里的的基线指的是父元素每一行中的一个垂直位置,是英文x下边缘所在的水平, 通过设置vertical-align为middle可以将内联元素的中部对齐父元素的中部(基线+字母x的一半高度)。所以可以利用这一点,将父元素的行高设置为其自身高度,然后将子元素与父元素中线对齐,即可实现垂直居中。
代码:

.container {
  width: 300px;
  height: 300px;
  border: 1px solid red;
  line-height: 300px;
  text-align: center;
}

.content {
  display: inline-block;
  line-height: 1.5;
  border: 1px solid green;
  vertical-align: middle;
}

效果:

以上几种方法各有不同的适用条件,因此也有不同的优缺点,下表对各种方法进行了比较:

方法 条件 兼容性
flex布局 IE10+
margin + absolute 知道子元素宽高 IE8+
transform + absolute 无,子元素宽高应为偶数 IE10+
absolute + margin负值 知道子元素宽高
absolute + calc 知道子元素宽高 IE9+
line-height + vertical-align 知道父元素宽高

  CSS中同一种表现效果往往有多种不同的实现方法,要刻意地尝试多种写法,避免熟悉了一两种方法就止步不前,这样才能对各种情况得心应手。

本文最先发布于:http://wintc.top/site/article...,转载请注明出处。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/114526.html

相关文章

  • 不定元素宽高用css实现内容水平和垂直居中

    摘要:在开发中经常遇到这个问题,即让某个元素的内容在水平和垂直方向上都居中,内容不仅限于文字,可能是图片或其他元素。这篇文章就来总结一下都有哪些方法可以实现水平和垂直都居中。表示这些元素将相对于本容器水平居中,也是同样的道理垂直居中。 在开发中经常遇到这个问题,即让某个元素的内容在水平和垂直方向上都居中,内容不仅限于文字,可能是图片或其他元素。而且我们希望不要涉及宽度和高度,也就是说,我们不...

    Chao 评论0 收藏0
  • css 垂直居中方法汇总

    摘要:优点写法简单,适应性好缺点兼容性一般,不支持浏览器小节以上共有种方式来实现垂直居中的效果,个人是最青睐第种方式的,兼容性好,适应性好,各位小伙伴还有没有其他的实现方式呢 查看原文可以有更好的排版效果哦 前言 居中是平时工作中的最常见的一种需求,各种图片居中或者各种弹窗,水平居中还好,特别是垂直居中,很多初学者表示太难写了,现在列举一些常用的方法。 实战 这里只讲述css相关的方法,js...

    CarterLi 评论0 收藏0
  • 前端面试每日3+1(周汇总2019.08.11)

    摘要:前端面试每日题,以面试题来驱动学习,每天进步一点让努力成为一种习惯,让奋斗成为一种享受相信坚持的力量项目地址推荐欢迎跟一起折腾前端,系统整理前端知识,目前正在折腾,打算打通算法与数据结构的任督二脉。 《论语》,曾子曰:吾日三省吾身(我每天多次反省自己)。 前端面试每日3+1题,以面试题来驱动学习,每天进步一点! 让努力成为一种习惯,让奋斗成为一种享受!相信 坚持 的力量!!! 项目...

    Baoyuan 评论0 收藏0
  • 前端面试每日3+1(周汇总2019.08.11)

    摘要:前端面试每日题,以面试题来驱动学习,每天进步一点让努力成为一种习惯,让奋斗成为一种享受相信坚持的力量项目地址推荐欢迎跟一起折腾前端,系统整理前端知识,目前正在折腾,打算打通算法与数据结构的任督二脉。 《论语》,曾子曰:吾日三省吾身(我每天多次反省自己)。 前端面试每日3+1题,以面试题来驱动学习,每天进步一点! 让努力成为一种习惯,让奋斗成为一种享受!相信 坚持 的力量!!! 项目...

    马永翠 评论0 收藏0
  • 前端培训-初级阶段(13、18)

    摘要:年月欧洲计算机制造商协会发表了标准,它是的一个扩延,它也被称为年月首版年月日截止发布日期,的官方名称是,国际意在更频繁地发布包含小规模增量更新的新版本,下一版本将于年发布,命名为。 前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的...

    YorkChen 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<