纯css实现模态框动态垂直居中

纯css实现模态框动态垂直居中

一个垂直居中的思路,不止限于模态框

用bootstrap模态框时,常见的几种垂直居中方法是:

1.在打开时用js计算

$('#model').on('shown.bs.modal', function (e) {
    $(this).css('display', 'block');
    var modalHeight=$(window).height() / 2 - $('#youModel .modal-dialog').height()/ 2;
    $(this).find('.modal-dialog').css({
        'margin-top': modalHeight
    });
});

但这种有个缺陷,如果模态框里内容改变时,模态框大小也会跟着变,此时就无法垂直居中了。

2.利用translate:50%是指自身高度50%

.modal-dialog {
    position: absolute;
    top: 50%;
    left: 50%;
    z-index: 3;
    margin: auto; 
    -webkit-transform: translate(-50%, -50%) !important;
    -moz-transform: translate(-50%, -50%) !important;
    -ms-transform: translate(-50%, -50%) !important;
    -o-transform: translate(-50%, -50%) !important;
    transform: translate(-50%, -50%) !important;
}

用css实现的好处就是可以动态垂直居中,但这又出现了其他问题,如果模态框高度大于浏览器时,上部分无法显示,并且高度是奇数时,模态框中的文字会糊。

3.完美解决方案

.modal{
    text-align: center;
}
.modal:after {
    display: inline-block;
    height: 100%;
    margin-left: -0.05em;
    content: "";
    vertical-align: middle;
}
.modal-dialog {
    text-align: left;
    display: inline-block;
    vertical-align: middle;
}

我们知道vertical-align:middle;的居中是基于line-height的,但line-height:100%;

相对于字体尺寸的,这就尴尬了。。。

这方法通过在要居中的对象后面加一个高度100%的:after伪类,两者都display:inline-block;vertical-align:middle;

也就相当于要居中的对象要和一个高度100%的对象中线对齐,

:after对象因为没有宽度,所以不占用空间,从达到了垂直居中的目的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值