布局


2020-04-23 上次更新时间:4/29/2022, 9:34:08 AM 0

CSS 布局模式,有时简称为布局,是一种基于盒子与其兄弟和祖辈盒子的交互方式来确定盒子的位置和大小的算法。

CSS页面布局技术允许我们拾取网页中的元素,并且控制它们相对正常布局流、周边元素、父容器或者主视口/窗口的位置。

有关文档

MDN - CSS_layout

MDN - CSS 布局


# BFC与IFC

FC的全称是:Formatting Contexts,是W3C CSS2.1规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。

  • BFC(Block Formatting Contexts):块级格式化上下文。
  • IFC(Inline Formatting Contexts):内联格式化上下文。
  • GFC(GridLayout Formatting Contexts):网格布局格式化上下文。
  • FFC(Flex Formatting Contexts):自适应格式化上下文。

有关文章:

MDN - Block formatting context

MDN - 块格式化上下文

segmentfault - [译]:BFC与IFC

segmentfault - css布局的各种FC简单介绍:BFC,IFC,GFC,FFC

简书 - BFC,IFC,FFC,GFC的理解与纠错

# display 属性

display 默认值为: inline

displa属性可以分为几种类型:

  • <display-inside>: 元素的内部显示类型, 可以控制其子元素的布局

    • flow-root:
    • table:此元素会作为块级表格来显示(类似 <table>),表格前后带有换行符。
    • flex:
    • grid:
  • <display-outside>:元素外部显示类型,决定该元素在流式布局中的表现。

    • block:此元素将显示为块级元素,此元素前后会带有换行符。
    • inline:此元素会被显示为内联元素,元素前后没有换行符。
  • <list-item>:将元素外部显示类型变为block,并将内部显示类型变为多个list-item inline

    • list-item:此元素会作为列表显示。
  • <display-internal>:定义内部显示类型,在 display:table; 布局内有效

    • table-row-group:此元素会作为一个或多个行的分组来显示(类似 <tbody>)。
    • table-header-group:此元素会作为一个或多个行的分组来显示(类似 <thead>)。
    • table-footer-group:此元素会作为一个或多个行的分组来显示(类似 <tfoot>)。
    • table-row:此元素会作为一个表格行显示(类似 <tr>)。
    • table-cell:此元素会作为一个表格单元格显示(类似 <td><th>
    • table-column-group:此元素会作为一个或多个列的分组来显示(类似 <colgroup>)。
    • table-column:此元素会作为一个单元格列显示(类似 <col>
    • table-caption:此元素会作为一个表格标题显示(类似 <caption>
  • <display-box>:决定元素是否使用盒模型

    • contents:元素本身不生成任何框(即该元素 background、border、padding、width、height等属性无效),子元素不影响。
    • none:此元素不会被显示。
  • <display-legacy>

    • inline-block:
    • inline-table:
    • inline-flex:
    • inline-grid:

# Flex 弹性布局

Flex(Flexible Box): 弹性布局。

# 父容器

  • 设置flex容器:display:flex;
  • 设置容器属性:
    • flex-direction: row | row-reversecolumn | column-reverse; (设置容器方向)
      • row(默认值):主轴为水平方向,起点在左端。
      • row-reverse:主轴为水平方向,起点在右端。
      • column:主轴为垂直方向,起点在上沿。
      • column-reverse:主轴为垂直方向,起点在下沿。
    • flex-wrap: nowrap | wrap | wrap-reverse; (如果一条轴线排不下,如何换行)
      • nowrap(默认):不换行。
      • wrap:换行,第一行在上方。
      • wrap-reverse:换行,第一行在下方。
    • flex-flow:<flex-direction> <flex-wrap> (属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。)
    • justify-content: flex-start | flex-end | center | space-between | space-around; (定义了项目在主轴上的对齐方式)
      • flex-start(默认值):左对齐
      • flex-end:右对齐
      • center: 居中
      • space-between:两端对齐,项目之间的间隔都相等。
      • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
    • align-items: flex-start | flex-end | center | baseline | stretch; (定义项目在交叉轴上如何对齐。)
      • flex-start:交叉轴的起点对齐。
      • flex-end:交叉轴的终点对齐。
      • center:交叉轴的中点对齐。
      • baseline: 项目的第一行文字的基线对齐。
      • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
    • align-content: flex-start | flex-end | center | space-between | space-around | stretch;(定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。)
      • flex-start:与交叉轴的起点对齐。
      • flex-end:与交叉轴的终点对齐。
      • center:与交叉轴的中点对齐。
      • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
      • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
      • stretch(默认值):轴线占满整个交叉轴。

# 子容器

  • 设置容器内项目属性:
    • order: 99; (定义项目的排列顺序。数值越小,排列越靠前,默认为0。)
    • flex-grow: 2; (定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。)
    • flex-shrink: 1; (定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。)
    • flex-basis: 350px | auto; (定义了在分配多余空间之前,项目占据的主轴空间(main size))
    • flex: 0 1 auto; (flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。)
    • align-self: align-self: auto | flex-start | flex-end | center | baseline | stretch; (允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。)

《Flex 布局》

上次更新时间: 4/29/2022, 9:34:08 AM