英文 | https://javascript.plainenglish.io/10-css-tricks-you-should-know-for-centering-elements-61092d35b659

翻译 | 杨小爱

在前端开发工程师的日常生活中,使用 CSS 使元素居中是很常见的,这也是面试中经常被问到的问题。

也许你已经使用 flex 或 absolute + transform 来实现它,但你知道至少有 10 种方法可以做到元素居中吗?因此,在今天的文章中,我为大家整理了10个关于实现元素居中的CSS技巧,希望可以帮助你提升CSS技术。

1、absolute + (-margin)

如果元素的宽度和高度已知,我们可以使用至少 3 种方法来使元素居中。例如,在下图中,小猫的宽度和高度分别为“500px”和“366px”。我们应该如何居中?

用 ‘absolute + (-margin) ` 很容易完成!代码如下:

HTML

<div class="container"><img class="cat" src="https://images.unsplash.com/photo-1533743983669-94fa5c4338ec?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1584&q=80" alt="">
</div>

翻译结

CSS

.container {width: 800px;height: 600px;border: solid 1px #e3c1a9;border-radius: 30px;/* Key css */position: relative;
}
.cat{width: 500px;height: 366px;border-radius: 50%;position: absolute;/* Key css */left: 50%;top: 50%;/* half the width */margin-left: -250px;/* half the height */margin-top: -183px;
}

这种方法简单易懂,兼容性好,缺点是我们需要知道子元素的宽高。

演示地址:https://codepen.io/qianlong/pen/yLKXLxM

2、 absolute + margin auto

我们还可以通过将所有方向的距离设置为 0 ,并将边距设置为自动来使小猫居中。

CSS代码如下:

.container {width: 800px;height: 600px;border: solid 1px #e3c1a9;border-radius: 30px;position: relative;
}
.cat{width: 500px;height: 366px;border-radius: 50%;/* Key css */position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;
}

和第一种方法一样,它的兼容性也很好,缺点是需要知道子元素的宽高。

演示地址:https://codepen.io/qianlong/pen/RwMgweO

3、absolute + calc

CSS3 带来了 calc 计算属性,它允许我们通过它来居中一个元素,代码如下:

.container {width: 800px;height: 600px;border: solid 1px #e3c1a9;border-radius: 30px;position: relative;
}
.cat{width: 500px;height: 366px;border-radius: 50%;position: absolute;/* Key css */top: calc(50% - 183px);left: calc(50% - 250px);
}

这种方法的兼容性取决于calc的兼容性,缺点是需要知道子元素的宽高。

演示地址:https://codepen.io/qianlong/pen/zYWzYyR

4、flex

以上三种方法必须提前知道元素的宽高,但元素的宽高不确定怎么办?于是就有了flex ,它非常适合这个。

HTML代码:

<div class="container"><span contenteditable="true" class="content">hello medium</span>
</div>

CSS代码:

.container {width: 400px;height: 200px;border: solid 1px #e3c1a9;border-radius: 30px;/* Key css */display: flex;align-items: center;justify-content: center;
}
.content{padding: 20px;border-radius: 10px;background-color: #e3c1a9;color: #ffffff;
}

这真的很酷,我们可以用很少的代码来居中一个元素,这是我最喜欢的使用方式。

演示地址:https://codepen.io/qianlong/pen/abYyzvG

5、grid

像 flex 一样,grid 也可以非常方便地用于使元素居中。

CSS代码:

.container {width: 400px;height: 200px;border: solid 1px #e3c1a9;border-radius: 30px;/* Key css */display: grid;
}.content{/* Key css */align-self: center;justify-self: center;padding: 20px;border-radius: 10px;background-color: #e3c1a9;color: #ffffff;
}

演示地址:https://codepen.io/qianlong/pen/dymzPMa

6、absolute + transform

使用变换,我们还可以在事先不知道元素的宽度和高度的情况下使元素居中。

CSS代码:

.container {width: 400px;height: 200px;border: solid 1px #e3c1a9;border-radius: 30px;/* Key css */position: relative;
}
.content{/* Key css */position: absolute;left: 50%;top: 50%;/* Key css */transform: translate(-50%, -50%);padding: 20px;border-radius: 10px;background-color: #e3c1a9;color: #ffffff;
}

演示地址:https://codepen.io/qianlong/pen/KKovwgW

7、text-align + line-height + vertical-align

以上6种方式比较容易理解,在我们的工作中也经常用到,接下来的 4 种方法似乎使用频率较低,但也值得学习。

首先,我们可以将 span 的“display”属性设置为“inline-block”。然后通过设置容器的text-align属性为center,span元素可以水平居中。结合 line-height 和其他属性使其垂直居中。

CSS代码:

.container {width: 400px;height: 200px;border: solid 1px #e3c1a9;border-radius: 30px;/* Key css */text-align: center;line-height: 200px;font-size: 0px;
}
.content{font-size: 16px;/* Key css */display: inline-block;vertical-align: middle;line-height: initial;text-align: left;padding: 20px;border-radius: 10px;background-color: #e3c1a9;color: #ffffff;
}

演示地址:https://codepen.io/qianlong/pen/dymzPWL

8、css-table

CSS新的table属性让我们可以将普通元素变成表格元素的真实效果,通过这个特性,一个元素也可以居中。

CSS

.container {width: 400px;height: 200px;border: solid 1px #e3c1a9;border-radius: 30px;/* Key css */display: table-cell;text-align: center;vertical-align: middle;
}
.content {/* Key css */display: inline-block;padding: 20px;border-radius: 10px;background-color: #e3c1a9;color: #ffffff;
}

演示地址:https://codepen.io/qianlong/pen/dymzPJE

9、writing-mode

过去,我习惯使用 write-mode 将内容的布局方向更改为垂直。

但令人惊奇的是它还可以使元素居中,不过这种方法有点难理解,代码量会比较多。

HTML代码:

<div class="container"><div class="content-wrap"><span contenteditable="true" class="content">hello medium</span></div>
</div>

CSS代码:

.container {width: 400px;height: 200px;border: solid 1px #e3c1a9;border-radius: 30px;/* Key css */writing-mode: vertical-lr;text-align: center;
}
.content-wrap{/* Key css */writing-mode: horizontal-tb;display: inline-block;text-align: center;width: 100%;
}
.content {/* Key css */display: inline-block;margin: auto;text-align: left;padding: 20px;border-radius: 10px;background-color: #e3c1a9;color: #ffffff;
}

演示地址:https://codepen.io/qianlong/pen/vYRJErY

10、table

最后,当然,最后一种方式是最不推荐的方式,但我提到它只是作为学习的一个例子。我不建议你在工作中使用它,因为它(在我看来有点)很糟糕。

HTML代码:

<table><tbody><tr><td class="container"><span contenteditable="true" class="content">hello medium</span></td></tr></tbody>
</table>

CSS代码:

.container {width: 400px;height: 200px;border: solid 1px #e3c1a9;border-radius: 30px;/* Key css */text-align: center;
}
.content {/* Key css */display: inline-block;padding: 20px;border-radius: 10px;background-color: #e3c1a9;color: #ffffff;
}

演示地址:https://codepen.io/qianlong/pen/yLKoyqv

写在最后

以上就是我今天与你分享的10个关于CSS实现元素居中的小技巧,希望你能从中学到你想要的知识,如果你觉得它有用的话,请记得点赞我,关注我,并将它分享给你身边做开发的朋友,也许能够帮助到他。

最后感谢你的阅读,祝编程愉快,我们明天见。

学习更多技能

请点击下方公众号

10 个CSS实现元素居中的方法汇总相关推荐

  1. CSS实现元素居中原理解析

    原文:CSS实现元素居中原理解析 在 CSS 中要设置元素水平垂直居中是一个非常常见的需求了.但就是这样一个从理论上来看似乎实现起来极其简单的,在实践中,它往往难住了很多人. 让元素水平居中相对比较简 ...

  2. 【CSS】元素居中总结-水平居中、垂直居中、水平垂直居中

    [CSS]元素居中 一. 水平居中 1.行内元素水平居中 (1)text-align 2.块级元素水平居中 2.1 margin (1)margin 2.2布局 (1)flex+ justify-co ...

  3. css 伪元素居中对齐

    css 伪元素居中对齐 .demo {display: flex;padding: 40px;}.demo::after {content: '';display: inline-block;back ...

  4. css元素居中实现方法

    关于css元素居中,查阅资料和实验有以下几种方法: 水平居中 1.最简单的在父元素中加入 text-align:center .这条语句不用关心子元素是否有固定的尺寸大小. 但只能对图片,按钮,文字等 ...

  5. css中元素居中总结

    很多时候,我们需要让元素居中显示:1. 一段文本的水平居中,2. 一张图片的水平居中,3. 一个块级元素的水平居中:4. 单行文本的竖直居中,5. 不确定高度的一段文本竖直居中,6. 确定高度的块级元 ...

  6. css几个居中的方法

    页面布局,居中是绝对少不了的,居中的方法有很多,今天分享几个. Margin 0 auto.text-align:center.line-height这几个就不用多说了,适合文字.图片和块元素水平居中 ...

  7. CSS隐藏元素五种方法

    css隐藏元素的方法 1.利用opacity透明度来隐藏,opacity设置为0,它只是一种视觉隐藏,元素本身依旧占用它的位置并对网页的布局起到作用,它也同样影响用户交互.在读屏软件中会被识别. 2. ...

  8. IE6/7/8 CSS兼容性问题和解决方法汇总

    断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决,也希望大家能在留言里面跟进自己发现的ie6 7 8bug和解决办法! 1: ...

  9. CSS绝对定位元素居中的几种方法

    CSS居中绝对定位元素的方法,有很多种,下面是我收集的几种 1,div宽度未知1 <body><div style="position: absolute; left: 5 ...

最新文章

  1. 一起谈.NET技术,WCF的问题和Using语句块
  2. java临时的api,JAVA API-day03
  3. SAP Spartacus 的 CSS 架构
  4. mysql event 变量_mysql 中event的用法
  5. linux系统可以用迅雷吗,在Linux系统下使用wine运行迅雷5的方法
  6. anaconda如何装python_如何在已安装Python条件下,安装Anaconda,,并将原有Python添加到Anaconda中...
  7. Android 12 预览版发布,64G手机用户:我又活了
  8. [译].NET 4 中玩耍内存映射文件
  9. CodeIgniter学习笔记(六)——CI超级对象中的input输入类
  10. 《IT项目管理》读书笔记(5) —— 项目时间管理
  11. spring学习8之JDBC的CRUD
  12. 程序员英语5:number和digit都是数字,有什么区别?
  13. 智能一代云平台(十六):解决Linux服务器被植入木马总结
  14. 什么是自然语言处理(NLP)?
  15. 通过经纬度计算两点间的直线距离
  16. 读书笔记:《反脆弱》
  17. 推进全息智慧情报研判,助力构建现代交通安全防控体系
  18. java农夫过河_C语言实现农夫过河代码及解析
  19. matlab通过数据进行曲线拟合 导出公式
  20. R语言使用caret包的confusionMatrix函数计算混淆矩阵、基于混淆矩阵的信息手动编写函数计算accuray、准确率指标

热门文章

  1. FPGA—HDMI 显示器驱动设计与验证(附代码)
  2. 酷派7269_酷派7269(联通版)刷机包_线刷包_救砖包_官方ROM包_固件包下载- 线刷宝ROM中心...
  3. 安卓刷机时代不再!魔趣开源项目创始人宣布:“决定删库跑路了”
  4. [WARNING] The POM for com.tenyears:base-common:jar:1.0 is invalid, transitive dependen
  5. Bootstrap(四十六)
  6. 极大提高效率:论文写作工具神器
  7. java信息安全性_java-信息安全(二十)国密算法 SM1,SM2,SM3,SM4
  8. 第四范式联合创始人陈雨强:机器学习在工业应用中的新思考
  9. 媒体数据中台建设方法论和落地实践
  10. WMS智能仓储管理系统源码 SpringMVC物流仓库管理系统源码