长路漫漫
初学前端,说的不对望大家指点出来。放下你的砖头。
在页面布局中我们经常遇到元素居中问题:
- 水平居中
- 垂直居中
- 水平垂直居中
水平居中
- inline/inline-block + text-align
- 概况:对子元素设置display:inline/inline-block,对父级元素设置text-align: center;
- 详解:text-align概念:
CSS属性定义行内内容(例如文字)如何相对它的块父元素对齐。text-align
并不控制块元素自己的对齐,只控制它的行内内容的对齐。
这里说明使用这种方法实现居中必须具备几点:
- 父元素是块元素
- 子元素是行内元素 常见的行内元素方法:display:inline/ inline-block
![](https://img.haomeiwen.com/i1870667/4f1ff7ed0cd8cc94.png)
![](https://img.haomeiwen.com/i1870667/dad5c6395012a553.png)
- 绝对定位
- 已知元素的宽度和高度
当我们已知子元素的宽度以及高度的时候就可以使用负margin方法将元素居中;
说明:这里使用父级元素position: relative
子元素position:absolute
;
原因是我们要使用绝对定位;使子元素的left值为父元素的50%;即left:50%
这样结果子元素的左侧就在父元素的距离50%的位置;
![](https://img.haomeiwen.com/i1870667/3e06e48b1fc655fe.png)
这样其实并不是我们想要的效果,我们需要子元素整体居中,这时候就需要使用margin将元素放置到正确的位置;我们将子元素的margin设为
-width/2
;成了!![](https://img.haomeiwen.com/i1870667/b5415f86849e8bc1.png)
![](https://img.haomeiwen.com/i1870667/ce1511f6a52dca51.png)
- 未知子元素的宽高;
原理都是一样的,只不过这一次我们不知道元素的宽度以及高度;那么就不能使用负margin;这时候css3一个方法:transform:translate()
就可以排上用场;
首先了解一下概念:
- CSS transform 属性允许你修改CSS视觉格式模型的坐标空间。使用它,元素可以被转换(translate)、旋转(rotate)、缩放(scale)、倾斜(skew).
- CSS transform 属性 , 只对 block 级元素生效!
- 这里我们使用
translateX()
指定元素向X方向平移;
那么这不就和负margin一个道理么,搞起!
![](https://img.haomeiwen.com/i1870667/e344ad321499e5d6.png)
![](https://img.haomeiwen.com/i1870667/c2b20420dbd478fe.png)
- table-cell
将元素设置为display:table-cell
mdn上是这样介绍table-cell的;
![](https://img.haomeiwen.com/i1870667/5aa387a9e5d4919a.png)
这是什么意思;赶紧看看td的文档;这里我发现
td
可以使用 text-align;vertical-align 属性;赶紧试试!
![](https://img.haomeiwen.com/i1870667/8c00005250c1b77d.png)
![](https://img.haomeiwen.com/i1870667/0ed5f40dc3283875.png)
- flexbox
先放上资源:
![](https://img.haomeiwen.com/i1870667/4209085feca3b60d.png)
![](https://img.haomeiwen.com/i1870667/2a69f0f94361a998.png)
- grid 布局
笔者还没看过文档;看了之后这段补上,献上兼容性;
![](https://img.haomeiwen.com/i1870667/c2e31d2a80654147.png)
暂时就能想到这几种方法;肯定还有别的方法。欢迎大家补充;-_-
下面的内容就从简了,基本原理都一样;
垂直居中
- vertical-align :middle
注意必须在父元素中指定line-height
否则vertical-align不起作用;
![](https://img.haomeiwen.com/i1870667/61571e2700ac9607.png)
![](https://img.haomeiwen.com/i1870667/b305a7d87bccb0ec.png)
- 固定宽高垂直居中
![](https://img.haomeiwen.com/i1870667/ed001dfeef449496.png)
![](https://img.haomeiwen.com/i1870667/bf0d29f2a7658dfc.png)
- 未知宽高 transform
![](https://img.haomeiwen.com/i1870667/b55dbaa9cb5f5da0.png)
![](https://img.haomeiwen.com/i1870667/00ba8253acb2b50f.png)
- table-cell
![](https://img.haomeiwen.com/i1870667/be0ca8a25a9b9307.png)
![](https://img.haomeiwen.com/i1870667/06cfe31b3aa10662.png)
- flex
![](https://img.haomeiwen.com/i1870667/192b7fd621323e39.png)
![](https://img.haomeiwen.com/i1870667/bbc1e08f1faa43cf.png)
水平垂直居中
- table-cell + text-align + vertical-align
父级元素table-cell - block + 负margin / transform
- 定宽定高元素 负margin
![](https://img.haomeiwen.com/i1870667/9a2bee2193dc5489.png)
![](https://img.haomeiwen.com/i1870667/8ac16b95edbfb3d8.png)
- 未知宽高 transform
通过使用css3属性对元素进行变换
![](https://img.haomeiwen.com/i1870667/5b4f010cd4613549.png)
![](https://img.haomeiwen.com/i1870667/5250e5e38dbcfed6.png)
- flex
使用flexbox对元素进行居中
![](https://img.haomeiwen.com/i1870667/b46947048e7a6830.png)
![](https://img.haomeiwen.com/i1870667/d0d471387bd0b6e4.png)
网友评论