CSS布局模式之Flex布局&Grid布局(二)

简介: CSS布局模式之Flex布局&Grid布局

CSS布局模式之Flex布局&Grid布局(一)https://developer.aliyun.com/article/1426126


3.3 Grid容器的属性

3.3.1 grid-template-rows和grid-template-columns

在Grid布局中,grid-template-rowsgrid-template-columns属性用于定义Grid容器的行和列的大小、数量以及属性。

grid-template-rows属性可以指定每一行的高度,也可以使用重复函数(repeat())来定义重复性较高的行及其属性。例如,以下代码定义了一个包含三行的Grid容器,其中第一行高度为50像素,第二行和第三行的高度为自适应高度:

grid-template-rows: 50px auto auto;

grid-template-columns属性则可以指定每一列的宽度,同样也可以使用repeat()函数来定义多个重复的列。例如,以下代码定义了一个包含四个列的Grid容器,其中第一列宽度为25%,第二列和第三列的宽度为自适应宽度,第四列的宽度为20%:

grid-template-columns: 25% auto auto 20%;

同时,grid-template-rowsgrid-template-columns属性也支持使用像素(px)、百分比(%)、em、rem等单位来定义宽度和高度。它们还允许使用minmax()函数来限制网格轨道的大小,也可以使用fr单位来设置根据可用空间计算的比例系数。

grid-template-rowsgrid-template-columns属性中,使用空格或斜线符号的组合来表示相邻的列和行。例如,下面的代码演示了通过在grid-template-rowsgrid-template-columns属性中使用空格和斜线符号,定义一个包含不同大小网格的Grid容器:

.grid {
  display: grid;
  grid-template-rows: 200px 100px 150px;
  grid-template-columns: 100px 1fr 2fr 100px;
}
.item-1 {
  grid-row: 1 / 3;
  grid-column: 1 / 3;
}
.item-2 {
  grid-row: 1 / 2;
  grid-column: 3 / 5;
}
.item-3 {
  grid-row: 2 / 4;
  grid-column: 2 / 4;
}
.item-4 {
  grid-row: 3 / 4;
  grid-column: 4 / 5;
}

通过以上代码,我们可以看到grid-template-rowsgrid-template-columns属性提供了灵活的方式来定义网格的大小、资产和数量等,从而实现更精细化和灵活的布局。

3.3.2 grid-template-areas

grid-template-areas属性是Grid布局中用于定义网格区域的一种方式,它允许开发者通过在Grid容器中使用名称来定义一组网格区域,并将这些网格区域分配给特定的Grid项目。

使用grid-template-areas属性,我们可以在Grid容器中定义名称为字符串的矩阵。例如:

grid-template-areas:
  "header header header"
  "sidebar content content"
  "footer footer footer";

在这个例子中,我们定义了一个三行三列的网格区域,每个区域被命名为header、sidebar、content和footer。然后,我们可以将Grid项目安排到这些命名区域中,如下所示:

grid-area:
  header header header
  sidebar content content
  footer footer footer;

在这个例子中,我们按照定义的网格区域名称,将Grid项目分配到header、sidebar、content和footer的相应网格区域中。与使用grid-rowgrid-column属性相比,使用grid-template-areas可以更直观地表示网格布局结构,方便开发者快速创建并修改复杂网格布局。

需要注意的是,使用grid-template-areas属性时必须使用相同数量的名称来定义网格区域,如果定义的网格区域不相等,则网格不会正确地显示。此外,如果不希望使用矩阵定义网格区域,则可以使用grid-rowgrid-column属性来分配网格项目的位置。

3.3.3 grid-auto-rows和grid-auto-columns

在使用Grid布局时,grid-auto-rowsgrid-auto-columns属性可用于给未定义行和列设置高度或宽度。这两个属性与grid-template-rowsgrid-template-columns属性有所不同,它们的作用是处理那些没有显式声明大小的网格轨道。

grid-auto-rows属性用于给未定义的行设置默认的高度。这个属性可以使用任何长度单位来设置高度的大小。例如,以下代码将未定义的行的高度设置为50像素:

grid-auto-rows: 50px;

grid-auto-columns属性用于给未定义的列设置默认的宽度。同样,这个属性也可以使用任何长度单位来设置宽度的大小。例如,以下代码将未定义的列的宽度设置为100像素:

grid-auto-columns: 100px;

在实际开发中,有的时候只定义了行和列的一部分,而剩余的部分则通过grid-auto-rowsgrid-auto-columns属性来设置网格轨道的大小。这样就可以精确控制所有网格轨道的大小,从而更好地实现网格布局。

需要注意的是,如果一个网格单元格跨越了不止一个未定义的行或列,则需要在grid-auto-rowsgrid-auto-columns属性中设置足够的大小为其提供足够的空间。因此,在设计网格化布局时应该根据具体情况,谨慎地定义这两个属性的值,以满足网格布局的需求。

3.3.4 grid-auto-flow

在Grid布局中,grid-auto-flow属性可用于控制自动生成的网格布局方式

grid-auto-flow属性的默认值为row,它表示Grid项目在容器中的自动流动方式按照行的顺序排列。也就是说,从左到右,从上到下。如果我们要改变这种默认流动方式,可以在grid-auto-flow属性中,设置为column表示按照列的顺序排列,也就是从上到下,从左到右;设置为dense表示自动填充未占用的网格区域,以最大程度利用空间。

例如,下面是一个包含了10个Grid项目的Grid容器,我们通过grid-auto-flow: row dense将自动流程设置为按行排列和稠密占用未使用的区域:

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-flow: row dense;
}
.item {
  background-color: #ccc;
  height: 100px;
  width: 100px;
}

在上面例子中,我们将Grid容器的自动流程设置为按行自动流动,并指定了dense选项。当Grid项目的尺寸或位置不规则时,dense选项将占用未使用的网格区域,以最大程度利用Grid容器中的空间。

总的来说,grid-auto-flow属性提供了很多的自由度,使得我们在网格布局中更加灵活地控制Grid项目之间的位置和流动方式。

3.3.5 grid

grid是CSS中,用于设置Grid布局的简写属性。它可用于一次性设置所有与Grid布局有关的属性,包括grid-template-rows, grid-template-columns, grid-template-areas, grid-auto-rows, grid-auto-columns, grid-auto-flow以及与Grid项目相关联的属性。

当使用grid属性时,需要将这些属性的值通过空格、斜线或字符串的形式连接起来。例如以下代码实现一个包含三行三列网格布局的Grid容器,其中第二行和第三行的高度为自适应高度:

grid: 
  "A B C" 100px
  "D E F" auto
  "G H I" auto / 1fr 2fr 1fr;

在这个例子中,我们首先定义了一个3x3的网格布局,其中第二行和第三行的高度设置为auto,其余行的高度为100像素。然后,我们使用斜线符号将行属性和列属性分开,并使用1fr2fr1fr将列进行均分。最终,我们将grid-template-areas属性省略掉了,因为我们不需要给每个网格区域命名。

grid属性可以简化CSS样式表的书写,将所有与Grid布局相关的代码组织在一起,更便于开发者的编写和维护。

3.4 Grid项目的属性

3.4.1 grid-row-start

grid-row-start是Grid布局中用于指定网格项开始放置行的起点位置的属性。它可以接受数字和关键字值作为输入,并与其他 Grid 属性联合使用,以指定网格项放置和调整它在 Grid 容器中的位置的方式。

具体来说,grid-row-start属性指定网格项开始放置的行的起点位置。它可以接受以下类型的值:

  • :具有整数值的表示行线的编号,从 1 开始(类似于grid-row:  / ;
  • :自定义标识符的名称(类似于grid-row: ;
  • span :指定网格项横跨多少个单元格(类似于grid-row: span ;
  • span :指定网格项横跨多少个命名的行(类似于grid-row: span ;

例如,以下代码显示了一个简单的 Grid 布局,其中两个网格项跨越两个行:

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: 100px 100px;
}
.item1 {
  background-color: red;
  grid-row-start: 1;
  grid-row-end: 3;
}
.item2 {
  background-color: blue;
  grid-row: 2 / 4;
}

在这个例子中,我们定义了一个3列2行的 Grid 容器,并设置了两个子元素,其中一个元素跨越了第1行和第2行,另一个元素跨越了第2行和第3行。其中,.item1 等价于 grid-row-start: 1; grid-row-end: 3;.item2 等价于 grid-row: 2 / 4;。这两种写法都可以达到同样的效果,其中 grid-rowgrid-row-startgrid-row-end 的简写方式。

3.4.2 grid-row-end

grid-row-end是Grid布局中用于指定网格项结束放置行的终点位置的属性。它可以接受数字和关键字值作为输入,并与其他 Grid 属性联合使用,以指定网格项放置和调整它在 Grid 容器中的位置的方式。

具体来说,grid-row-end属性指定网格项结束放置的行的终点位置。与grid-row-start不同的是,grid-row-end属性接受的值的范围是从指定的起点位置到下一个位置。它可以接受以下类型的值:

  • :具有整数值的表示行线的编号,从 1 开始(类似于grid-row:  / ;
  • :自定义标识符的名称(类似于grid-row: ;
  • span :指定网格项横跨多少个单元格(类似于grid-row:  / span ;
  • span :指定网格项横跨多少个命名的行(类似于grid-row:  / span ;

例如,以下代码显示了一个简单的 Grid 布局,其中一个网格项跨越了两个行:

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: 100px 100px;
}
.item {
  background-color: red;
  grid-row-start: 1;
  grid-row-end: 3;
}

在这个例子中,我们定义了一个3列2行的 Grid 容器,并设置了一个子元素,它跨越了第1行和第2行,并占用了所有列。其中,.item 的起点为第1行,终点为第3行。如果仅使用grid-row属性,则等价于grid-row: 1 / 3;

总的来说,grid-row-end属性非常适合于定义跨越多行或多列的网格项,以及在 Grid 容器中调整网格项的位置和大小。


CSS布局模式之Flex布局&Grid布局(三)https://developer.aliyun.com/article/1426128

相关文章
|
4月前
|
前端开发 算法 Java
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
169 0
|
4月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
Flex 布局 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。 一、Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。
368 0
|
8月前
|
设计模式 容器
13.HarmonyOS流式卡片列表实现指南:Flex多行布局详解
在现代移动应用开发中,流式卡片列表是一种常见且实用的UI设计模式。它能够自适应屏幕宽度,在有限空间内高效展示多个内容项。本教程将详细讲解如何使用HarmonyOS的ArkUI框架中的Flex组件实现一个灵活的流式卡片列表,重点关注多行布局与对齐策略的应用。
286 2
|
8月前
|
开发者 UED 容器
07.精通HarmonyOS Flex对齐:从基础到高级布局技巧(上)
在HarmonyOS Next的ArkUI框架中,Flex容器提供了强大而灵活的对齐系统,使开发者能够精确控制子元素在容器中的排列方式。掌握这些对齐技术,是构建专业级用户界面的关键。
257 0
|
8月前
|
UED 容器
5.HarmonyOS Next开发宝典:掌握Flex布局的艺术
Flex布局(弹性布局)是HarmonyOS Next中最强大的布局方式之一,它提供了一种更加高效、灵活的方式来对容器中的子元素进行排列、对齐和分配空间。无论是简单的居中显示,还是复杂的自适应界面,Flex布局都能轻松应对。
270 0
|
11月前
|
开发者 容器
鸿蒙开发:弹性布局Flex
在实际的开发中,需要掌握主轴与交叉轴的关系、换行规则及子元素属性,同时注意性能与兼容性问题,还有一点,Flex组件在渲染时存在二次布局过程,因此在对性能有严格要求的场景下建议使用Column、Row代替。
306 10
鸿蒙开发:弹性布局Flex
|
8月前
|
UED 容器
10.HarmonyOS Next布局进阶:嵌套Flex容器与空间分配策略
在HarmonyOS Next的ArkUI框架中,Flex布局是构建用户界面的核心技术之一。通过嵌套使用Flex容器,我们可以创建复杂而灵活的界面结构,满足各种应用场景的需求。本教程将深入探讨如何在HarmonyOS Next中使用嵌套Flex容器实现复杂布局,以及如何合理分配和控制空间。
246 0
|
前端开发 容器
flex布局
【10月更文挑战第7天】
310 87
|
前端开发 UED 容器
使用 Flex 布局实现垂直居中效果
【10月更文挑战第7天】
1518 57

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    358
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    279
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    245
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    169
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    368
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    518
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    372
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    168
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    357
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    320