博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
css居中方案汇总
阅读量:6040 次
发布时间:2019-06-20

本文共 3611 字,大约阅读时间需要 12 分钟。

1. 水平居中

1.1 行内或者具有行内元素性质的元素(比如文字或者链接)

使其父元素为块级元素的行内元素水平居中。

/* css */.center-children {    text-align: center;}复制代码

1.2 单个块级元素(定宽)

设置块级元素的 margin-left 和 margin-right 为 auto ,来使其水平居中。

注意:这个块级元素要有 width 属性,否则会占满宽度,这时候已经不需要居中了。

/* css */.center-me {    margin: 0 auto;}复制代码

1.3 多个块级元素(聚成一行居中)

方案一:利用display:inline-block; 块级元素inline-block,父元素text-align:center。

/* css */.inline-block-center {  text-align: center;}.inline-block-center div {  display: inline-block;  text-align: left;}复制代码

方案二:flex布局

/* css */.flex-center {  display: flex;  justify-content: center;}复制代码

1.4 多个块级元素(在各自行居中)

利用 margin: xxxpx auto;

/* css */main div {  margin: 0 auto;}复制代码

2. 垂直居中

2.1 行内或者具有行内元素性质的元素(比如文字或者链接)

2.1.1 单行

方案一:padding-top === padding-bottom

/* css */.link {  padding-top: 30px;  padding-bottom: 30px;}复制代码

方案二:line-height === height

若 padding 无效,要使不换行的文字居中有一个技巧,设置文字的 line-height 和 height 的值相等。

/* css */.center-text-trick {  height: 100px;  line-height: 100px;  white-space: nowrap;}复制代码

2.1.2 多行

方案一:padding-top === padding-bottom

方案二:table化 结合 verticl-align
如果这种方法不奏效的话,可以设置文字所在的元素为一个 table cell(无论它直接是 table 还是用CSS使这个元素表现的像一个 table cell),结合 vertical-align 属性处理这种情况,它与我们通常所做的在行上处理元素对齐的方式不同:

/* css *//* table 的情况 */table {  background: white;  width: 240px;  border-collapse: separate;  margin: 20px;  height: 250px;}table td {  background: black;  color: white;  padding: 20px;  border: 10px solid white;  /* default is vertical-align: middle; */}/* display:table 的情况 */.center-table {  display: table;  height: 250px;  background: white;  width: 240px;  margin: 20px;}.center-table p {  display: table-cell;  margin: 0;  background: black;  color: white;  padding: 20px;  border: 10px solid white;  vertical-align: middle;}复制代码

方案三:flex布局

注意:父元素height值(px %)固定

/* css */.flex-center-vertically {  display: flex;  justify-content: center;   /* 排列方向变了,所以变成了垂直方向上的水平居中 */  flex-direction: column;  /* 垂直排列 */  height: 400px;}复制代码

方案四:伪元素

原理:让一个完整高度的伪元素放置在容器内,并与文本垂直对齐。

/* css */.ghost-center {  position: relative;}.ghost-center::before {  content: " ";  display: inline-block;  height: 100%;  width: 1%;  vertical-align: middle;}.ghost-center p {  display: inline-block;  vertical-align: middle;}复制代码

2.2 块级元素

2.2.1 元素高度确定

绝顶定位+百分比+负margin

/* css */.parent {  position: relative;}.child {  position: absolute;  top: 50%;  height: 100px;  margin-top: -50px; /* 考虑padding 和 border 如果不使用box-sizing: border-box; */}复制代码

2.2.2 元素高度不确定

不知道元素的高度是比较常见的,有很多原因:如果宽度改变,文本回流会改变高度;文字样式改变会改变高度;文字数量改变会改变高度;一个固定比例的元素,比如图片,当重置尺寸的时候也会改变高度,等等。

方案一:绝对定位+百分比+transform

/* css */.parent {  position: relative;}.child {  position: absolute;  top: 50%;  transform: translateY(-50%);}复制代码

2.2.3 flex布局(通用)

/* css */.parent {  display: flex;  flex-direction: column;  justify-content: center;}复制代码

3. 垂直水平居中

3.1 元素有固定的宽和高

绝对定位+百分比+负margin组合

/* css */.parent {  position: relative;}.child {  width: 300px;  height: 100px;  padding: 20px;  position: absolute;  top: 50%;  left: 50%;  margin: -70px 0 0 -170px;  /* 感觉好傻,直接用下面的百分比方法也可以 */}复制代码

3.2 元素的宽和高未知

方案一:绝对定位+百分比+transform组合

/* css */.parent {  position: relative;}.child {  position: absolute;  top: 50%;  left: 50%;  transform: translate(-50%, -50%);}复制代码

3.3 flex布局(通用)

/* css */.parent {  display: flex;  justify-content: center;  align-items: center;}复制代码

3.4 grid布局(通用)

/* css */body, html {  height: 100%;  display: grid;}span { /* thing to center */  margin: auto;}复制代码

4. 参考链接

  • https://css-tricks.com/centering-css-complete-guide/
  • https://juejin.im/entry/583b954b61ff4b006b55b43d
  • http://www.cnblogs.com/chaixiaozhi/p/8490725.html

转载于:https://juejin.im/post/5af5a70df265da0ba60fdce4

你可能感兴趣的文章
Mysql设置自增长主键的初始值
查看>>
Android计时器正确应用方式解析
查看>>
获取post传输参数
查看>>
ASP生成静态页面的方法
查看>>
HDU 1325 Is It A Tree? 判断是否为一棵树
查看>>
Shell命令-文件压缩解压缩之gzip、zip
查看>>
个人总结
查看>>
uva 673 Parentheses Balance
查看>>
Bzoj 2252: [2010Beijing wc]矩阵距离 广搜
查看>>
css 禁止选中文本
查看>>
bzoj2165
查看>>
tomcat 配置首页
查看>>
算术运算表达式正则及分析
查看>>
Oracle 12c 多租户 手工创建 pdb 与 手工删除 pdb
查看>>
shell初涉
查看>>
[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)
查看>>
ASP.NET 中设置路径的三种方式
查看>>
EBS使用 Distributed AD在多个节点并行adpatch
查看>>
windows添加和删除服务
查看>>
关于云栖,有点无语的几个地方,管理能不能管?
查看>>