css 水平垂直居中方式

html 结构如下:

<div class="box">
    <div class="item">一些内容空间</div>
</div>

方式:

1.absolute 50%定位 + 负值 margin

先利用绝对定位将子元素定位到左边和上边都为 50% ,但是这时候是子元素的 左边界 和 上边界 分别距离父级 左边界和上边界的 中间位置,子元素的宽高实际上在中心位置的右下边,为了居中,使用 margin-left 和 margin-top 各为负数的子元素的一半尺寸即可。该方式必须显式定义子元素的 width height :

.box{
    position:relative;
    width:800px;
    height:800px;
    border:2px solid #c00;
}
.item{
    position:absolute;
    left:50%;
    top:50%;
    margin-left:-100px;
    margin-top:-100px;
    width:200px;
    height:200px;
    background-color: #c00;
}

2.利用 absolute 定位设为0 + margin auto

该方式必须显式定义子元素的 width height :

.box{
    position:relative;
    width:800px;
    height:800px;
    border:2px solid #c00;
}
.item{
    position:absolute;
    left:0;
    top:0;
    right:0;
    bottom:0;
    margin:auto;
    width:200px;
    height:200px;
    background-color: #c00;
}

3.absolute + calc()

思想方法同第一种方式相似,只不过这里是利用 calc 直接将目标位置计算出来,而不是先定位再偏移。该方式必须显式定义子元素的 width height :

.box{
    position:relative;
    width:800px;
    height:800px;
    border:2px solid #c00;
}
.item{
    position:absolute;
    left:calc(50% - 100px);
    top:calc(50% - 100px);
    width:200px;
    height:200px;
    background-color: #c00;
}

4.absolute + transform

思想同第一种方式,先定位到中间位置,再利用 transform 偏移回去子元素一半的尺寸。该方式不必显式定义子元素的 width height ,即可以不用知道子元素的宽高:

.box{
    position:relative;
    width:800px;
    height:800px;
    border:2px solid #c00;
}
.item{
    position:absolute;
    left:50%;
    top:50%;
    transform:translate(-50%,-50%);
    background-color: #c00;
}

5.table 方式 table-cell+ text-align + vertical-align + 子元素 display:inline-block 或 inline

css 新增的 table 属性,可以将普通元素变为 table 元素的显示效果,可以通过这种方式实现垂直居中。可以不用知道子元素的尺寸大小:

.box{
    position:relative;
    width:800px;
    height:800px;
    border:2px solid #c00;
    display:table-cell;
    text-align: center;
    vertical-align: middle;
}
.item{
    display: inline-block;
    text-align: left; /* 校正文字左对齐 */
    background-color: #c00;
}

6.display:line-height + inline-block 方式

这种方式里面需要将父元素的 line-height = height ,并且 text-align:center。子元素 display:inline-block,vertical-align:middle。这种方式可以不用知道子元素的尺寸大小:

.box{
    width:800px;
    height:800px;
    border:2px solid #c00;
    text-align: center;
    line-height:800px;
}
.item{
    display:inline-block;
    vertical-align: middle;
    background-color: #c00;
    line-height: initial;
    text-align:left;/* 修复文本左对齐 */
}

7.如果是需要 item 内部的文本元素垂直居中,可以使用 line-height = height + text-align:center

.item{
    line-height:100px;
    height:100px;
    text-align:center;
    background-color: #c00;
}

 

8.flex方式

flex 方式一:

利用父级的 justify-content 和 align-items 实现垂直居中布局。可以不必知道子元素尺寸:

.box{
    width:800px;
    height:800px;
    border:2px solid #c00;
    display:flex;
    justify-content: center;
    align-items: center;
}
.item{
    background-color: #c00;
}

flex 方式二:

利用父级的 display:flex 和 自己的 margin:auto 实现垂直居中。可以不必知道子元素尺寸:

.box{
    width:800px;
    height:800px;
    border:2px solid #c00;
    display:flex;
}
.item{
    margin:auto;
    background-color: #c00;
}

9.grid 方式:

grid 方式一:

利用父级的 justify-content 和 align-items 实现垂直居中布局。可以不必知道子元素尺寸:

.box{
    width:800px;
    height:800px;
    border:2px solid #c00;
    display:grid;
    justify-content: center;
    align-items: center;
}
.item{
    background-color: #c00;
}

grid 方式二:

利用父级的 display:grid 和 自己的 margin:auto 实现垂直居中。可以不必知道子元素尺寸:

.box{
    width:800px;
    height:800px;
    border:2px solid #c00;
    display:grid;
}
.item{
    margin:auto;
    background-color: #c00;
}

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值