博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSS水平垂直居中总结
阅读量:5248 次
发布时间:2019-06-14

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

web开发网页布局中常常会碰到各种居中,由于浏览器渲染方式的不同,因此存在很多不同的场景,本文将个人平时遇到的一些场景一一列举,以备不时之需。示例代码地址:

1.垂直居中

前提:假定父元素是盒子模型且高度已经设定。

场景一:子元素是行内元素,高度由其内容撑开

这种情况下,需要通过设定父元素的line-height为其高度来使子元素垂直居中

html代码:

11111

css代码:

.wrap{
width:200px ; height: 200px; border: 2px solid #ccc; box-sizing: border-box; }.span{
background: red; }.line-height{
line-height: 200px; }

效果:

场景二:子元素是块级元素且高度已经设定。

方法1:

计算子元素的margin-top货margin-bottom,计算方法为(父元素高度-子元素高度)/2

html代码:

111111

css代码:

.wrap{
width:200px ; height: 200px; border: 2px solid #ccc; box-sizing: border-box; }.div1{
width:100px ; height: 100px; box-sizing: border-box; background: darkblue; } .margin{
margin-top: 50px; }

效果图:

方法2:计算父元素的padding-top或padding-bottom,计算方法为(父元素高度-子元素高度)/2

html代码:

111111

css代码:

.wrap{
width:200px ; height: 200px; border: 2px solid #ccc; box-sizing: border-box; }.div1{
width:100px ; height: 100px; box-sizing: border-box; background: blue; } .padding{
padding-top: 50px; }

效果图同上。

方法3:利用绝对定位,让子元素相对于父元素绝对定位

html代码:

111111

css代码:

.relative{
position: relative; } .absolute{
position: absolute; top:50%; margin-top: -50px; }.div1{
width:100px ; height: 100px; box-sizing: border-box; background: blue; }.wrap{
width:200px ; height: 200px; border: 2px solid #ccc; box-sizing: border-box; }

效果图同上

方法4:使用flexbox

flex-direction:设置或检索伸缩盒对象的子元素在父容器中的位置。

取值:row:默认值,横向从左至右排列(左对齐)。

           row-reverse:相对于row,反转横向排列。

           column:纵向排列。

           column-reverse:相对于column,反转纵向排列,最后一项在最上面。

flex生效需定义其父元素display为flex或者inline-flex。

justify-content:设置货检索弹性盒子元素在主轴(横轴)方向上的对齐方式。

html代码:

111111

css代码:

.flex{
display: flex; flex-direction: column; justify-content: center; }

以上css代码请自行加上-moz-,-webkit-。

场景三:子元素是块级元素且高度没有设定。

方法一:给父元素设定display:table-cell;vertical-align:middle。

方法二:使用flexbox,同场景二方法4。

2.水平居中

前提:父元素必须是块级盒子容器,父元素宽度已经设定好。

场景一:子元素是块级元素且宽度没有设定。

该情况下,实际上不存在水平居中一说,因为子元素会充满整个父级元素的宽度。

场景二:子元素是行内元素,子元素宽度由其内容撑开。

该情况下,给父元素设定text-align:center即可。

场景三:子元素是块级元素,且宽度已经设定。

方法一:

给子元素加上margin:0 auto;

html代码:

non-child

css代码:

.child{
width: 100px; height: 100px; background: green; box-sizing: border-box; } .auto{
margin:0 auto; }.wrap{
width:200px ; height: 200px; border: 2px solid #ccc; box-sizing: border-box; }

效果图:

方法二:通过计算父元素的padding-left或padding-right,计算方法(父元素宽度-子元素宽度)/2

html代码:

non-child

css代码:

.padding{
padding-left: 50px; }

方法三:通过计算子元素的margin-left或margin-rigth,计算方法同方法三。

方法四:通过子元素相对父元素绝对定位。

html代码:

non-child

css代码:

.relative1{
width: 300px; height: 200px; border: 2px solid #ccc; box-sizing: border-box; position: relative; } .absolute1{
position: absolute; left:50%; margin-left:-50px; }

效果图同上,这里还要设定子元素margin-left为-50px(子元素宽度/2)是需要消除父元素50%造成的偏移。

方法五:使用flexbox

html代码:

non-child

css代码:

.flex1{
width: 300px; height: 200px; border: 2px solid #ccc; box-sizing: border-box; display:flex; flex-direction: row; justify-content:center; }

效果同上。

转载于:https://www.cnblogs.com/sunjl/p/4398862.html

你可能感兴趣的文章
电子眼抓拍大解密
查看>>
poj 1331 Multiply
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
P1107 最大整数
查看>>
多进程与多线程的区别
查看>>
Ubuntu(虚拟机)下安装Qt5.5.1
查看>>
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
查看>>
java 常用命令
查看>>
CodeForces Round #545 Div.2
查看>>
卷积中的参数
查看>>
51nod1076 (边双连通)
查看>>
Item 9: Avoid Conversion Operators in Your APIs(Effective C#)
查看>>
深入浅出JavaScript(2)—ECMAScript
查看>>
STEP2——《数据分析:企业的贤内助》重点摘要笔记(六)——数据描述
查看>>
ViewPager的onPageChangeListener里面的一些方法参数:
查看>>
Jenkins关闭、重启,Jenkins服务的启动、停止方法。
查看>>
CF E2 - Array and Segments (Hard version) (线段树)
查看>>
Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
查看>>
SIGPIPE并产生一个信号处理
查看>>