CSS 页面布局-居中-文档流

456 阅读5分钟

网页中,元素有三种布局类型

  1. 流动模型 (Flow)
  2. 浮动模型 (Float)
  3. 层模型 (Layer)

流动(Flow)是默认的网页布局模式。也就是说网页在默认状态下的 HTML 网页元素都是根据流动模型来分布网页内容的。

流动模型

  • 块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度都为100%。实际上,块状元素都会以行的形式占据位置。
  • 在流动模型下,内联元素都会在所处的包含元素内从左到右水平分布显示。(内联元素可不像块状元素这么霸道独占一行)
  • 右侧代码编辑器中内联元素标签a、span、em、strong都是内联元素。

浮动模型

  • 任何元素在默认的情况下都不是浮动的。float我们可以由此定义

层模型

position: static relative absolute fixed sticky

relative 和 absolute的联合使用

弹性盒模型flex

布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性

三、容器的属性

flex-direction flex-wrap flex-flow justify-content align-items align-content

flex-direction

  • 决定主轴的方向,也就是项目排列的方向
  • 默认为row 横向排列

flex-wrap属性

  • 怎么换行
  • nowrap 默认不换行

justify-content属性

  • 决定了项目在主轴上的对齐方式
  • flex-start 默认 左对齐

align-items属性

  • 决定了项目在交叉轴上的对齐方式
  • 默认值为stretch

image

align-content属性

  • 决定了项目在多跟轴线上的对齐方式

image

图片来自于阮一峰博客

stretch 默认值

四、项目的属性

order flex-grow flex-shrink flex-basis flex align-self

order 属性定义的是项目的排列顺序

flex-grow

  • flex-grow 定义的是项目放大的比例
  • 默认为0

image

flex-shrink属性

  • flex-shrink属性 定义的是项目的缩小比例 默认为1 空间不足的话。项目将缩小
  • 如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

flex-basis属性

  • flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小

flex属性

  • flex-grow flex-shrink flex-basis的简写 默认值为0 1 auto

flex: 1 不是 1,1,auto 如果是auto的话,那么盒子会按照内容进行放大缩小 flex: 1 === flex: 1 1 + 0% 而设计成具体数字的时候,则会按照设计的长度等比例的放大缩小

align-self

align-items 的对项目的单独设置

grid 布局

是将网页划分成网格

grid-template-columns 属性,
grid-template-rows 属性

可以使用repeat 属性 repeat(3, 100px 50px 200px)

auto-fill 关键字 每行自动填充关键字

fr 按照比例进行划分

grid-row-gap 属性,grid-column-gap 属性,grid-gap 属性

设置行间距与设置列间距

grid-template-areas
justify-items 属性,

align-items 属性, place-items

设置单元格内容的水平位置

参数设置 : start,end,center,stretch

justify-content 属性,align-content 属性,place-content 属性

start | end | center | stretch | space-around | space-between | space-evenly

grid-column-start 属性,grid-column-end 属性,grid-row-start 属性,grid-row-end 属性

设置项目在整个容器的位置

grid-row grid-colume

  • &-start &-end
grid-area
  • 设置元素位于容器的位置
  • 还可以当作grid-row-start、grid-column-start、grid-row-end、grid-column-end的合并简写形式
  • grid-area: 1 / 1 / 3 / 3

display

可以设置的是元素的内部和外部显示类型

水平居中的方法

脱离文档流元素的居中

  1. magin: auto
  2. margin: 为负值 另外设置top left为宽高的一半 已知宽高
  3. 宽高不定实现盒子的水平垂直居中

未脱离文档流元素的居中

  1. text-align: center vertical-align: center

弹性盒子方法

flex align-items: center justify-content: center

文档流

我经常可以看到什么脱离文档流。一直不太懂

Q: 脱离文档流就不占据空间了吗? A: 可以这么说。更准确地一点说,是一个元素脱离文档流(out of normal flow)之后,其他的元素在定位的时候会当做没看见它,两者位置重叠都是可以的。

Q: 脱离文档流是不是指该元素从dom树中脱离? A: 不是,用浏览器的审查元素就可以看到脱离文档流的元素(例如被float了)依然会出现在dom树里,下面的截图里也可以看到。

另外需要注意的是

脱离文档流,也就是将元素从普通的布局排版中拿走,其他盒子在定位的时候,会当做脱离文档流的元素不存在而进行定位。需要注意的是,使用float脱离文档流时,其他盒子会无视这个元素,但其他盒子内的文本依然会为这个元素让出位置,环绕在周围。而对于使用absolute positioning脱离文档流的元素,其他盒子与其他盒子内的文本都会无视它。