Skip to content

CSS

水平垂直布局

水平居中

  • 行内元素 text-align: center;
  • 块级元素 margin: 0 auto;
  • absolute + transform;
  • display: flex; justify-content: center;

垂直居中

  • line-height: var(h);
  • absolute + transform;
  • display: flex; align-items: center;
  • table / grid;

水平垂直居中

  • absolute + transform
  • display: flex; justify-content + align-items;
  • grid布局

BFC

块级上下文,是web页面可视化css渲染的一部分,是块级盒子发生布局的区域,也是浮动元素与其他元素发生交互的区域

创建BFC

  1. float 浮动
  2. 绝对定位
  3. overflow 不为 visiable
  4. display为表格布局或者弹性布局

主要作用

  1. 清除浮动
  2. 防止同一 BFC 容器中的相邻元素间的外边距重叠问题

特点

  1. BFC元素的垂直方向上会发生边距重叠。
  2. BFC元素和浮动元素不会发生重叠。
  3. BFC在计算高度时会把浮动元素计算进去。
  4. BFC在页面是个独立的容器,里外元素互不影响。

高度塌陷和边距重叠

高度塌陷

在文档流中,父元素的高度默认是被子元素撑开的,如果子元素设置了浮动,此时子元素脱离了文档流,导致父元素无法被撑开,父元素高度就会变为0

解决方案

  1. 推荐做法:给父元素添加伪类,在伪类中清除浮动

    js
    .container::after {
    overflow: hidden;
    content: '';
    clear: both;
    display: block;
    height: 0;
    visibility: hidden;
    }
  2. 给父元素设置高度。缺点是不灵活

  3. 父元素触发BFC。缺点是带来其他副作用

  4. 父元素尾部添加子元素并设置clear: both。缺点是添加了空标签,无实际语义。

边距重叠

如果两个盒子都设置了外边距,在垂直方向上的外边距可能会产生重叠,合并为一个外边距。大小是两个外边距的最大值,有负边距的减去负值,外边距相等的,则取该值。这种现象就叫外边距重叠。

外边距重叠有这几种情况:

  1. 相邻同级元素:上下两个块级元素,同时设置外边距,垂直方向的外边距会取最大值重叠;
  2. 嵌套父级元素:父元素设置外边距,未设置边框、内边距、高度、内容、设置BFC或者清除浮动时,子元素外边距会和父元素外边距取最大值重叠;