水平垂直居中

CSS居中对齐

垂直居中

方法一:

这种方法用来实现单行垂直居中是相当的简单的,你只要保证元素内容是单行,并且其高度是固定不变的,你只要将其“line-height”设置成和“height”值一样就Ok了。不过这种方法局限性太大,只有单行文本的元素才适用,所以在多行元素中是不能使用这种方法的。

 <!DOCTYPE html>
<!--
	作者:630280136@qq.com
	时间:2018-11-14
	描述:heiht与line-height的值一样
-->
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<style type="text/css">
	   div{
	   	height: 100px;
	   	width: 100px;
	   	border: 1px solid red;
	   }
	   span{
	   	line-height: 100px;
	   };
	</style>
	<body>
		<div>
			<span>wqeqw</span>
		</div>
		
	</body>
</html>

1

优点:

适合在所有浏览器,没有足够空间时,内容不会被切掉

缺点:

仅适合应用在文本上,并且这种方法,当你文本不是单行时,效果极差,差到让你感到恶心。
这种方法对运用在小元素上是非常有用的,比如说让一个button、图片或者单行文本字段。

方法二 表格盒类型

在表格的单元格(td)中,用vertical-align属性就能让内容垂直居中,现在用这种方法把普通元素调整为表格元素,模拟出表格的效果

缺点

虽然模拟表格能带来很多便捷,但同时也受到了限制。列如调整过的元素不能用定位和浮动;
使用盒类型table-cell的时候,必须同时有个祖先元素的盒类型是table;变成表格的元素,他的默认宽度将不再占一行,因为表格的本质上时行内元素

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			.box1{
         display: table-cell;
         vertical-align: middle;
         text-align: center; 
        width: 100px;
        height: 100px;
        background: #FF0000;       
    }
		</style>
	</head>
	<body>
		<div class="box box1">
        <span>垂直居中</span>
</div>
	</body>
</html>

2

方法三 容器的上下内边距padding相同

position 元素已知宽度
父元素设置为:position: relative;
子元素设置为:position: absolute;
距上50%,据左50%,然后减去元素自身宽度的距离就可以实现

<div class="box">
        <div class="center">我要居中</div>
    </div>


    <style>
        * {
            margin: 0;
            padding: 0
        }
        
        .center {
            line-height: 100px;
            background: red;
            width: 100px;
            height: 100px;
            position: absolute;
            top: 50%;
            left: 50%;
            margin: -50px 0 0 -50px;
        }
        
        .box {
            width: 200px;
            height: 200px;
            margin: 0 auto;
            background: gray;
            position: relative;
        }
    </style>
方案四:position transform 元素未知宽度
优点

父元素的高度和宽度可以任意改变,不影响子元素垂直居中

<!DOCTYPE html>
<!--
	作者:630280136@qq.com
	时间:2018-11-16
	描述:绝对定位+父元素position非static+子元素transform
	这个和第三种方法很相似。
-->
<html>
<head>
    <meta charset="utf-8">
    <title>Test</title>
    <style>
        .outside {
            width:300px;
            height: 300px;
            margin:100px auto;
            background-color: red;
            position: relative;              // 父元素非static
        }
        .inner {
            width:500px;
            height: 30px;
            background-color: yellow;
            position: absolute;
            top:50%;
            transform: translateY(-50%);    // 相对于自身高度,向上移动50%
        }
    </style>
</head>
<body >
 <div class="outside">     
     <div class="inner">
         inner
     </div>
 </div>
</body>
</html>

3

方案五:flex布局

在伸缩容器中,子元素垂直居中,相当于侧轴的居中对齐

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<style type="text/css">
		.box{
			width: 200px;
			height: 200px;
			border: 1px solid red;
			display: flex;
			align-items: center;
		}
		.box1{
			width: 50px;
			height: 50px;
			background: #0000FF;
		}
	</style>
	<body>
		
		<div class="box">
			<div class="box1"></div>
		</div>
	</body>
</html>

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS垂直居中</title>
    <style>
       .out{
       	width: 400px;
       	height: 400px;
       	background: gray;
       	display: flex;
       	flex-direction: row;
       }
       .in{
       	background: blue;
       	width: 100px;
       	height: 100px;
        align-self: center;
        text-align: center;
    
       }
    </style>
</head>
<body>
<div class="out">
    <div class="in"></div>
</div>
</body>
</html>

在这里插入图片描述

方案六:定位(高度已知)

原理和方案四是一样的,都是父元素开启相对定位,子元素开启绝对定位。移动50%,然后在向上移动自身高度的50%。这里的50%是确切的值 -25px就是确切的 ,不能使用百分数表示

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<style type="text/css">
		.box{
			width: 200px;
			height: 200px;
			border: 1px solid red;
			position: relative;
		}
		.box1{
			width: 50px;
			height: 50px;
			background: #0000FF;
			position: absolute;
			top: 50%;
			margin-top: -25px;
		}
	</style>
	<body>
		
		<div class="box">
			<div class="box1"></div>
		</div>
	</body>
</html>

在这里插入图片描述

方案七:父元素设置行高line-hight 子元素为内联或者内联块级元素

作用环境:父元素设置line-height。
作用对象:子元素中的inline-block和inline元素。

<!DOCTYPE html>
<!-- 
作用环境:父元素设置line-height。
作用对象:子元素中的inline-block和inline元素。
-->
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<style type="text/css">
		.box1{
			width: 1000px;
			line-height: 100px;
			border: 1px solid red;
		}
		.box2{
			height: 100px;
		
			display: inline-block;
		}
	</style>
	<body>
		
		<div class="box1">
			<div class="box2">
				我是带着JS走南闯北
			</div>
		</div>
	</body>
</html>

在这里插入图片描述

方案八:通过verticle-align:middle实现CSS垂直居中。

通过vertical-align:middle实现CSS垂直居中是最常使用的方法,但是有一点需要格外注意,vertical生效的前提是元素的display:inline-block。
我可以在class="wrapper"的div里面加一个div空标签,把它的高度设为100%,宽度设置为0,再给它一个vertical-align:middle样式,同样的给class="box"的div一个vertical-align:middle样式,那么box就可以在div里面垂直居中了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS垂直居中</title>
    <style>
        .wrapper{
            width: 500px;
            height: 500px;
            background-color: red;
            
        }
        .box{
            width: 100px;
            height: 100px;
            background-color: deepskyblue;
            display: inline-block;
            vertical-align: middle;
            margin: 0 auto;
        }
        .help{
        width: 0;
        height: 100%;
        display: inline-block;
        vertical-align: middle;
        }
    </style>
</head>
<body>
<div class="wrapper">
    <div class="box"></div>
    <div class="help"></div>
</div>
</body>
</html>

在这里插入图片描述

水平居中

在这里插入图片描述

方法一 margin:0 auto;text-align:center 实现CSS水平居中
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS垂直居中</title>
    <style>
       .out{
       	width: 400px;
       	height: 400px;
       	background: gray;
       }
       .in{
       	background: blue;
       	width: 100px;
       	height: 100px;
       	margin: 0 auto;
       	text-align: center;
       }
    </style>
</head>
<body>
<div class="out">
    <div class="in">温清夜</div>
</div>
</body>
</html>

方法二 flex布局

使用flex实现水平居中的方法越来越多。
实现原理:父元素display:flex;flex-direction:column,而子元素align-self:center
这个和实现CSS垂直居中一样,只不过一个是row一个是column

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS垂直居中</title>
    <style>
       .out{
       	width: 400px;
       	height: 400px;
       	background: gray;
       	display: flex;
       	flex-direction: column;
       }
       .in{
       	background: blue;
       	width: 100px;
       	height: 100px;
        align-self: center;
        text-align: center;
    
       }
    </style>
</head>
<body>
<div class="out">
    <div class="in">温清夜</div>
</div>
</body>
</html>

方法三margin-left

对于父元素和子元素的宽度都确定的情况,通过适合这个方法来实现水平居中,使用时,子元素给剩余宽度一半margin-left(父的宽度减去子的宽度/2)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS垂直居中</title>
    <style>
       .out{
       	width: 400px;
       	height: 400px; 
       	background: gray;
       
       }
       .in{
       	background: blue;
       	width: 100px;
       	height: 100px;
       margin-left: 150px;
       }
    </style>
</head>
<body>
<div class="out">
    <div class="in">温清夜</div>
</div>
</body>
</html>

方法四 position:absolute
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS垂直居中</title>
    <style>
       .out{
       	width: 400px;
       	height: 400px; 
       	background: gray;
        position: relative;
       }
       .in{
       	background: blue;
       	width: 100px;
       	height: 100px;
         position: absolute;
         left: 150px;
         text-align:center;
       }
    </style>
</head>
<body>
<div class="out">
    <div class="in">温清夜</div>
</div>
</body>
</html>

方法五 position transform

如果元素未知宽度,利用transform在X中移动自身的50%距离

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS垂直居中</title>
    <style>
       .out{
       	width: 400px;
       	height: 400px; 
       	background: gray;
       position: relative;
       }
       .in{
       	background: blue;
        width: 100px;
       	height: 100px;
       	text-align: center;
       	position: absolute;
        left: 50%;
        transform: translateX(-50%);
       }
    </style>
</head>
<body>
<div class="out">
    <div class="in">温清夜</div>
</div>
</body>
</html>

水平垂直居中

在这里插入图片描述

方法一 position:absolute

这个最适合已知父子元素的宽高

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS垂直居中</title>
    <style>
       .out{
       	width: 400px;
       	height: 400px; 
       	background: gray;
       position: relative;
       }
       .in{
       	background: blue;
        width: 100px;
       	height: 100px;
       	text-align: center;
       	position: absolute;
        left: 150px;
        top: 150px;
        
       }
    </style>
</head>
<body>
<div class="out">
    <div class="in">温清夜</div>
</div>
</body>
</html>

方法三 postion transform
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS垂直居中</title>
    <style>
       .out{
       	width: 400px;
       	height: 400px; 
       	background: gray;
       position: relative;
       }
       .in{
       	background: blue;
        width: 100px;
       	height: 100px;
       	text-align: center;
       	position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%,-50%);
        
       }
    </style>
</head>
<body>
<div class="out">
    <div class="in">温清夜</div>
</div>
</body>
</html>

方法三 flex布局
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS垂直居中</title>
    <style>
       .out{
       	width: 400px;
       	height: 400px; 
       	background: gray;
        display: -webkit-flex;
        display: flex;
        -webkit-justify-content: center;
        -webkit-align-items:center ; 
        justify-content: center;
        align-items:center ; 
        }
       .in{
       	background: blue;
        width: 100px;
       	height: 100px;
       	text-align: center;
       }
    </style>
</head>
<body>
<div class="out">
    <div class="in">温清夜</div>
</div>
</body>
</html>

方法四 margin:auto
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS垂直居中</title>
    <style>
       .out{
       	width: 400px;
       	height: 400px; 
       	background: gray;
         position: relative;
        }
       .in{
       	background: blue;
        width: 100px;
       	height: 100px;
       	text-align: center;
       	position: absolute;
       	margin:auto; 
       	left: 0;
       	top: 0;
       	bottom: 0;
       	right: 0;
       	
       }
    </style>
</head>
<body>
<div class="out">
    <div class="in">温清夜</div>
</div>
</body>
</html>

方法五 table-cell 子元素不能是块级元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS垂直居中</title>
    <style>
       .out{
       	width: 400px;
       	height: 400px; 
       	background: gray;
        display: table-cell;
       vertical-align: middle;
       text-align: center;
        
        }
       .in{
       	background: blue;
        width: 100px;
       	height: 100px;
        display: inline-block;
          }
    </style>
</head>
<body>
<div class="out">
    <div class="in">温清夜</div>
</div>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值