# 布局

# 普通流

inline(行内元素)

display: inline;

使元素变成行内元素,与其他行内元素共享一行,不会独占一行。

  • width: 不能更改元素的 width 的值,大小由内容撑开。
  • height: 不能更改元素的 height 的值,大小由内容撑开。
  • padding: 可以使用 padding,上下左右都有效.
  • margin: 只有 left 和 right 产生边距效果,但是 top 和 bottom 就不行.

block(块级元素)

display: block;

使元素变成块级元素,独占一行,块级元素会默认填满父级元素的宽度.

  • width: 能够改变元素的 height,width 的值
  • padding: 可以设置 padding,margin 的各个属性值.

inline-block(行内块元素)

display: inline-block;

使元素变成行内元素,与其他行内元素共享一行,不会独占一行.

  • width: 能够改变元素的 height,width 的值.
  • padding: 可以设置 padding,margin 的各个属性值.

# 浮动布局

float(浮动布局)

float: none | left | right;
/* none 默认值,元素不浮动 */

设置元素的 float 属性后,该元素脱离标准文档流。 浮动的盒子会紧贴在一起,超出父元素的盒子会在下一行显示,此时元素具有和行内块元素相似的特点

注意:浮动的盒子只会影响浮动盒子后面的标准流,对之前的标准流不会影响

# 弹性布局

flex(弹性布局)

.container {
  display: flex;
  /* 任何一个容器都可以指定为flex布局 */
}

注意设置为 flex 布局之后,子元素的 float、clear、vertical-align 属性将失效

flex-direction: row | row-reverse | column | column-reverse;
/* 定义项目的排列方向: (默认)按行分布 | 按行颠倒 | 按列分布 | 按列颠倒 */
flex-wrap: nowrap | wrap | wrap-reverse;
/* 定义项目的换行方式:(默认)不换行 | 换行 | 换行后的项目在上 */
justify-content: flex-start | flex-end | center | space-around| space-between;
/* 定义项目在主轴的对齐方式:对齐起点 | 对齐终点 | 居中 | 两端对齐 | 两端贴边对齐 */
align-items: flex-start | flex-end | center | baseline | stretch;
/* (单行时) */
/* 定义每个项目在侧轴的对齐方式:对齐起点 | 对齐终点 | 居中 | 第一行文字基线对齐 | 默认值拉满 */
align-content: flex-start | flex-end | center | space-around | space-between | stretch;
/* (多行时) */
/* 定义主轴们在侧轴的对齐方式:对齐起点|对齐终点|居中|两端对齐|两端贴边对齐|默认值拉满| */
.item {
  /* 简写 */
  flex: auto | initial | none;
  /* 关键字 */
  flex: <number>;
  /* 一个数字 代表 flex-grow */
  flex: <length> | <percentage>;
  /* 一个长度 代表 flex-basis */
  flex: <number> <number> <length>;
  /* flex-grow flex-shrink flex-basis */
  order: <int>;
  /* 定义项目的排列顺序 数值越小,排列越靠前 */
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
  /* 改属性允许单个项目有与其他项目不一样的对齐方式:可覆盖align-items属性 */
}

# 网格布局

grid(栅格布局)

.container {
  display: grid;
}

指定一个容器采用网格布局

grid-template-columns: <num>px <num>fr atuo;
grid-template-rows: <num>px <num>fr atuo;
/* 指定大小,指定占剩余未指定空间的份额,指定区间,浏览器自动分配; */
grid-template-columns: [c1] 100px [c2] 100px [c3] auto [c4];
grid-template-rows: [r1] 100px [r2] 100px [r3] auto [r4];
/* 可以以在两个网格之间插入方括号来指定网格线的名字 */
grid-row-gap: 20px;
/* 设置行间距 */
grid-column-gap: 20px;
/* 设置列间距 */
grid-gap: <grid-row-gap> <grid-column-gap>;
/* row-gap和olumn-gap的简写 */

# 表格布局

table(表格布局)

displa: table;

基本只在制作表格的时候使用

# 定位属性

position: static;
/* 默认值,没有定位,元素出现在正常的文档流中 */
position: absolute;
/* 生成绝对定位的元素,相对于第一个父元素进行定位,元素脱离文档流 */
position: relative;
/* 生成相对定位的元素,相对于其正常位置进行位移,元素仍在文档流中 */
position: fixed;
/* 生成绝对定位的元素,相对于浏览器窗口进行定位,常用于导航栏常驻; */
position: sticky;
/* 相当于static + fixed,可随文档一起滚动,但不会被卷动到视口之外 */

# 居中相关问题

# 水平居中

块级元素水平居中

margin: 0 auto;







 
 



.container {
  height: 100px;
  border: 1px solid #2c73ff;
}
.item {
  height: 100px;
  width: 200px; 
  margin: 0 auto; 
  background-color: #3eaf7c;
}

行内元素或行内块元素的水平居中

text-align




 





.container {
  height: 100px;
  border: 1px solid #2c73ff;
  text-align: center;
}
.item {
  color: #3eaf7c;
}

任意元素水平居中

flex




 
 







.container {
  height: 100px;
  border: 1px solid #2c73ff;
  display: flex;
  justify-content: center;
}
.item {
  width: 200px; 
  height: 100px;
  background-color: #3eaf7c;
}

网格居中

grid

.container {
  display: grid;
  grid-template-columns: 20% 20% 20% 20% 20%;
  height: 100px;
  border: 1px solid #2c73ff;
}

.item {
  grid-column-start: 3;
  background-color: #3eaf7c;
}

# 垂直居中

行内元素垂直居中


 



 



.container {
  height: 100px;
  border: 1px solid #2c73ff;
}
.item {
  line-height: 100px;
  color: #3eaf7c;
}

# 水平垂直居中

定位居中

.container {
  height: 100px;
  border: 1px solid #2c73ff;
  position: relative;
}
.item {
  width: 50px;
  height: 50px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background-color:  #3eaf7c;
}

万能居中

flex

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  border: 1px solid #2c73ff;
}
.item {
  height: 50px;
  background-color: #3eaf7c;
}

表格居中

table

.container {
  width: 100%;
  display: table;
  height: 100px;
  border: 1px solid #2c73ff;
}
.item {
  display: table-cell;
  width: 50px;
  height: 50px;
  vertical-align: center;
  background-color: #3eaf7c;
}

网格居中