likes
comments
collection
share

CSS Grid 教程:从入门到精通一,CSS Grid 基础概念 1. 什么是 CSS Grid? CSS Grid

作者站长头像
站长
· 阅读数 23

一,CSS Grid 基础概念

1. 什么是 CSS Grid?

CSS Grid 是一种强大的二维布局系统,它允许你轻松创建复杂的网页布局。与传统的布局方法相比,CSS Grid 可以同时控制水平(行)和垂直(列)方向的布局。

示例: 想象一下,你要把页面分成多个部分,如头部、侧边栏、内容区和页脚。使用 CSS Grid,你可以非常直观地定义这些部分的位置和大小,而不需要依赖浮动、定位或表格。

<div class="grid-container">
  <header>Header</header>
  <aside>Sidebar</aside>
  <main>Main Content</main>
  <footer>Footer</footer>
</div>

.grid-container {
  display: grid;
  grid-template-columns: 200px 1fr;
  grid-template-rows: 100px 1fr 50px;
  grid-template-areas: 
    "header  header"
    "sidebar main"
    "footer  footer";
}
header {
    grid-area: header;
    border: 1px solid red;
}
aside {
    grid-area: sidebar;
    border: 1px solid blue;
}
main {
    grid-area: main;
    border: 1px solid green;
}
footer {
    grid-area: footer;
    border: 1px solid orchid;
}

CSS Grid 教程:从入门到精通一,CSS Grid 基础概念 1. 什么是 CSS Grid? CSS Grid

2. CSS Grid 与 Flexbox 的区别

  • Flexbox 是一维布局系统:Flexbox 主要用于管理一行或一列中的元素。当你需要在一个方向上排列元素时,Flexbox 是一个理想的选择。
  • CSS Grid 是二维布局系统:CSS Grid 则用于同时处理行和列的布局,非常适合创建复杂的页面布局。

什么时候使用

  • 如果你只需要一维的排列(如导航栏、按钮组),可以选择 Flexbox。
  • 如果你需要二维的布局(如网页主结构),CSS Grid 是更好的选择。

3. 什么时候使用 CSS Grid?

典型场景

  • 整体页面布局:使用 CSS Grid 可以轻松地创建包含头部、主内容区、侧边栏和页脚的布局。
  • 复杂的网格结构:当你需要精确控制多个行和列的位置和大小时,CSS Grid 是最合适的工具。
  • 响应式设计:通过媒体查询和 CSS Grid,你可以创建自适应的布局,适配不同设备和屏幕尺寸。 示例
<div class="grid-container">
  <div class="item1">Item 1</div>
  <div class="item2">Item 2</div>
  <div class="item3">Item 3</div>
  <div class="item4">Item 4</div>
</div>

.grid-container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-gap: 10px;
}
.item1, .item2, .item3, .item4 {
  background-color: #ddd;
  padding: 20px;
  text-align: center;
}

输出:四个项目将自动按三个列布局,保持一致的间距。如图:

CSS Grid 教程:从入门到精通一,CSS Grid 基础概念 1. 什么是 CSS Grid? CSS Grid

2, 创建一个简单的 Grid 布局

第一步:定义容器

首先,我们需要创建一个 HTML 容器元素,并通过 CSS 将其定义为 Grid 容器。这里,我们将使用一个 <div> 元素作为容器。

<div class="grid-container">
  <div class="grid-item">Item 1</div>
  <div class="grid-item">Item 2</div>
  <div class="grid-item">Item 3</div>
  <div class="grid-item">Item 4</div>
</div>

.grid-container {
  display: grid; /* 将容器定义为 Grid 容器 */
}

第二步:定义列和行

在定义好 Grid 容器后,我们需要设置网格布局的结构。这包括定义网格中的列数和行数,并指定每个列和行的大小。

2.1 使用 grid-template-columns 定义列

设置列数和列宽

使用 grid-template-columns 属性来定义网格的列数以及每列的宽度。你可以根据需要指定固定宽度、百分比、fr 单位(表示网格分数)等。

示例

.grid-container {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr; /* 定义3列,分别占1/4、1/2、1/4宽度 */
}

在这个例子中,我们定义了两行,第一行的高度为100px,第二行为200px。

第三步:自动分配网格项

当定义了列和行之后,Grid 布局会自动将容器内的子元素(网格项)按照行和列的顺序分配到相应的位置。

子元素自动排列

我们之前已经在 HTML 中定义了四个子元素(.grid-item)。现在,我们通过 CSS 给它们一些基本的样式,观察它们如何被自动分配到网格中。

示例

.grid-item {
  background-color: #ccc;
  padding: 20px;
  text-align: center;
  border: 1px solid #333;
}

输出

现在,这四个子元素会自动按照以下方式排列在网格中:

  • 第一行包含 Item 1 和 Item 2,分别占据第一列和第二列。
  • 第二行包含 Item 3 和 Item 4,分别占据第二列和第三列。

注意:由于我们定义了3列而有4个子元素,第4个元素会自动分配到第二行的第一列。

第四步:网格间距设置

为了让网格项之间保持适当的间距,我们可以使用 grid-gap 属性。

步骤 5:设置网格间距

你可以使用 grid-gaprow-gapcolumn-gap 来设置行与列之间的间距。

示例

.grid-container {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr;
  grid-template-rows: 100px 200px;
  grid-gap: 10px; /* 设置行列间的间距为10px */
}

3,CSS Grid 布局的基本属性

如何使用 grid-template-areasgrid-columngrid-rowgrid-auto-flow 以及 grid-gap 等属性来创建更复杂和灵活的布局。

1. 使用 grid-template-areas 定义布局区域

概念grid-template-areas 属性允许你为网格中的不同区域命名,并通过简单的布局规则,直接在 CSS 中定义网格项的位置。通过命名区域,可以更清晰地表示布局结构,尤其是在处理复杂布局时。

步骤 1:定义网格区域

首先,我们定义网格容器,并使用 grid-template-areas 属性指定每个网格区域的名称。 HTML 代码

<div class="grid-container">
  <header class="header">Header</header>
  <aside class="sidebar">Sidebar</aside>
  <main class="main">Main Content</main>
  <footer class="footer">Footer</footer>
</div>

.grid-container {
  display: grid;
  grid-template-columns: 200px 1fr;
  grid-template-rows: 100px 1fr 50px;
  grid-template-areas: 
    "header  header"
    "sidebar main"
    "footer  footer";
}

.header {
  grid-area: header;
}

.sidebar {
  grid-area: sidebar;
}

.main {
  grid-area: main;
}

.footer {
  grid-area: footer;
}

解释

  • grid-template-areas 属性使用引号包裹的字符串来表示网格中的区域。
  • 每个字符串代表一行,字符串中的内容表示该行中每个单元格的名称。
  • 网格项使用 grid-area 属性将自身与网格区域对应起来。

输出:页面会自动按照我们定义的区域布局,headersidebarmainfooter 分别被安排在对应的位置。

2. 使用 grid-columngrid-row 跨列和跨行

概念grid-columngrid-row 属性用于指定网格项在网格中的起始和终止位置,允许网格项跨越多个列或行。

步骤 2:设置跨列和跨行

我们可以通过 grid-columngrid-row 属性使网格项跨越多个网格单元格。

示例

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

.grid-item-1 {
  grid-column: 1 / 3; /* 跨越第1列到第3列 */
  grid-row: 1 / 2;    /* 占据第一行 */
}

.grid-item-2 {
  grid-column: 2 / 4; /* 跨越第2列到第4列 */
  grid-row: 2 / 4;    /* 跨越第2行到第4行 */
}

解释

  • grid-column: 1 / 3 表示网格项从第1列开始,跨越到第3列(不包括第3列)。
  • grid-row: 2 / 4 表示网格项从第2行开始,跨越到第4行(不包括第4行)。

输出:网格项将跨越指定的行或列,形成更复杂的布局。

3. 使用 grid-auto-flow 控制自动排列方向

概念grid-auto-flow 属性用于控制未明确放置的网格项的自动排列方式。它的常用值有 rowcolumndense

步骤 3:控制自动排列

通过设置 grid-auto-flow,你可以改变网格项的排列方向或密集填充的方式。

示例

.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-flow: dense; /* 自动填充网格项,减少空白 */
}

.grid-item-1 {
  grid-column: 1 / 2;
}

.grid-item-2 {
  grid-column: 3 / 4;
}

.grid-item-3 {
  /* 未指定位置,将由 grid-auto-flow 自动安排 */
}

解释

  • grid-auto-flow: row 默认会按行顺序排列未明确位置的网格项。
  • grid-auto-flow: column 会按列顺序排列网格项。
  • grid-auto-flow: dense 会紧密填充空白区域,尽量避免空白。

输出:未指定位置的网格项会根据 grid-auto-flow 的设置自动排列,尽量填补布局中的空隙。

4. 使用 grid-gap 设置网格间距

概念grid-gap 属性用于设置网格项之间的间距。它可以分为 row-gapcolumn-gap,分别控制行间距和列间距。

步骤 4:设置行间距和列间距

通过 grid-gap 属性,你可以轻松地控制网格项之间的间距,使布局更加美观。

示例

.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-gap: 20px; /* 设置行间距和列间距为20px */
}

解释

  • grid-gap: 设置统一的行间距和列间距。
  • row-gapcolumn-gap: 分别设置行间距和列间距,如果需要不同的间距,可以单独使用这两个属性。

输出:所有网格项之间将保持一致的间距,布局更加整齐和美观。

4,CSS Grid 布局的进阶用法

包括使用 repeat() 简化代码、minmax() 函数的使用、auto-fillauto-fit 的区别,以及网格项和容器的对齐方式。这些高级技巧将帮助你更灵活和高效地使用 CSS Grid。

1. 使用 repeat() 简化代码

概念repeat() 函数允许你简化对重复网格单元的定义,减少冗长的代码。它可以根据你指定的次数重复列或行的定义。

步骤 1:使用 repeat() 函数

如果你需要创建一个包含多个等宽列的网格布局,可以使用 repeat() 函数来简化代码。

示例

.grid-container {
  display: grid;
  grid-template-columns: repeat(4, 1fr); /* 创建4列,且每列宽度相等 */
  grid-gap: 10px;
}

解释

  • repeat(4, 1fr) 表示创建4个列,每个列的宽度都为 1fr,即网格宽度的四分之一。

输出:布局将包含4个等宽的列,使用 repeat() 函数可以大大简化代码。

2. 使用 minmax() 创建自适应列

概念minmax() 函数允许你定义列或行的最小和最大尺寸。当你需要在一定范围内控制网格项的尺寸时,它是一个非常实用的工具。

步骤 2:使用 minmax() 函数

minmax() 函数可以帮助你创建自适应的网格布局,确保列或行不会小于指定的最小值,也不会大于最大值。

示例

.grid-container {
  display: grid;
  grid-template-columns: repeat(3, minmax(100px, 1fr)); /* 每列最小100px,最大1fr */
  grid-gap: 10px;
}

解释

  • minmax(100px, 1fr) 表示每个列的最小宽度为100px,最大宽度为1fr(根据容器的大小自适应)。

输出:当容器宽度较小时,列宽保持在100px;当容器宽度较大时,列宽将按比例扩展,最多占据 1fr

3. auto-fillauto-fit 的区别

概念auto-fillauto-fit 是 CSS Grid 中两个非常强大的值,常用于自动填充网格。它们可以自动调整列数,以适应不同的屏幕宽度。

步骤 3:理解 auto-fillauto-fit

这两个值的区别主要在于如何处理多余的网格空间:

  • auto-fill:将尽可能多的网格单元填充到容器中,剩余的单元格保持空白。
  • auto-fit:与 auto-fill 类似,但会将多余的单元格折叠以适应容器的宽度。

示例

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

解释

  • auto-fill:当容器的宽度足够大时,会填充更多的列,并且不会因为网格项不足而减少列数。
  • auto-fit:会根据网格项的数量动态调整列数,使其完全适应容器宽度。

输出:当容器宽度变化时,网格列数会自动调整,以适应屏幕大小。

4. 网格项的对齐方式

概念:CSS Grid 提供了多个属性来对齐网格项,包括 justify-itemsalign-itemsplace-items,它们控制网格项在单元格内的水平和垂直对齐方式。

步骤 4:使用 justify-itemsalign-items

通过设置这些对齐属性,你可以控制网格项在网格单元格中的位置,使布局更加美观和一致。

示例

.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: 200px 200px;
  justify-items: center; /* 网格项在单元格中水平居中 */
  align-items: center;   /* 网格项在单元格中垂直居中 */
}

解释

  • justify-items:控制网格项在单元格内的水平对齐方式。常用值有 startendcenterstretch
  • align-items:控制网格项在单元格内的垂直对齐方式。常用值与 justify-items 相同。

输出:所有网格项都会在其单元格内居中对齐。

5. 网格容器的对齐方式

概念justify-contentalign-content 控制整个网格容器内网格项的整体对齐方式,它们用于在网格项数量不足时对齐网格容器内的内容。

步骤 5:使用 justify-contentalign-content

这两个属性控制的是整个网格容器中的内容如何对齐,而不是单个网格项。

示例

.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: 200px 200px;
  justify-content: center; /* 水平居中所有网格内容 */
  align-content: center;   /* 垂直居中所有网格内容 */
  height: 600px;           /* 设置容器高度以观察效果 */
}

解释

  • justify-content:用于控制整个网格在容器中的水平对齐方式。
  • align-content:用于控制整个网格在容器中的垂直对齐方式。

输出:如果网格的高度或宽度小于容器,网格内容会居中对齐。

5,CSS Grid 布局中的区域命名

通过 grid-template-areas 属性简化复杂布局的定义和管理。你将学习如何定义命名区域、将网格项定位到指定区域,并通过命名区域实现复杂的页面布局。

1. 什么是 grid-template-areas

概念grid-template-areas 是 CSS Grid 中的一项强大功能,它允许你通过为网格定义命名区域,直观地描述布局结构。这种方式不仅使代码更具可读性,还方便后期维护和修改。

步骤 1:创建基本布局并命名区域

我们将通过一个简单的布局示例来演示如何使用 grid-template-areas

HTML 代码

<div class="grid-container">
  <header class="header">Header</header>
  <nav class="nav">Navigation</nav>
  <aside class="sidebar">Sidebar</aside>
  <main class="main">Main Content</main>
  <footer class="footer">Footer</footer>
</div>

.grid-container {
  display: grid;
  grid-template-columns: 1fr 3fr;
  grid-template-rows: auto 1fr auto;
  grid-template-areas: 
    "header  header"
    "nav     main"
    "sidebar main"
    "footer  footer";
}
.header {
  grid-area: header;
}
.nav {
  grid-area: nav;
}
.sidebar {
  grid-area: sidebar;
}
.main {
  grid-area: main;
}
.footer {
  grid-area: footer;
}

解释

  • grid-template-areas:通过定义命名区域,我们可以直观地表示布局。每一行的字符串表示网格的一个部分,每个部分的名称就是我们为网格项指定的 grid-area 值。
  • 每个网格项都使用 grid-area 属性将自身关联到特定的命名区域中。

输出:布局中,header 占据整个顶部行,navmain 分别占据第二行的两列,sidebarmain 分别占据第三行的两列,footer 占据整个底部行。

2. 复杂布局的命名区域

概念grid-template-areas 不仅适用于简单的布局,还可以用于创建更复杂的布局,例如多个区域共享同一行或列,或者在不同的屏幕尺寸下重构布局。

步骤 2:创建一个复杂布局

我们将创建一个更复杂的布局,其中某些区域会跨越多行或多列。

示例

.grid-container {
  display: grid;
  grid-template-columns: 150px 1fr 1fr;
  grid-template-rows: auto 1fr auto;
  grid-template-areas: 
    "header  header  header"
    "nav     main    sidebar"
    "footer  footer  footer";
}

解释

  • 在这个布局中,headerfooter 都跨越了所有三列,nav 只占据第一列,而 mainsidebar 分别占据第二和第三列。

输出:这种布局非常适合用于典型的网页结构,其中头部和页脚占据全宽度,而中间部分根据内容分为不同的列。

3. 响应式设计中的区域命名

概念:区域命名在响应式设计中尤为有用,你可以通过媒体查询轻松地重构布局,以适应不同屏幕大小。

步骤 3:使用媒体查询调整布局

我们可以通过 CSS 的媒体查询功能,在不同屏幕尺寸下调整区域布局。

示例

.grid-container {
  display: grid;
  grid-template-columns: 150px 1fr 1fr;
  grid-template-rows: auto 1fr auto;
  grid-template-areas: 
    "header  header  header"
    "nav     main    sidebar"
    "footer  footer  footer";
}

@media (max-width: 768px) {
  .grid-container {
    grid-template-columns: 1fr;
    grid-template-areas: 
      "header"
      "nav"
      "main"
      "sidebar"
      "footer";
  }
}

解释

  • 默认布局:在较大屏幕上,布局按照三列显示,navmainsidebar 分别占据各自的列。
  • 响应式布局:当屏幕宽度小于768px时,布局自动调整为单列结构,各个区域依次垂直排列。

输出:这使得页面在不同设备上都能保持良好的用户体验。

4. 处理空白区域

概念:在某些情况下,你可能需要在网格布局中留出空白区域。这可以通过在 grid-template-areas 中使用 .(点号)来实现。

步骤 4:创建带有空白区域的布局

你可以通过使用点号(.)表示空白区域,轻松地在网格布局中预留空白。

示例

.grid-container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: auto 1fr auto;
  grid-template-areas: 
    "header  header  header"
    "main    .      sidebar"
    "footer  footer  footer";
}

解释

  • 在这个布局中,第二行的中间区域被留空,没有分配任何内容。这可以用于创建更开放的布局。

输出mainsidebar 仍然位于各自的列中,中间列被留空,用于美观或功能需求。

6,CSS Grid 响应式布局教程

1. 什么是响应式布局?

概念:响应式布局是指网页能够根据设备的屏幕尺寸自动调整布局结构,以提供最佳的用户体验。借助 CSS Grid,你可以轻松地实现复杂的响应式设计,无需依赖大量的媒体查询或其他繁琐的调整。

步骤 1:理解响应式设计的基本原理

响应式设计的核心在于:

  • 流动布局:内容和容器根据屏幕大小自动调整大小和位置。
  • 灵活的图片和媒体:媒体元素(如图片、视频)根据容器大小自动调整。
  • 使用媒体查询:通过媒体查询定义不同屏幕尺寸下的样式规则。

示例

/* 基础网格布局 */
.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-gap: 10px;
}

在这个基础布局中,网格容器会按照三个等宽列布局。接下来,我们将通过媒体查询使其响应式。

2. 使用 fr 单位创建自适应网格

概念fr 单位表示网格的分数单位,它允许你根据可用空间定义列宽度。通过使用 fr 单位,列宽可以根据屏幕大小自适应变化,这对于创建响应式布局非常有用。

步骤 2:使用 fr 单位

我们将通过 fr 单位创建一个基础布局,使其在不同屏幕尺寸下自适应调整。

示例

.grid-container {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr; /* 左右列各占1份,中间列占2份 */
  grid-gap: 10px;
}

解释

  • 1fr 2fr 1fr:布局中左、中、右三列分别占据1份、2份和1份的宽度。无论屏幕大小如何,列宽都会按照这个比例调整。

输出:在大屏幕上,内容将保持比例排列;在小屏幕上,列宽度自动收缩,但仍然保持比例。

3. 使用媒体查询调整布局

概念:媒体查询是响应式设计的核心工具之一。通过设置不同的断点,你可以为不同的屏幕尺寸定义不同的布局规则。

步骤 3:添加媒体查询

我们将通过媒体查询,在屏幕宽度小于768px时调整布局,将三列布局变为单列布局。

示例

.grid-container {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr;
  grid-gap: 10px;
}

@media (max-width: 768px) {
  .grid-container {
    grid-template-columns: 1fr; /* 将三列布局调整为单列 */
  }
}

解释

  • @media (max-width: 768px) :当屏幕宽度小于768px时,CSS 中的规则将生效。
  • grid-template-columns: 1fr:布局将调整为单列,所有网格项将按顺序垂直排列。

输出:在大屏幕上,布局为三列;在小屏幕上,布局自动调整为单列,确保内容在移动设备上易于阅读和交互。

4. 使用 auto-fillauto-fit 创建响应式网格

概念auto-fillauto-fit 是 CSS Grid 的两个强大功能,可以根据可用空间自动调整列数,从而轻松创建自适应网格布局。

步骤 4:使用 auto-fillauto-fit

我们将通过 auto-fillauto-fit,创建一个灵活的网格布局,它能够自动调整列数以适应不同屏幕宽度。

示例

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

解释

  • auto-fill:自动填充列,尽可能多地容纳网格项,如果有多余空间,则留空。
  • minmax(150px, 1fr) :每个列的最小宽度为150px,最大宽度为1fr(根据可用空间调整)。

输出:在宽屏下,布局会显示多个列;在窄屏下,列数自动减少,确保每个网格项都保持合理宽度。

5. 创建复杂的响应式布局

概念:结合媒体查询、fr 单位、auto-fillauto-fit,你可以创建非常复杂且灵活的响应式布局,以适应各种屏幕尺寸。

步骤 5:整合技术,创建复杂布局

我们将通过整合之前学到的技术,创建一个复杂的响应式布局,在大屏幕上显示多列内容,在小屏幕上调整为单列布局。

示例

.grid-container {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  grid-gap: 10px;
  grid-template-areas:
    "header header header"
    "nav    main    sidebar"
    "footer footer footer";
}

.header {
  grid-area: header;
}
.nav {
  grid-area: nav;
}
.main {
  grid-area: main;
}
.sidebar {
  grid-area: sidebar;
}
.footer {
  grid-area: footer;
}

@media (max-width: 768px) {
  .grid-container {
    grid-template-columns: 1fr;
    grid-template-areas:
      "header"
      "nav"
      "main"
      "sidebar"
      "footer";
  }
}

解释

  • 在大屏幕上,布局按照三列显示,各部分内容独立分布。
  • 在小屏幕上,布局自动调整为单列,所有内容垂直排列,确保阅读体验。

输出:该布局在桌面设备上表现为多列结构,在移动设备上自动调整为单列,响应性极佳。

6. 使用 Grid 与 Flexbox 结合实现响应式设计

概念:在某些场景下,你可能需要结合 CSS Grid 和 Flexbox 来实现更灵活的响应式布局。CSS Grid 适合用于整体布局,而 Flexbox 则非常适合处理单个组件的排列。

步骤 6:结合 Grid 和 Flexbox

我们将通过一个示例,展示如何将 Grid 和 Flexbox 结合使用。

示例

.grid-container {
  display: grid;
  grid-template-columns: 1fr;
  grid-template-areas:
    "header"
    "content"
    "footer";
  gap: 20px;
}

.header {
  grid-area: header;
  display: flex;
  justify-content: space-between;
}

.content {
  grid-area: content;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 20px;
}

.footer {
  grid-area: footer;
}

解释

  • header 区域使用 Flexbox,使其中的内容在水平方向上灵活排列。
  • content 区域使用 Grid,自动调整内部网格项的排列方式,以适应不同屏幕尺寸。

输出:这种结合方式,使得页面既有灵活的整体布局,又能精细控制内部组件的排列。

7,实战案例 - 创建一个简单的博客布局

使用 CSS Grid 创建一个简单的博客布局。你将学习如何设计博客的头部、导航栏、文章内容区、侧边栏和页脚,并确保它在不同设备上具有良好的响应式效果。

1. 定义博客的基本布局结构

概念:博客通常由几个主要部分组成:头部(通常包含博客标题或 logo)、导航栏、主内容区(展示文章)、侧边栏(用于显示相关信息或广告),以及页脚。我们将使用 CSS Grid 来定义这些部分的布局。

步骤 1:创建基本的 HTML 结构

我们首先创建一个包含这些部分的 HTML 结构。

HTML 代码

<div class="blog-container">
  <header class="header">My Blog</header>
  <nav class="nav">
    <a href="#">Home</a>
    <a href="#">About</a>
    <a href="#">Contact</a>
  </nav>
  <article class="main">
    <h1>Blog Post Title</h1>
    <p>This is the main content of the blog post...</p>
  </article>
  <aside class="sidebar">
    <h2>About Me</h2>
    <p>Some information about the author...</p>
  </aside>
  <footer class="footer">© 2024 My Blog</footer>
</div>

解释

  • header:包含博客的标题。
  • nav:导航栏,包含几个链接。
  • main:主内容区,显示博客文章。
  • sidebar:侧边栏,展示作者信息或其他相关内容。
  • footer:页脚,包含版权信息。

2. 使用 CSS Grid 定义布局

概念:我们将使用 CSS Grid 为这个博客页面创建一个基础布局,确保各部分按预期排列。首先在桌面设备上创建一个典型的多列布局。

步骤 2:为布局定义 CSS Grid

CSS 代码

.blog-container {
  display: grid;
  grid-template-columns: 1fr 3fr 1fr; /* 定义三列布局 */
  grid-template-rows: auto 1fr auto; /* 自动计算行高 */
  grid-template-areas: 
    "header header header"
    "nav    main    sidebar"
    "footer footer footer";
  gap: 20px; /* 设置网格项之间的间距 */
}

.header {
  grid-area: header;
  background-color: #333;
  color: white;
  padding: 20px;
  text-align: center;
}

.nav {
  grid-area: nav;
  background-color: #f4f4f4;
  padding: 20px;
}

.main {
  grid-area: main;
  background-color: #ffffff;
  padding: 20px;
}

.sidebar {
  grid-area: sidebar;
  background-color: #f4f4f4;
  padding: 20px;
}

.footer {
  grid-area: footer;
  background-color: #333;
  color: white;
  padding: 20px;
  text-align: center;
}

解释

  • grid-template-columns:我们定义了三列布局,导航栏和侧边栏各占1/5的宽度,主内容区占3/5。
  • grid-template-areas:将各部分分配到相应的网格区域中。

输出:在桌面设备上,博客将展示为三列布局,导航栏在左侧,主内容区居中,侧边栏在右侧,头部和页脚跨越整个页面宽度。

3. 添加响应式设计

概念:为了确保博客布局在移动设备上也能良好显示,我们将通过媒体查询调整布局,使其在较小屏幕上转换为单列布局。

步骤 3:添加媒体查询

CSS 代码

@media (max-width: 768px) {
  .blog-container {
    grid-template-columns: 1fr;
    grid-template-areas: 
      "header"
      "nav"
      "main"
      "sidebar"
      "footer";
  }
  
  .nav {
    text-align: center; /* 居中对齐导航链接 */
  }
}

解释

  • grid-template-columns: 1fr:在屏幕宽度小于768px时,布局转换为单列结构。
  • grid-template-areas:所有部分依次垂直排列,确保在移动设备上有良好的阅读体验。

输出:当屏幕宽度小于768px时,博客布局会自动调整为单列,导航栏、主内容区和侧边栏依次垂直排列。

4. 增加一些视觉样式

概念:为了让博客页面更有吸引力,我们可以增加一些基本的视觉样式,比如背景色、字体样式等。

步骤 4:增强视觉样式

CSS 代码

body {
  font-family: Arial, sans-serif;
  line-height: 1.6;
  margin: 0;
  padding: 0;
  background-color: #f8f8f8;
}

a {
  color: #333;
  text-decoration: none;
  padding: 8px 16px;
  display: inline-block;
}

a:hover {
  background-color: #ddd;
}

h1 {
  font-size: 24px;
  margin-bottom: 10px;
}

p {
  margin-bottom: 15px;
}

解释

  • body:设置了全局字体、行高、背景色和默认的边距、填充。
  • a:为链接设置了默认样式和悬停效果。
  • h1 和 p:为标题和段落设置了基本样式,确保文字易于阅读。

输出

PC: CSS Grid 教程:从入门到精通一,CSS Grid 基础概念 1. 什么是 CSS Grid? CSS Grid

移动:

CSS Grid 教程:从入门到精通一,CSS Grid 基础概念 1. 什么是 CSS Grid? CSS Grid

转载自:https://juejin.cn/post/7410229183895715892
评论
请登录