CSS布局技巧汇总 | 青训营

120 阅读4分钟

当谈到CSS布局技巧时,有几种常用的方法,包括浮动、定位、弹性盒子布局以及网格布局。以下是这些方法的应用场景以及示例代码。

浮动 Float

应用场景:浮动常用于创建多列布局,尤其在响应式设计中非常有用。浮动适用于多种场景,包括但不限于多列布局、响应式设计、文字环绕效果、导航菜单、图像库或图片展示。

.float-container {
  width: 100%;
}

.float-item {
  float: left;
  width: 30%;
  margin: 0 2%;
}

.float-container 定义了一个容器,设置其宽度为100%以填满父元素。.float-item 定义了内部的浮动元素,这些元素将浮动在左侧,宽度为30%,并在左右各自有2%的外边距。

.column {
    float: left;
    width: 33.33%;
}

.clearfix::after {
    content: "";
    display: table;
    clear: both;
}

实现一个页面布局,将内容分为三个等宽的列,并使用 clearfix 技巧来确保父容器正确包裹浮动元素,以避免可能的布局问题。

定位 Position

应用场景:定位可以实现精准的布局和定位效果。通过相对定位、绝对定位等属性,您可以将元素放置在页面的特定位置,从而实现各种独特的设计需求,比如创建覆盖弹出框、固定导航栏等。

  • 相对定位:使元素相对于其正常位置进行微调,可以在不影响其他元素布局的情况下进行位置调整。适用于创建微小的位置变化,如微调图标或文字的位置。
  • 绝对定位:将元素从文档流中脱离,使其相对于其最近的具有定位属性的祖先元素进行定位。这可用于创建弹出框、对话框或其他覆盖效果,使元素悬浮在页面上。
  • 固定定位:使元素相对于视口(浏览器窗口)进行定位,不受页面滚动影响。常用于创建固定的导航栏、回到顶部按钮等。
.position-container {
  position: relative;
}

.position-item {
  position: absolute;
  top: 50px;
  left: 50px;
}

.position-container 是一个相对定位的容器,这意味着它的子元素的绝对定位将以此容器作为参考点。 .position-item 是一个绝对定位的元素,它会相对于包含它的 .position-container 定位。在这个例子中,元素位于容器的左上角偏移50px。

.popup {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: 1000;
}

使用position属性以及相关属性(toprightbottomleft)来调整元素的位置,使用z-index来控制层叠顺序。

弹性盒子布局 Flex Box

应用场景:弹性盒子布局非常适用于创建复杂的自适应布局,特别是在处理项目的分布和对齐方面。弹性盒子布局非常适合用于创建导航栏、卡片式布局、列表、网格等,而无需过多的复杂嵌套和调整。

.flex-container {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.flex-item {
  flex: 1;
  margin: 0 10px;
}

.flex-container 创建一个弹性容器,将容器设置为弹性容器(display: flex);使用justify-contentalign-items等属性控制子元素的对齐和分布,将弹性项目(.flex-item)均匀分布在弹性容器的主轴上,空白间隔在项目之间;将弹性项目在交叉轴上居中对齐;.flex-item 具有 flex: 1; 属性,使其占据可用空间的比例为1,这将导致它们平均分配可用空间,元素具有10px的左右外边距。

网格布局 Grid

应用场景:网格布局是一个二维布局系统,用于创建复杂的多行多列布局,在处理网站的整体布局时具有出色的表现,可以轻松地划分页面为不同的区域,为每个区域分配行和列,从而实现多样化的设计。网格布局不仅适用于传统的网站页面,还可以用于创建应用程序界面、仪表板、图片库、产品展示等。

.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}

.grid-item {
  grid-column: span 1;
}

.grid-container 创建一个网格容器,内部的元素将被排列成网格状布局;display: grid 声明容器使用网格布局;grid-template-columns: repeat(3, 1fr) 定义了网格的列数和每列的分布,这里创建了一个由3列组成的网格,每列的宽度平均分配;gap: 10px; 设置了网格单元格之间的间隔为10px;.grid-item 指定网格项目,grid-column: span 1 表示元素将占据一个网格单元格。