整理一下。。。
水平居中
块级元素:给元素设置magin:0 auto;
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.block{
width: 200px;
height: 200px;
background-color: plum;
margin: 0 auto;//水平居中
}
</style>
</head>
<body>
<div class="block"></div>
</body>
</html>
行级元素:给父级元素设置text-align:center;
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.block{
width: 200px;
height: 200px;
background-color: plum;
text-align: center;//子元素水平居中
}
</style>
</head>
<body>
<div class="block">
<span>很高兴认识你</span>
</div>
</body>
</html>
输出结果:
垂直居中
块级元素
1.绝对定位+相对定位
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.block{
position: relative;
width: 200px;
height: 200px;
background-color: #f5ff9b;
}
.block_1{
width: 100px;
height: 100px;
position: absolute;
top: 50%;
background-color: palevioletred;
margin: -50px 0 0 0;
}
</style>
</head>
<body>
<div class="block">
<div class="block_1"></div>
</div>
</body>
</html>
输出结果:
注意:如果不知道被垂直居中的块级元素的大小则无法实现。
2.使用transform
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.block{
position: relative;
width: 200px;
height: 200px;
background-color: #f5ff9b;
}
.block_1{
width: 100px;
height: 100px;
position: absolute;
top: 50%;
background-color: palevioletred;
transform: translate(0,-50%);
}
</style>
</head>
<body>
<div class="block">
<div class="block_1"></div>
</div>
</body>
</html>
3.使用绝对定位和负外边距
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.block{
position: relative;
width: 200px;
height: 200px;
background-color: #f5ff9b;
}
.block_1{
width: 100px;
height: 100px;
position: absolute;
top: 50%;
background-color: palevioletred;
margin: -25% 0 0 0;
}
</style>
</head>
<body>
<div class="block">
<div class="block_1"></div>
</div>
</body>
</html>
注意:使用magin来实现垂直居中必须依赖于子元素相对于父元素的百分比,这种方法有局限性。
4.绝对定位后设置top,bottom,magin值,注意top和bottom值只要设置相等就可以。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.block{
position: relative;
width: 200px;
height: 200px;
background-color: #f5ff9b;
}
.block_1{
width: 100px;
height: 100px;
position: absolute;
top: 0;
bottom: 0;
margin: auto;
background-color: palevioletred;
}
</style>
</head>
<body>
<div class="block">
<div class="block_1"></div>
</div>
</body>
</html>
5.使用flex布局:
方式一:父元素设置display:flex;align-items: center;
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.block{
width: 200px;
height: 200px;
display: flex;
align-items: center;
background-color: #f5ff9b;
}
.block_1{
width: 100px;
height: 100px;
background-color: palevioletred;
}
</style>
</head>
<body>
<div class="block">
<div class="block_1"></div>
</div>
</body>
</html>
方式二:父元素设置display:flex,设置好之后改变主轴的方向flex-direction: column;justify-content属性定义了项目在主轴上的对 齐方式。
1.flex-direction 属性规定灵活项目的方向。
属性值
值 | 描述 |
row | 主轴为水平方向,起点在左端 |
row-reverse | 主轴为水平方向,起点在右端; |
column | 主轴为垂直方向,起点在上沿; |
column-reverse | 主轴为垂直方向,起点在下沿。 |
2.justify-content 用于设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式。
属性值
值 | 描述 |
flex-start | 默认值。项目位于容器的开头。左对齐 |
flex-end | 项目位于容器的结尾。右对齐 |
center | 项目位于容器的中心。居中 |
space-between | 两端对齐,各个项目之间的间隔均相等; |
space-around | 各个项目两侧的间隔相等。 |
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.block{
width: 200px;
height: 200px;
display: flex;
flex-direction: column;
justify-content: center;
background-color: #f5ff9b;
}
.block_1{
width: 100px;
height: 100px;
background-color: palevioletred;
}
</style>
</head>
<body>
<div class="block">
<div class="block_1"></div>
</div>
</body>
</html>
行级元素
1.使用flex布局
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.block_1{
width: 100px;
height: 100px;
display: flex;
align-items: center;
background-color: palevioletred;
}
</style>
</head>
<body>
<div class="block_1">
<span>你好</span>
</div>
</body>
</html>
输出结果:
2.使用line-height
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.block{
width: 200px;
height: 200px;
line-height: 200px;
background-color: #f5ff9b;
}
</style>
</head>
<body>
<div class="block">
<span>很高兴认识你</span>
</div>
</body>
</html>
输出结果:
注意:如果line-height取值为百分比时候的描述:基于当前字体尺寸的百分比行间距。这里的百分比并不是相对于父元素尺寸而言,而是相对于字体尺寸来讲的。
垂直居中+水平居中
行级元素:父元素设置display:table;将父元素转化为块级表格来显示
子元素设置display:table-cell;vertical-align: middle;text-align: center;将子元素作为一个表格单元格显示
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.block{
width: 200px;
height: 200px;
background-color: #f5ff9b;
display: table;
}
.block_1{
display: table-cell;
vertical-align: middle;
text-align: center;
}
</style>
</head>
<body>
<div class="block">
<span class="block_1">你好</span>
</div>
</body>
</html>
注意:vertical-align属性只对拥有valign特性的html元素起作用,例如表格元素中的<td><th>等等,像<div><span>这样的元素是不能使用的。
块级元素:
一、使用弹性盒
align-items 属性定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式。
属性值
值 | 描述 |
stretch | 默认值。元素被拉伸以适应容器。 如果指定侧轴大小的属性值为'auto',则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照'min/max-width/height'属性的限制。 |
center | 元素位于容器的中心。 弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。 |
flex-start | 元素位于容器的开头。 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。 |
flex-end | 元素位于容器的结尾。 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。 |
baseline | 元素位于容器的基线上。 如弹性盒子元素的行内轴与侧轴为同一条,则该值与'flex-start'等效。其它情况下,该值将参与基线对齐。 |
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.block{
display: flex;
justify-content: center;
align-items: center;
width: 200px;
height: 200px;
background-color: #f5ff9b;
}
.block_1{
width: 100px;
height: 100px;
background-color: palevioletred;
}
</style>
</head>
<body>
<div class="block">
<div class="block_1"></div>
</div>
</body>
</html>
输出结果:
二、利用定位
父元素相对定位,子元素绝对定位
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.block{
position: relative;
width: 200px;
height: 200px;
background-color: #f5ff9b;
}
.block_1{
width: 100px;
height: 100px;
position: absolute;
top: 50%;
left: 50%;
background-color: palevioletred;
transform:translate(-50%,-50%);
}
</style>
</head>
<body>
<div class="block">
<div class="block_1"></div>
</div>
</body>
</html>