CSS布局总结 | 豆包MarsCode AI刷题

78 阅读4分钟

CSS布局技术能够控制网页中的元素在页面上显示的位置。根据不同的定位方法,常见的css布局技术有以下几种:

  1. 正常布局流
  2. display属性
  3. 弹性盒子
  4. 网格
  5. 浮动
  6. 定位
  7. 表格布局
  8. 多列布局

下面针对以上方法进行阐述说明。

1.正常布局流

正常布局流(normal flow)是指在不对页面进行任何布局控制时,浏览器默认的 HTML 布局方式。最直观的显示便是从左往右、从上到下依次排列,各块元素换行分隔。例子如下:

<p>I love my dog.</p>
<ul>
  <li>feed dog</li>
  <li>go to school</li>
  <li>do housework</li>
<ul>

2.display属性

display属性通过设定值来设置一个元素应如何显示。此属性允许我们更改默认的显示方式。正常流中的所有内容都有一个display的值,用作元素的默认行为方式。但是通过更改这个display的值,便可以更改元素的行为方式。常见的属性值有以下这些:

  • none:隐藏元素
  • inline:将元素以内联元素方式显示
  • block:将元素以块元素方式显示

3.弹性盒子

Flexbox 是 CSS 弹性盒子布局模块(Flexible Box Layout Module)的缩写,是 flex-grow、flex-shrink 和 flex-basis 属性的简写属性,用于创建横向或是纵向的一维页面布局,在该布局内的元素会自动横向或纵向延伸填满布局。要使用 flexbox,只需要在 flex 布局的父元素上应用display: flex ,所有直接子元素都将会按照 flex 进行布局。

4.网格

网格布局通过设立display:grid在页面上创建隐形网格,用于同时在两个维度上把元素按行和列排列整齐。网格使用grid-template-rows和grid-template-columns两个属性定义了一些行和列的数量和轨道,设立grid属性的元素的字元素会自动顺序排列进网格之中。当然,利用 grid-column和grid-row两个属性可以来指定每一个子元素应该从哪一行/列开始,并在哪一行/列结束。这就能够让子元素在多个行/列上展开。

5.浮动

在css之中设立了float属性后,设立的元素会脱离正常布局流中跟随其他元素的行为,并移动到所设立的方向边缘,被其他元素所环绕。float常见的属性值有:

  • left — 将元素浮动到左侧。
  • right — 将元素浮动到右侧。
  • none — 默认值,不浮动。
  • inherit — 继承父元素的浮动属性。

例如对一个块元素div设立了float:left且未被其他布局属性覆盖,无论该元素之前的位置在哪,都会移动到父元素的最左边,其他同横向的元素就被相应的移动到右边,就如同在水中"浮"到表面。

6.定位

定位 (position) 能够把一个元素从正常布局流的位置移动到另一个位置。虽然定位可以指定元素处于任意位置,但它并不是一种主要页面布局的方式,更像是管理和微调页面中的一个特殊项的位置。对于主要页面布局的设计,是不会大面积使用定位的;只有类似特殊要求如浮窗等才使用定位。 定位主要有五种:

  1. 静态定位static:在正常布局流中的默认位置。
  2. 相对定位relative:相对静态定位的一定偏移位置。
  3. 绝对定位absolute:脱离正常布局流,相对于页面的<html>元素边缘或者相对于该元素的最近被定位祖先元素以坐标绝对位置。
  4. 固定定位fixed:脱离正常布局流,相对浏览器视口固定的位置。
  5. 粘性定位sticky:起始和静态定位一致,当它的相对视口位置达到某一个预设值时,它就会像 position: fixed 一样定位。

7.表格布局

在Flexbox 和 Grid未出现时,过去通常使用表格布局display: table来进行对元素的布局对齐,被称为CSS表格。可以使用display: table-captiondisplay: table-rowdisplay: table-celldisplay: table-caption等属性对css表格的样式进行设置,将对应的元素放入对应的表格位置之中。

8.多列布局

为了突破正常布局流从上到下的排列顺序,可以使用多列布局对页面进行横向分栏分成不同列,其中column-count用于设立需要分的列数,column-width用于该元素所在列的列宽。