CSS布局实践记录 | 豆包MarsCode AI刷题

57 阅读3分钟

本次实践记录为css布局学习过程中的笔记整理。

1. 盒子模型的细节

1.1 边框盒模型

在CSS中,有三种盒模型:inlineblockinline-block。默认情况下,我们使用的是内容盒模型,但通过box-sizing属性,我们可以改变这一行为。

inline

  • 行为inline 元素不会独占一行,而是与其他 inline 元素在同一行上显示。
  • 尺寸inline 元素的宽度和高度由内容决定,无法通过设置 width 和 height 属性来改变其尺寸。
  • 边距和填充inline 元素的 margin 和 padding 在垂直方向上不会影响其他元素的布局。
  • 示例<span><a><strong><em> 等。

block

  • 行为block 元素会独占一行,即使内容很少,也会占据整行的宽度。
  • 尺寸block 元素的宽度默认为父元素的 100%,可以通过设置 width 和 height 属性来改变其尺寸。
  • 边距和填充block 元素的 margin 和 padding 在垂直和水平方向上都会影响其他元素的布局。
  • 示例<div><p><h1><h2> 等。

inline-block

  • 行为inline-block 元素既有 inline 元素的特性,也有 block 元素的特性。它不会独占一行,但可以设置宽度和高度。
  • 尺寸inline-block 元素的宽度和高度可以通过设置 width 和 height 属性来改变。
  • 边距和填充inline-block 元素的 margin 和 padding 在垂直和水平方向上都会影响其他元素的布局。

2. 浮动布局的细节

2.1 BFC(块级格式化上下文)

在浮动布局中,BFC的概念经常被忽视。BFC可以解决很多布局问题,比如清除浮动

CSS:

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

通过在父元素上添加clearfix类,我们可以确保父元素包含其浮动的子元素,避免布局错乱。

3. Flexbox布局的细节

3.1 Flex项目对齐

Flexbox提供了强大的对齐选项,但这些选项有时会被忽视。

CSS:

css
.flex-container {
  display: flex;
  align-items: center; /* 垂直居中 */
  justify-content: space-around; /* 项目之间平均分布空间 */
}

3.2 Flex项目顺序

Flexbox允许我们改变项目的顺序,而不需要改变HTML结构。

CSS:

.order-1 {
  order: 1;
}
.order-2 {
  order: 2;
}

4. CSS Grid布局的细节

4.1 网格线命名

CSS Grid允许我们命名网格线,这在复杂的布局中非常有用。

CSS:

.grid-container {
  display: grid;
  grid-template-columns: [start] 1fr [middle] 1fr [end];
}

HTML:

<div class="grid-item" style="grid-column: start / end;">项目1</div>

通过命名网格线,我们可以更清晰地控制网格项的位置。

4.2 网格区域

CSS Grid还允许我们定义网格区域,这可以简化复杂的布局。

CSS:

.grid-container {
  display: grid;
  grid-template-areas: "header header" "content sidebar" "footer footer";
}

HTML:

<div class="grid-item" style="grid-area: header;">头部</div>

5. 响应式设计的细节

5.1 媒体查询的特定性

在响应式设计中,媒体查询的特定性有时会被忽视,导致样式无法正确应用。

CSS:

@media (min-width: 768px) {
  .container {
    flex-direction: row;
  }
}

确保在媒体查询中使用正确的选择器和属性,以实现预期的响应式效果。