使div水平垂直居中
1. flex 布局实现 (元素已知宽度)
效果图:

内部 div 要有宽度
CSS 代码:<style>.box{width: 300px;height: 300px;background-color: #ccc;display: flex;display: -webkit-flex;justify-content: center;align-items: center;}.box .a{width: 100px;height: 100px;background-color: blue;}</style>HTML 代码:<div class="box"><div class="a"></div></div>
2. position (元素已知宽度)
父元素设置为:position: relative;
子元素设置为:position: absolute;
距上50%,据左50%,然后减去元素自身宽度的一半距离就可以实现
效果图:

CSS代码:<style>.box{width: 300px;height: 300px;background-color: red;position: relative;}.box .a{width: 100px;height: 100px;background-color: blue;position: absolute;left: 50%;top: 50%;margin: -50px 0 0 -50px;}</style>HTML 代码:<div class="box"><div class="a">love</div></div>
3. position transform (元素未知宽度)
如果元素未知宽度,只需将上面例子中的 margin: -50px 0 0 -50px;替换为:**transform: translate(-50%,-50%);**
效果图:

CSS 代码:<style>.box{width: 300px;height: 300px;background-color: red;position: relative;}.box .a{background-color: blue;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}</style>
4. position(元素已知宽度)(left,right,top,bottom为0,maigin:auto )
效果图:

CSS 代码:<style>.box{width: 300px;height: 300px;background-color: red;position: relative;}.box .a{width: 100px;height: 100px;background-color: blue;position: absolute;top: 0;bottom: 0;left: 0;right: 0;margin: auto;}</style>HTML 代码:<div class="box"><div class="a">love</div></div>
★第四种情况方案中,如果子元素不设置宽度和高度,将会铺满整个父级(应用:模态框)
效果图:

CSS 代码:<style>.box{width: 300px;height: 300px;background-color: red;position: relative;}.box .a{/* 如果不设置宽高,将铺满整个父级*/background-color: pink;position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;text-align: center;}</style>HTML:<div class="box"><div class="a">love</div></div>
5. table-cell 布局实现
table 实现垂直居中,子集元素可以是块元素,也可以不是块元素
CSS:<style>.box{width: 300px;height: 300px;background-color: red;display: table-cell;vertical-align: middle;}.box .a{margin-left: 100px;width: 100px;height: 100px;background-color: blue;}</style><div class="box"><div class="a">love</div></div>
使内容(文字,图片)水平垂直居中(table-cell 布局)
行元素 text-align :center;
块元素 :margin :0 auto;
text-align : center 给元素的父级加,可以使文本或者行级元素(例如:图片)水平居中line-height : 值为元素的高度,可以使元素的文本内容垂直居中margin: 0 auto 使用条件:父级元素宽度可有可无,子级元素必须使块元素,而且要有宽度(否则继承父级)
display:table-cell 会使元素表现的类似一个表格中的单元格td,利用这个特性可以实现文字的垂直居中效果。同时它也会破坏一些 CSS 属性,使用 table-cell 时最好不要与 float 以及 position: absolute 一起使用,设置了 table-cell 的元素对高度和宽度高度敏感,对margin值无反应,可以响 padding 的设置,表现几乎类似一个 td 元素。
小结:
不要与 float:left, position : absolute, 一起使用
可以实现大小不固定元素的垂直居中
margin 设置无效,响应 padding 设置
对高度和宽度高度敏感
不要对 display:table-cell 使用百分比设置宽度和高度
应用:
1. 使文字水平垂直居中
效果图:

CSS 代码:<style>.box{width: 300px;height: 300px;background-color: red;display: table-cell;text-align: center;/*使元素水平居中 */vertical-align: middle;/*使元素垂直居中 */}</style>HTML 代码:<div class="box">love</div>
给父级设置 display : table,子集设置 display:tablecell ,子集会充满全屏

CSS 代码:<style>.box{width: 300px;height: 300px;background-color: red;display: table;}.box .a{display: table-cell;vertical-align: middle;text-align: center;background-color: blue;}</style>HTML :<div class="box"><div class="a">love</div></div>
2. 图片水平垂直居中
效果图:

<style>.box{width: 300px;height: 300px;background-color: skyblue;display: table-cell;text-align: center;vertical-align: middle;}img{/* 设置成块元素后,text-align:center 就会失效 */width: 100px;height: 100px;}</style>HTML:<div class="box"><img src="1.jpg" alt=""></div>
中间的图片会随着外层容器的大小而自动水平垂直居中,其实原理和文字水平垂直居中一模一样
3. 元素两端垂直对齐
CSS 代码:<style>*{padding: 0;margin: 0;}.box{display: table;width: 90%;margin: 10px auto;padding: 10px;border: 1px solid green;height: 100px;}.left,.right{display: table-cell;width: 20%;border: 1px solid red;}.center{/* padding-top: 10px; */height: 100px;background-color: green;}</style>HTML:<div class="box"><div class="left"><p>我是左边</p></div><div class="center"><p>我是中间</p></div><div class="right"><p>我是右边</p></div></div>
效果:
其中 center 的顶部没有与左右两侧对齐,原因是 left 中的
有一个 margin-top , 而表格布局中默认是文字顶部对齐的,所以 center 会向下移动到首行文字基线对齐,解决办法是为 center 添加与左右两侧中 margin-top 较大者等值的 padding-top 即可。
