水平居中布局
含义:指当前元素在父级元素容器中,水平方向是居中显示的;
1.文本/行内元素I行内块级元素:
原理: text-align只 控制行内内容(文字、行内元素、行内块级元素)如何相对他的块父元素对齐。
<!--定义父级元素--><div id="parent"><!--定义子级元素--><div id="child">水 平居中布局</div></div>
通过以下CSS样式代码实现水平居中
#parent{ text-align: center; }
优点
缺点
只对行内内容有效:属性会继承影响到后代行内内容;如果子元素宽度大于父元素宽度则无效,只有后代行内内容中宽度小于设置text-align属性的元素宽度的时候,才会水平居中;
2 单个块级元素:
原理:在margin有节余的同时如果左右margin设置了auto,将会均分剩余空间。另外,如果上下 的margin设置了auto,其计算值为0;
<!-- 定义父级元素-->实现效果图:<div id="parent" ><!--定义子级元素--><div id="child">水平居中布局</div></div>通过以下CSS样式代码实现水平居中
#son {width: 100px; /*必须定宽*/}
优点:
缺点:
必须定宽,并且值不能为auto;宽度要小于父元素,否则无效;
3.多个块级元素:
原理: text-align只 控制行内内容(文字、行内元素、行内块级元素)如何相对他的块父元素对齐。
<!--定义父级元素-->
<div id="parent">
<!--定义子级元素-->
<div id="child">水平居中布局</div>
</div>
通过以下CSS样式代码实现水平居中
parent{
text-align: center;
}
.son{
display: inline-block;
/*改为行内或者行内块级形式,以达到text-align对其生效*/
}
优点:
缺点:
只对行内内容有效;属性会继承影响到后代行内内容;块级改为inline-block换行、空格会产生元素间隔;
4 使用绝对定位实现:
原理:子绝(绝对定位)父相(相对定位),top、 right、 bottom、 left的值 是相对于父元素尺寸的,然后margin或者transform是相对于自身尺寸的,组合使用达到水平居中的目的;
<!--定义父级元素-->
<div id="parent">
<!--定义子级元素-->
<div id="child">水 平居中布局</div>
</div>
通过以下CSS样式代码实现水平居中
#parent{
position: relative; /*子相*/
}
#son{
position: absolute; /* 子绝*/
left: 50%; /* 等同于 margin-left: -50px; */
translatex(-50x);
}
优点:
使用margin-left兼容 性好;不管是块级还是行内元素都可以实现;
缺点:
代码较多;脱离文档流;使用margin-left需要知道宽度值:使用transform兼容性不好(ie9+);
5 任意个元素(flex)
原理:设置当前主轴对齐方式为居中。
<!--定义父级元素-->
<div id="parent">
<!--定义子级元素-->
<div id="child">水 平居中布局</div>
</div>
通过以下CSS样式代码实现水平居中
#parent{
display: flex;
justify-content: center;
}
优点:
缺点:
PC端兼容性不好,移动端(Android4. 0+)
垂直居中布局
含义:指当前元素在父级元素容器中,垂直方向是居中显示的;
1. 单行文本/行内元素/行内块级元素:
原理: line-height的最终表现是通过inline box实现的,而无论inline box所占据的高度是多少(无论比文字大还是比文字小),其占据的空间都是与文字内容公用水平中垂线的。
<!--定义父级元素-->
<div id="parent" >
<!--定义子级元素-->
<div id="child">水平居中布局</div>
</div>
通过以下CSS样式代码实现水平居中
#parent{
height: 150px;
/*.与height等值*/
line-height: 150px;
}
优点:
缺点:
只能用于单行行内内容;要知道高度的值;
2.图片垂直居中:
原理: vertical-align和line-height的基友关系。
<!--定义父级元素-->
<div id="parent">
<!--定义子级元素-->
<div id="child">水平居中布局</div>
</div>
通过以下CSS样式代码实现水平居中
#parent{
height: 150px;
line-height 150px;
font-size: 0;
}
/*默认是基线对齐,改为middle*/
img#child{vertical-align: middle;}
优点:
缺点:
需要添加font-size: 0;才可以完全的垂直居中;不过需要主要,html#parent包 裹img之间需要有换行或空格;
3.单个块级元素:
3-1.使用tabel-cell实现:
原理:CSS Table, 使表格内容对齐方式为middle。
<!--定义父级元素-->
<div id= "parent" >
<!--定义子级元素-->
<div id="child">水平居中布局</div>
</div>
通过以下CSS样式代码实现水平居中
#parent{
display: table-cell;
vertical-align: middle;
}
优点:
简单;宽高不定:兼容性好(ie8+)
缺点:
设置tabl-cell的元素, 宽度和高度的值设置百分比无效,需要给它的父元素设置display: table;才生效; table-cell不感知margin,在父元素上设置table-row等属性,也会使其不感知height;设置float或position会对默认布局造成破坏,可以考虑为之增加一个父div定义float等属性;内容溢出时会自动撑开父元素;
3-2.使用绝对定位实现:
原理:子绝父相,top、 right、 bottom、 left的值是相对于父元素尺寸的,然后margin或者transform是相对于自身尺寸的,组合使用达到水平居中的目的。
<!-- 定义父级元素-->
<div id="parent">
<!--定义子级元素-->
<div id="child">水平居中布局</div>
</div>
#parent(
position: relative; /*父相*/
}
#child{
position: absolute; /*子他*/
top: 50%;
/*自身高度-不,这里等月于margin-top:-25px;*/
transform: translate(-50%);
height: 50px;
}
/
#parent{ position: relative; }
#child{
position: absolute;
margin: auto;
top: 0;
bottom: 0;
height: 50px;
}
优点:
使用margin-top兼容性好;不管是块级还是行内元素都可以实现
缺点:
代码较多;脱离文档流;使用margin-top需要知道高度值:使用transform兼容性不好(ie9+ )
3.3 使用flex实现:
原理: flex设置对齐方式。
<!--定义父级元素-->
<div id="parent">
<!-- 定义子级元素-->
<div id="child">水平居中布局</div>
</div>
通过以下CSS样式代码实现水平居中
#parent{
display: flex;
align-items: center;
}
优点:
缺点:
PC端兼容性不好,移动端(Android4. 0+)
水平垂直居中布局
含义:指当前元素在父级元素容器中,水平垂直方向都是居中显示的;
1.利用table-cell実現:
原理:CSSTable,使表格内容垂直対斉方式内middle,突現垂直居中;然后根据是行内内容丕是
块级内容采取不同的方式到水平居中。
<!--定乂父級元素-->
<div id="parent" >
<!-- 定文子級元素-->
<div id="child">水 平居中布局</div>
</div>
#parent{
display: table-cell;
vertical-align: middle;
/* text-align: center; */ /*如果是行内元素就添加过 */
}
#child{
display: table;
margin: 0 auto;
/*如果是快綬元素就添加过*/
}
优点:
简单;适用于宽度高度未知情况;兼容性好(ie8+)
缺点:
vertical-align属性 具有继承性,导致父元素的文本也是居中显示的;
2.定位position实现:
原理:子绝父相,top、 right、 bottom、 left的值是相对于父元素尺寸的,然后margin或者transform是相对于自身尺寸的,组合使用达到几何上的水平垂直居中。
<!--定义父级元素-->
<div id="parent">
<!--定义子级元素-->
<div id="child">水 平居中布局</div>
</div>
通过以下CSS样式代码实现水平居中
#parent{position: relative;}
#child{
position: absolute;
top: 50%;
left: 50%;
/*定宽高时等同于margin-left:负自身宽度一半;margin-top:负自身高度一半;*/
transform: translate(-50%, -50%);
}
优点:
使用margin兼容性好;不管是块级还是行内元素都可以实现
缺点:
代码较多;脱离文档流;使用margin需要知道宽高;使用transform兼容性不好(ie9+) ;
3. 利用flex实现:
原理: flex设置对齐方式。
<!--定义父级元素-->
<div id= "parent">
<!--定义子级元素-->
<div id="child">水 平居中布局</div>
</div>
通过以下CSS样式代码实现水平居中
#parent{
display: flex;
justify-content: center;
align-items: center;
}
