常见块级和行内元素,及三种居中方式的对比分析

205 阅读3分钟

1、常见块级元素

image.png

2、常见行内元素

image.png

3、居中方式对比和总结

(1)行内元素

  • 水平居中:text-align:center绝对定位 + transform
  • 垂直居中:flex 布局绝对定位 + transformtable-cell + vertical-align;vertical-align(多个行内元素)
  • 水平垂直居中:flex 布局flex 布局 + margin绝对定位 + transformtext-align + line-heighttable-cell + text-align + vertical-align

(2)块级元素

  • 水平居中:marginflex 布局flex 布局 + margin绝对定位 + transform绝对定位 + margin
  • 垂直居中:flex 布局flex 布局 + margin绝对定位 + transform绝对定位 + margin
  • 水平垂直居中:flex 布局flex 布局 + margin绝对定位 + transform绝对定位 + margin

4、关于 table-cell、vertical-align、line-height 和 margin

问题1:为什么为什么 table-cell + text-align + vertical-align + inline-block 可以实现行内元素和块级元素的水平居中、垂直居中和水平垂直发居中对齐?

  • display:table-cell 会将父元素变成表格里面的 td 元素
  • diaplay:inline-block 会将子元素变成行内块元素

问题2:如何理解 vertical-align 属性?

  • vertical-algin 是用来设置行内元素垂直对齐的方式
  • 该属性定义行内元素的基线相对于该元素(设置了 vertical-algin 的元素)所在行的基线的垂直对齐方式。在表格中,这个属性会设置单元格框中的单元格内容的对齐方式。
  • 只有元素是 inline-block 和 inline 的时候,设置 vertical-algin 才会起作用
  • 我们需要更理解 vertical-align 才能使用好这个属性,以下两个博客可以帮助我们更好的理解。第一篇文章:vertical-align到底怎么用;第二篇文章:关于Vertical-Align你需要知道的事情

问题3:line-height 的应用场景?

  • 元素必须只有一行
  • 父元素中若只设置了 line-height 而没有设置 height 时,默认 height = line-height
  • 主要应用于标题中,需要设置垂直居中时。

问题4:为什么 flex 布局 + margin 可以实现行内元素和块级元素的水平居中、垂直居中和水平垂直发居中对齐?

  • margin:auto 的本质是通过获取盒子剩余空间的值,并自动计算 margin-topmargin-bottommargin-leftmargin-right的值来实现居中。
  • BFCmargin:auto 在垂直方向上无法居中的原因:margin-top = margin-bottom = 0。这里也从另一方面说明了一点: margin:auto行内元素中无用,因为行内元素无法设置宽度,宽度都是由内部更不要说给让 margin 自动计算剩余的空间值。还有一个,如果元素脱离文档流,也无法使用 margin,原因一样。
image.png
  • FFC/GFCmargin:auto 在垂直方向上无法居中的原因:在通过 justify-content 和 align-self 进行对齐之前,任何正处于空闲的空间都会分配到该维度中的自动 margin 中去。另外,FFC(flex formatting context)批的是 Flex 格式化上下文;GFC(grid formatting context)指的是 Grid 格式化上下文
image.png