元素的水平及垂直居中实现方法二三

更多文章可关注我的个人博客:https://seven777777.github.io/myblog/

最近面试被问到这个问题,其实平时在开发的时候都会习惯性的用一种方法,能实现就行。
虽然问题很基础,但是在面试的时候遇到这种问题,估计就是在考你基础知识掌握的全面性了,因此做一个整理,把能实现的方法都列一遍,也是对自己的css知识做一个复习

一、水平居中

水平居中相对是开发中最常用的,也是相对比较容易实现的一种布局方式了

1.行内元素

对父元素添加如下样式,便可实现内部行内元素的水平居中

div{
	text-align:center;
}

2.块级元素

####宽度固定
定宽的元素实现水平居中应该是最常遇到也是最简单的了

  • 对要实现水平居中的div添加样式 margin:0 auto;
  • 使用绝对定位
    让元素距离左边50%,再设置一个向左的margin,设置它的值为负的width/2
div{
	width:100px;
	position:absoult;
	left:50%;
	margin-left:-50px;
}

####不定宽

  • 结合绝对定位和transform的translate属性

html:

<div class="A">
	<div class="B">
		这里是测试文字<br>
		这里是测试文字这里是测试文字这里是测试文字 这里是测试文字<br>
		这里是测试文字这里是测试文字<br>
		这里是测试文字<br>
		这里是测试文字 这里是测试文字 这里是测试文字 这里是测试文字 这里是测试文字<br>
	</div>
</div>

css:

.A{
	width: 100%;
	height: 800px;
	background: green;

	position: relative;
}
.B{
	background: #e3e3e3;
	position: absolute;
	left: 50%;
	transform: translateX(-50%);/*会向左位移自身宽度的一半*/
}

####div内部多个块级元素水平居中

  • 使用display:inline-block;
  • IE6、7不兼容inline-block,解决办法:*zoom:1;*display:inline;

html:

<ul class="demo">
	<li></li>
	<li></li>
	<li></li>
</ul>

css:

.demo{
	background: blue;
	text-align: center; /*父元素设置居中属性*/
	font-size: 0;/* 解决inline-block多出的空白像素问题  */
}
.demo li{
	width: 100px;
	height: 100px;
	margin: 0 10px;
	background: #e3e3e3;

	display: inline-block;
}

二、垂直居中

相当于水平居中来讲,垂直居中的实现就相对困难一些

1.行内元素

  • 对于文字,若只有一行,且高度固定,设置line-height的值等于元素height的值
p{
	height:30px;
	line-height:30px;
	
	font-size:12px;
}

2.块级元素

####使用绝对定位

  • 高度固定
    让元素距离顶部50%,再设置一个向上的margin,设置它的值为负的height/2(运算部分也可以使用css的calc函数)
div{
	width:100px;
	height:100px;
	position:absoult;
	top:50%;
	margin-top:-50px;
}
  • 高度不固定
    高度不定时,同上述水平的方法,结合transform:translateY(-50%)
    ####基于视口单位的解决方案
    在不使用绝对定位的属性时,同样结合transform:translateY(-50%),解决方法可以是用margin的百分比值,但由于margin的百分比值是以父元素的宽度作为解析基准的,所以想让元素相对视口居中,可以使用视口相关的长度单位
div{
	width:100px;
	margin:50vh auto 0;/*1vh表示视口高度的1%,1vw表示视口宽度的1%*/
	transform:translateY(-50%);
}

三、基于Flexbox实现的水平及垂直居中

使用Flexbox是实现元素居中的最佳方案,对于于定宽高以及不定宽高的元素均适用,只需两个声明:

  • 给待居中元素父元素设置:display:flex;
  • 给元素自身设置:margin:auto;
搴芳拾梦
欢迎关注的我的个人公众号【搴芳拾梦】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值