跳到主要内容

布局

三种布局

常规流,定位,浮动

  • 常规流中包括各种格式上下文
    • 行级格式上下文(IFC)容器内只有行级元素生成 IFC 会避开浮动元素 一行显示不下会换行 有 text-align verticle-align 属性
    • 块级格式上下文(BFC)

flex

flex

flex 简写 flex:1 === flex: 1 1 0 flex:100px === flex: 0 1 100px flex: 1 100px === flex: 1 1 100px flex:auto === flex:1 1 auto flex:none === flex: 0 0 auto

align-items

默认值为 stretch 有属性值 flex-start, flex-end, center, stretch, baseline 如果主轴是从左到右,align-items 自动将弹性子项延展到和容器一样高

定位

position 的取值:static(默认) relative absolute sticky

  • static 默认值,非定位元素,元素会像通常那样流入页面。顶部,底部,左,右,z-index 属性不适用。

  • relative 相对自身,!不脱离文档流,会留一个看不见元素占位

  • aboslute 相对非 static 的祖先定位,会脱离文档流;绝对定位的框可以有边距,并且不会与其他边距折叠。这些元素不影响其他元素的位置。

  • fixed 相对视口绝对定位

  • sticky 是相对定位和固定定位的混合。该元素被视为相对位置,直到它越过指定的阈值,此时它被视为固定位置

  • static(默认值):元素处于正常的文档流中,不进行任何特殊的定位。top、right、bottom、left 和 z-index 属性对其没有影响。

  • relative:相对定位。元素在正常文档流中的位置不变,但可以通过设置 top、right、bottom、left 属性来相对于其正常位置进行偏移。相对定位不会影响其他元素的布局。

  • absolute:绝对定位。元素脱离正常文档流,并相对于最近的已定位祖先元素或 body 元素进行定位。可以使用 top、right、bottom、left 属性进行定位。如果没有已定位的祖先元素,则相对于视口进行定位。

  • fixed:固定定位。元素脱离正常文档流,并相对于视口进行定位,即无论滚动条如何滚动,元素的位置都不会改变。可以使用 top、right、bottom、left 属性进行定位。

  • sticky:粘性定位。元素根据正常文档流进行定位,然后相对于离它最近的具有滚动机制的祖先元素或视口进行定位。当用户滚动页面时,元素的定位会发生变化。

display 的 block、inline 和 inline-block 的区别

  1. block:会独占一行,多个元素会另起一行,可以设置 width、height、margin 和 padding 属性;
  2. inline:元素不会独占一行,设置 width、height 属性无效。但可以设置水平方向的 margin 和 padding 属性,不能设置垂直方向的 padding 和 margin;
  3. inline-block:将对象设置为 inline 对象,但对象的内容作为 block 对象呈现,之后的内联对象会被排列在同一行内。

不要使用 inline-block

开发模式标签之间的空格(回车)会被计算,但是生产环境代码编译后空格会消失 导致布局混乱

硬要解决:父元素的 font-size 等于 0,子元素如果要显示字体,就单独设置 font-size

inline-flex

一句话来描述就是 当 Flex Box 容器没有设置宽度大小限制时,当 display 指定为 flex 时,FlexBox 的宽度会填充父容器,当 display 指定为 inline-flex 时,FlexBox 的宽度会包裹子 Item