设置子元素在一个不清楚宽高的父元素中垂直居中

通过以下几种方法,便可以实现子元素在一个不清楚宽高的父元素中水平垂直居中的效果。具体使用哪种请根据自己的需要。(推荐使用方法2-4)
方法 1. 使用定位和负边距margin可以实现
(缺陷 :这种方法可以不用知道父元素的宽高,但是必需得知道子元素的宽高才可以设置)
做法:给父元素设置relative相对定位,给子元素设置absolute绝对定位,子元素偏移值left、top为50% 以及 负的margin值,子元素负的margin数值设置为这个子元素宽高的一半。

<style type="text/css">
    *{margin: 0;padding: 0;}
    html,body{width: 100%;height: 100%;}
    .parent{
        /*父元素肯定是要有个宽高的对吧,可以是被其它元素撑开宽高,也可以自己随便设置宽高。本文示例设置为页面宽高 50%的大小。 */
        width: 50%;
        height: 50%;
        background: #ccc;
         /*给父元素相对定位relative*/
        position: relative;
    }
    .son{
    	/*子元素宽高随便设置,绝对保证你水平垂直居中*/
        width: 200px;
        height: 150px;
        background: #ab956c;
        /*子元素设置绝对定位absolute*/
        position: absolute;
        left: 50%;
        top: 50%;
        margin-left: -100px;
        margin-top: -75px;
    }
</style>
<div class="parent">
	我是父元素
	<div class="son">我是子元素</div>
</div>

效果如下图:
在这里插入图片描述
方法 2. 使用定位和 css3 的 transfrom 属性实现水平垂直。
(注意:跟方法1有些类似,但是针对方法1的缺陷做了修改)
做法:给子元素设置偏移值left、top为50%以后,再使用 transform 属性对子元素进行移动,其值translate(-50%,-50%)表示根据元素自身的大小,向x和y轴方向偏移-50%的距离。

<style type="text/css">
    *{margin: 0;padding: 0;}
    html,body{width: 100%;height: 100%;}
    .parent{
        width: 50%;
        height: 50%;
        background: #ccc;
        position: relative;
        /*给父元素相对定位relative*/
    }
    .son{
    	/*子元素宽高随便设置,绝对保证你水平垂直居中*/
        width: 200px;
        height: 150px;
        background: #ab956c;
        /*子元素设置绝对定位absolute*/
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%,-50%);
    }
</style>
<div class="parent">
	我是父元素
	<div class="son">我是子元素</div>
</div>

效果同上面的图,就不贴图了,效果可以自己复制代码尝试。
方法 3. 使用弹性盒子flexbox进行布局。
做法:只需要给父元素设置三条属性值 display: flex; justify-content: center; align-items: center; 即可,不需要考虑父元素和子元素的宽高问题。

<style type="text/css">
    *{margin: 0;padding: 0;}
    html,body{width: 100%;height: 100%;}
    .parent{
        width: 50%;
        height: 50%;
        background: #ccc;
        /*display: flex;定义父元素为 flex 布局*/
		display: flex;
		/*justify-content属性定义了其下面的子元素在主轴上(X轴)的分布方式。*/
		justify-content: center;
		/*align-items属性定义其下面的子元素在交叉轴(Y轴上)上如何分布。*/
		align-items: center;
	}
	.son{
		/*子元素宽高随便设置,绝对保证你水平垂直居中*/
		width: 200px;
		height: 150px;
		background: #ab956c;
	}
</style>
<div class="parent">
	<div class="son"></div>
</div>

方法 4. 使用定位和外边距 auto 进行布局。
做法:父元素设置 relative 相对定位,子元素 absolute 绝对定位。
同时给子元素设置在父元素中的四个位置值为0,再添加边距值为 margin: auto; 即可!
代码如下,欢迎尝试:

<style type="text/css">
    *{margin: 0;padding: 0;}
    html,body{width: 100%;height: 100%;}
    .parent{
        width: 50%;
        height: 50%;
        background: #ccc;
        position: relative;
	}
	.son{
		/*子元素宽高随便设置,绝对保证你水平垂直居中*/
		width: 200px;
		height: 150px;
        background: #ab956c;
        position: absolute;
        /*将left、right、top、bottom 四个位置的值设为0,再将外边距设置为margin: auto; */
        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
        margin: auto;
	}
</style>
<div class="parent">
	<div class="son"></div>
</div>

以上就是实现子元素在一个不清楚宽高的父元素中水平垂直居中排列的方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值