一、 元素的布局特性

块级元素

  1. 独占一行(width默认为100%,height为0);
  2. 可以设置任何尺寸相关的属性(width、padding、margin和border)

行内元素
1、内容不独占一行。width height不可设置,可置换行内元素(img\input\textarea\select)则可以
2、竖直方向margin和padding不可设置水平方向可设置
3、有多个行内元素,则会排列在一行,直到父容器放不下才会换行。

水平垂直方向上的对齐方式,行内级元素分别受父元素的**text-align**属性和自身**vertical-align**属性的控制

水平方向上默认左对齐,在垂直方向上默认在行框的baseline基线上显示 vertical-align=baseline

行内块级元素:

  1. 排列方式与行内级元素同,不独占一行,在一行内按从左到右的顺序排列;
  2. 水平和垂直方向上的对齐方式与行内级元素同;
  3. 和块级元素一样,可以设置任何尺寸属性(但width默认为0);

二、水平居中

1. 行内元素

让一个父元素为块级元素的行内元素水平居中,如果被设置元素为文本、图片等行内元素时, 水平居中是通过给父元素设置text-align:center来实现的

  1. // 父元素是块级元素
  2. <div id="parent">
  3. <span id="child">我是行内元素</span>
  4. </div>
  5. #parent {
  6. height: 300px;
  7. width: 300px;
  8. text-align: center;
  9. background: skyblue;
  10. }

2. 块级元素margin

只需给需要居中的块级元素margin: 0 auto其必须有width属性

  1. <div id="parent">
  2. <div id="child">我是行内元素</div>
  3. </div>
  4. #parent {
  5. height: 300px;
  6. width: 400px;
  7. background: #fcc;
  8. }
  9. #child {
  10. height: 100px;
  11. width: 100px;
  12. background: #f66;
  13. margin: 0 auto;
  14. }

3. 绝对定位+ 负margin

  1. position:absolute;
  2. width:固定;
  3. left:50%;
  4. margin-left:-0.5宽度;

4. 绝对定位+ transform

  1. position:absolute;
  2. left:50%;
  3. transform:translate(-50%,0);

5. flex

image.png

三、垂直居中

1. 单行文本垂直居中

很常用,主要用于文字的排版,也可以用于图片元素居中

行高:内容高度 + 下距离 + 上距离,文本内容在每一行中都是居中的,利用这个原理可以实现文本垂直居中。

  1. line-height: 100px;
  2. height: 100px; // 有line-height 设置后没必要再设置height

若元素是单行文本, 则可设置 line-height 等于父元素高度

都可以参考水平垂直居中的方法

2. 绝对定位+ 负margin

  1. .parent {
  2. position: relative;
  3. }
  4. .child {
  5. position: absolute;
  6. top: 50%;
  7. height: 100px;
  8. margin-top: -50px;
  9. }

3. 绝对定位+ transform

  1. .parent {
  2. position: relative;
  3. }
  4. .child {
  5. position: absolute;
  6. top: 50%;
  7. transform: translate(0,-50%);
  8. }

4.绝对定位+margin

  1. .child{
  2. position:absolute;
  3. height:固定;
  4. top:0;
  5. bottom:0;
  6. margin:auto 0;
  7. }

5. flex布局

  1. .parent {
  2. display: flex;
  3. flex-direction: column;
  4. justify-content: center;
  5. }

水平垂直居中


1.绝对定位+负margin

  1. .parent {
  2. position: relative;
  3. }
  4. .child {
  5. width:200px;
  6. height: 200px;
  7. position: absolute;
  8. top: 50%;
  9. left: 50%;
  10. margin-left:-100px;
  11. margin-top:-100px;
  12. }

2. 绝对定位+margin:auto

  1. div{
  2. width: 200px;
  3. height: 200px;
  4. background: green;
  5. position:absolute;
  6. left:0;
  7. top: 0;
  8. bottom: 0;
  9. right: 0;
  10. margin: auto;
  11. }

3.绝对定位+transform

  1. .parent {
  2. position: relative;
  3. }
  4. .child {
  5. position: absolute;
  6. top: 50%;
  7. left: 50%;
  8. transform: translate(-50%, -50%);
  9. }

4. flex

  1. .parent {
  2. display: flex;
  3. justify-content: center;
  4. align-items: center;
  5. }

四、总结

行内元素、行内块元素、块元素,居中显示不管是垂直还是水平的时候:

  • 绝对定位+负margin(需要知道尺寸)
  • 绝对定位+margin:auto
  • 绝对定位 + transform
  • flex

行内块元素

  • 水平方向受 text-align 控制
  • 垂直方向受 vertical-align 控制