1. 程式人生 > 其它 >前端面試題之水平垂直居中

前端面試題之水平垂直居中

技術標籤:面試題前端開發面試題筆記htmlcss前端面試經驗分享

(1)水平居中:

  • 元素為行內元素,設定父元素text-align:center
  • 如果元素寬度固定,可以設定左右margin為auto
  • 如果元素為絕對定位(或相對定位),可以設定父元素position為relative,寬度固定時設定left:0;right:0;margin:auto
  • 如果元素為絕對定位(或相對定位),可以設定父元素position為relative,寬度固定時設定left:50%,margin-left值為寬度一半的負值
  • 使用flex佈局,設定父元素display:flex;同時設定justify-content: center;
  • 使用老版flex佈局,設定父元素display: -webkit-box;同時設定-webkit-box-pack: center;

(2)垂直居中:

  • 文字垂直居中,設定父元素line-heightheight
  • 如果元素為絕對定位(或相對定位),可以設定父元素position為relative,高度固定時設定top:0;bottom:0;margin:auto
  • 如果元素為絕對定位(或相對定位),可以設定父元素position為relative,高度固定時設定top:50%,margin-top值為高度一半的負值
  • 使用flex佈局,設定父元素display:flex;同時設定align-items: center;
  • 使用老版flex佈局,設定父元素display: -webkit-box;同時設定-webkit-box-align: center;
  • 將顯示方式設定為表格,設定父元素display: table-cell;同時設定vertical-align: middle;

水平垂直居中想必大家已經司空見慣、見怪不怪了,那假如是父子元素在不知道寬高的情況下實現水平垂直居中呢?

一、子元素是塊級元素

方法1、flex佈局

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			.father {
				width: 500px;      /*此處未知,方面展示所以假設了寬高*/
				height: 300px;     /*此處未知,方面展示所以假設了寬高*/
				background-color: yellow;
				display: flex;
				justify-content: center;  /*垂直居中*/
				align-items: center;      /*水平居中*/
			}
			.child {
				width: 200px;      /*此處未知,方面展示所以假設了寬高*/
				height: 100px;     /*此處未知,方面展示所以假設了寬高*/
				background-color: blue;
			}
		</style>
	</head>
	<body>
		<div class="father">
			<div class="child"></div>
		</div>
	</body>
</html>

方法2、absolute+CSS3的translate

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			.father {
				width: 500px;
				height: 300px;
				background-color: yellow;
				position: relative;
			}
			.child {
				position: absolute;
				top: 50%;
				left: 50%;
				transform: translate(-50%, -50%);
				width: 200px;
				height: 100px;
				background-color: blue;
			}
		</style>
	</head>
	<body>
		<div class="father">
			<div class="child"></div>
		</div>
	</body>
</html>

二、子元素是行內元素

水平居中:

  • 首先看它的父元素是不是塊級元素,如果是,則直接給父元素設定text-align: center;
  • 如果不是,則先將其父元素設定為塊級元素,再給父元素設定text-align: center;

垂直居中:

  • 只需要設定行內元素的"行高line-height等於盒子的高"即可,僅適用於純文字;
  • 父元素設定成table-cell表格形式,使用vertical-align: middle即可使內聯元素垂直居中;