1、水平居中:

(1)行内元素

设置父元素:

text-align:center;

<head>
	<style type="text/css">
		#out{
			width:200px;
			height:100px;
			background-color:red;
			text-align:center;
		}
	</style>
</head>
<body>
	<div id="out">
		<span>CSS</span>
	</div>
</body>


(2)确定宽度的块级元素

设置子元素:

width:百分比或数值;

margin:0 auto;

注意:必须设置width,否则margin:0 auto不能实现水平居中。

<head>    
    <style type="text/css">    
        #out{       
            width: 400px;    
            height: 200px;    
            background: red;    
        }    
        #in{    
            width: 50%;    
            height: 50%;  		
            background: yellow;    
            margin:0 auto;     
        }    
    </style>    
</head>    
<body>    
    <div id="out">    
        <div id="in"></div>    
    </div>    
</body>  


(3)不确定宽度的块级元素

1)设置父元素和子元素:

设置父元素:

text-align:center;

设置子元素:

display:inline-block或inline;

<head>
	<style type="text/css">
		#out{
			width:200px;
			height:100px;
			background-color:red;
			text-align:center;
		}
		#in{
			background-color:yellow;
			display:inline-block;
		}
	</style>
</head>
<body>
	<div id="out">
		<div id="in">Hello</div>
	</div>
</body>

2)设置子元素:

display:table;

margin:0 auto;

<head>
	<style type="text/css">
		#out{
			width:200px;
			height:100px;
			background-color:red;
		}
		#in{
			background-color:yellow;
			display:table; 
			margin:0 auto;
		}
	</style>
</head>
<body>
	<div id="out">
		<div id="in">Hello</div>
	</div>
</body>


2、垂直居中

(1)行内元素

设置子元素:

line-height:父元素height;

<head>
	<style type="text/css">
		#out{
			width:200px;
			height:100px;
			background-color:red;
		}
		span{
			line-height:100px;
		}
	}
	</style>
</head>
<body>
	<div id="out">
		<span>CSS</span>
	</div>
</body>


(2)非行内元素

设置父元素:

position:relative;

设置子元素:

position:absolute;

margin-top:(父元素height-子元素height)/2;

<head>
	<style type="text/css">
		#out{
			position: relative;
			width: 200px;
			height: 100px;
			background: red;
		}
		#in{
			position: absolute;
			width: 100px;
			height: 50px;
			background: yellow;
			margin-top: 25px;
		}
	</style>
</head>
<body>
	<div id="out">
		<div id="in"></div>
	</div>
</body>


3、水平和垂直居中

(1)在浏览器窗口中水平和垂直居中

设置:

width:数值(不能是百分比);

height:数值(不能是百分比);

position:fixed;

left:50%;

top:50%;

margin-top:-height/2;

margin-left:-width/2;

<head>
	<style type="text/css">
		#out{
			position: fixed;
			width: 800px;
			height: 400px;
			background: red;
			margin: -200px 0 0 -400px;
			left: 50%;
			top:50%;
		}
	}
	</style>
</head>
<body>
	<div id="out"></div>
</body>

(2)子元素在父元素中水平和垂直居中

1)利用 flex 布局,实际使用时应考虑兼容性。

父元素:

display: flex;

align-items: center;   /*垂直居中*/

justify-content: center;  /*水平居中*/

<head>  
    <style type="text/css">  
        #out{  
            width: 400px;  
            height: 200px;  
            background: red;  
			display: flex;
			align-items: center;				/* 垂直居中 */
			justify-content: center;			/* 水平居中 */
        }  
        #in{  
            width: 200px;  
            height: 100px;  
            background: yellow;  
        }  
    </style>  
</head>  
<body>  
    <div id="out">  
        <div id="in"></div>  
    </div>  
</body>

2)未知子元素的宽高,利用transform属性。

父元素:

position:fixed;

子元素:

width:**%;

height:**%;

position:absolute或relative;

left:50%;

top:50%;

transform: translate(-50%,-50%);

<head>  
    <style type="text/css">  
        #out{  
            position: fixed;  
            width: 400px;  
            height: 200px;  
            background: red;  
        }  
        #in{  
            width: 50%;  
            height: 50%;  
            background: yellow;  
            position: absolute;  
			transform: translate(-50%,-50%);
            top: 50%;  
            left: 50%;   
        }  
    </style>  
</head>  
<body>  
    <div id="out">  
        <div id="in"></div>  
    </div>  
</body>
3)已知子元素的宽高

父元素:

position:fixed;

子元素:

width:数值;

height:数值;

padding:(可有可无);

position:absolute或relative;

left:50%;

top:50%;

margin-left:-(width+2*padding)/2;

margin-top:-(height+2*padding)/2;

<head>
	<style type="text/css">
		#out{
			position: fixed;
			width: 400px;
			height: 200px;
			background: red;
		}
		#in{
			width: 100px;
			height: 50px;
			background: yellow;
			padding: 20px;
			position: absolute;
			top: 50%;
			left: 50%;
			margin-left: -70px; /* (width + padding)/2 */
			margin-top: -45px; /* (height + padding)/2 */
		}
	</style>
</head>
<body>
	<div id="out">
		<div id="in"></div>
	</div>
</body>

本文转载:CSDN博客