如何在 Angular 中使用 Flex 布局

介绍

Flex Layout 是一个组件引擎,允许您使用 CSS Flexbox 创建页面布局,并提供一组指令供您在模板中使用。

该库是用纯 TypeScript 编写的,因此不需要外部样式表。它还提供了一种在不同断点上指定不同指令以创建响应式布局的方法。

在本教程中,您将构建一个示例 Angular 应用程序,并使用 Flex Layout 来排列项目。

先决条件

要完成本教程,您需要:

  • 本地安装 Node.js,您可以按照《如何安装 Node.js 并创建本地开发环境》进行操作。
  • 一些设置 Angular 项目和使用 Angular 组件的基础知识可能会有所帮助。

本教程已使用 Node v14.13.1、npm v6.14.8、angular v10.1.6 和 @angular/flex-layout 进行验证。

步骤 1 — 设置项目

您可以使用 @angular/cli 创建一个新的 Angular 项目。

在您的终端窗口中,使用以下命令:

npx @angular/cli new angular-flex-example --style=css --routing=false --skip-tests

这将配置一个新的 Angular 项目,样式设置为 “CSS”(而不是 “Sass”、“Less” 或 “Stylus”),没有路由,并且将跳过测试。

导航到新创建的项目目录:

cd angular-flex-example

从您的项目文件夹中运行以下命令以安装 Flex Layout:

npm install @angular/flex-layout@10.0.0-beta.32

接下来,在您的应用程序模块中导入 FlexLayoutModule

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FlexLayoutModule } from "@angular/flex-layout";import { AppComponent } from './app.component';@NgModule({declarations: [AppComponent],imports: [BrowserModule,FlexLayoutModule],providers: [],bootstrap: [AppComponent]
})
export class AppModule { }

启动项目以验证是否有错误。

npm start

如果您在 Web 浏览器中访问本地应用程序(通常在 localhost:4200),您将看到一个 "angular-flex-example app is running!" 消息。

有了这个基本结构,您可以在模板中使用 Flex Layout。

步骤 2 — 使用 Flex Layout 进行实验

接下来,您将修改 app.component.html 模板以使用 FlexLayoutModule

以下是在本教程中使用 Flex Layout 进行实验的最终结果的示例图:

!Flex Layout 示例截图,其中有五个不同颜色的 div。这些项目占据两行。第一行包括项目 1、2 和 3。项目 3 比 1 和 2 更宽,并显示为第二个项目。第二行包括项目 4 和 5。项目 4 比项目 5 更宽,并向左偏移。

首先,打开您的代码编辑器中的 app.component.css 并添加以下代码行:

.container {margin: 10px;
}.item {border-radius: .2em;color: #ffffff;font-family: sans-serif;font-size: 2em;padding: 4em 1em;text-transform: uppercase;
}.item-1 {background-color: #009169;
}.item-2 {background-color: #55b296;
}.item-3 {background-color: #9fd3c3;
}.item-4 {background-color: #e7b013;
}.item-5 {background-color: #073443;
}

然后,打开您的代码编辑器中的 app.component.html 并用两个容器 div 和五个内部项目 div 替换代码:

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

重新编译后,在 Web 浏览器中访问您的应用程序。现在您将看到五个 div 堆叠在一起。

接下来,添加 fxLayout

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

此代码将在容器 div 上应用 display: flexflex-direction: row 样式。

重新编译后,在 Web 浏览器中访问您的应用程序,您将看到三个 div 共享顶部行,以及两个 div 共享底部行。

接下来,添加 fxLayoutAlignfxLayoutGap

<div class="container"fxLayoutfxLayoutAlign="center"fxLayoutGap="10px"
><div class="item item-1">Item 1</div><div class="item item-2">Item 2</div><div class="item item-3">Item 3</div>
</div><div class="container"fxLayoutfxLayoutAlign="center"fxLayoutGap="10px"
><div class="item item-4">Item 4</div><div class="item item-5">Item 5</div>
</div>

此代码将在容器 div 上应用 place-content: stretch centeralign-items: stretch 样式。它还将在 flex 项目之间应用 10px 的间距。

接下来,使用响应式后缀在特定断点上更改 flexbox 样式:

<div class="container"fxLayoutfxLayout.xs="column"fxLayoutAlign="center"fxLayoutGap="10px"fxLayoutGap.xs="0"
><div class="item item-1">Item 1</div><div class="item item-2">Item 2</div><div class="item item-3">Item 3</div>
</div><div class="container"fxLayoutfxLayout.xs="column"fxLayoutAlign="center"fxLayoutGap="10px"fxLayoutGap.xs="0"
><div class="item item-4">Item 4</div><div class="item item-5">Item 5</div>
</div>

此代码将在 xs(额外小)屏幕尺寸上设置断点。它将把布局从默认的 "row" 更改为 "column",并将间距大小从 "10px" 更改为 "0"

重新编译后,在 Web 浏览器中访问您的应用程序。调整浏览器窗口大小至 xs 断点(宽度小于 599px),观察样式的变化。

各种屏幕尺寸的断点别名可用:

  • sm - 小
  • md - 中
  • lg - 大
  • xl - 额外大

还有可以添加到子元素的指令。

接下来,添加 fxFlex

<div class="container"fxLayoutfxLayoutAlign="center"fxLayoutGap="10px"
><div class="item item-1"fxFlex="15%">Item 1</div><div class="item item-2"fxFlex="20%">Item 2</div><div class="item item-3"fxFlex>Item 3</div>
</div><div class="container"fxLayoutfxLayout.xs="column"fxLayoutAlign="center"fxLayoutGap="10px"
><div class="item item-4"fxFlex>Item 4</div><div class="item item-5"fxFlex="200px">Item 5</div>
</div>

此代码将应用 flex-grow: 1flex-shrink: 1flex-basis: 100%。通过指定宽度值,它将应用 max-width 属性。

接下来,添加 fxFlexOrderfxFlexOffset

<div class="container"fxLayoutfxLayoutAlign="center"fxLayoutGap="10px"
><div class="item item-1"fxFlex="15%">Item 1</div><div class="item item-2"fxFlex="20%"fxFlexOrder="3">Item 2</div><div class="item item-3"fxFlex>Item 3</div>
</div><div class="container"fxLayoutfxLayout.xs="column"fxLayoutAlign="center"fxLayoutGap="10px"
><div class="item item-4"fxFlexfxFlexOffset="50px">Item 4</div><div class="item item-5"fxFlex="200px">Item 5</div>
</div>

此代码将在第二个项目上应用 order: 3。它还将在第四个项目上应用 margin-left: 50px

重新编译后,在 Web 浏览器中访问您的应用程序,您将注意到第二个项目位于行的第三个位置,并且第四个项目距离 flexbox 起始位置有 50px 的间距。

这就是对 Flex Layout 进行简要实验的全部内容。

结论

在本教程中,您使用 Flex 布局与 Angular 应用程序。它允许您构建一个布局,使用预配置的 Flexbox CSS 样式,而无需额外的样式。

您可以参考 API 概述,以更深入地了解可用的指令。

在本例中,您硬编码了指令的值。也可以使用数据绑定来绑定到组件类中的值(例如,[fxLayout]="direction")。这将允许您创建用户可以控制和更改的高度动态的布局。

Flex 布局还可以与 Angular Material 结合使用,用于 Material Design 组件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/687063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多数据源支持

平台倡导分布数据库&#xff0c;最简单的分库逻辑是按业务领域&#xff0c;例如人力资源系统一个库&#xff0c;客户关系管理一个库&#xff08;举个例子而已&#xff0c;在平台正式的系统中&#xff0c;人力资源系统又细分为核心库、绩效管理库、薪资管理库等&#xff09;。一…

springboot/ssm公司进销存系统Java商品销售出入库系统

springboot/ssm公司进销存系统Java商品销售出入库系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#x…

基于PPNSA+扰动算子的车间调度最优化matlab仿真,可以任意调整工件数和机器数,输出甘特图

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于PPNSA扰动算子的车间调度最优化matlab仿真,可以任意调整工件数和机器数,输出甘特图和优化收敛曲线。 2.测试软件版本以及运行结果展示 MATLAB2022a版本运行…

【JavaScript】面试手写题精讲之数组(上)

专题缘由 该专题主要是讲解我们在面试的时候碰到一些JS的手写题, 确实这种手写题还是比较恶心的。有些时候好不容易把题目写出来了&#xff0c;突然面试官冷不丁来一句有没有更优的解法&#xff0c;直接让我们僵在原地。为了解决兄弟们的这些困扰&#xff0c;这个专题于是就诞…

python入门:常用模块—jsonpickle模块

什么叫序列化&#xff1f; 序列化是指把内存里的数据类型转变成字符串&#xff0c;以使其能存储到硬盘或通过网络传输到远程&#xff0c;因为硬盘或网络传输时只能接受bytes 为什么要序列化&#xff1f; 你打游戏过程中&#xff0c;打累了&#xff0c;停下来&#xff0c;关掉…

随想录刷题笔记 —二叉树篇6 513找树左下角的值 112路径总和 106中序后序构造二叉树

513找树左下角的值 找出该二叉树的 最底层 最左边 节点的值 解法一&#xff1a;队列——层次遍历 class Solution {public int findBottomLeftValue(TreeNode root) {Queue<TreeNode> treeNodes new LinkedList<>();treeNodes.offer(root);int count 1;int re…

贪心算法之合并区间

“任世界多宽广&#xff0c;停泊在这港口~” 区间问题&#xff0c;涉及到最多的就是 取交集 和 并集的概念。我们使用C排序算法后&#xff0c;其默认规则就是按照 “左排序”进行的。因而&#xff0c;我们实质上注意的是每一个区间的 右端点&#xff0c;根据题目要求&#xff…

蓝桥杯:C++模运算、快速幂

模运算 模运算是大数运算中的常用操作。如果一个数太大&#xff0c;无法直接输出&#xff0c;或者不需要直接输出&#xff0c;则可以对它取模&#xff0c;缩小数值再输出。取模可以防止溢出&#xff0c;这是常见的操作。 模是英文mod的音译&#xff0c;取模实际上是求余。 取…

表达式 副作用 序列点

语句分类 标号语句(标签&#xff0c;常与goto配合使用)复合语句(块)表达式语句(赋值表达式语句、函数表达式语句等)选择语句迭代语句(循环)跳转语句(return,break,continue) 其中复合语句(块)可视为单个语句。因此while和for循环之后加的是单个语句(简单语句、复合语句、空语…

树莓派:使用mdadm为重要数据做RAID 1保护

树莓派作为个人服务器可玩性还是有点的。说到服务器&#xff0c;在企业的生成环境中为了保护数据&#xff0c;基本上都会用到RAID技术。比如&#xff0c;服务器两块小容量但高性能的盘做个RAID-1按装操作系统&#xff0c;余下的大容量中性能磁盘做个RAID-5或者RAID-6存放数据。…

网络原理(HTTP篇)

网络原理HTTP 前言HTTPHTTP的工作流程抓包工具抓取HTTP报文HTTP报文格式 请求报文具体细节首行URLURL的基本格式URL encode 方法 报头(header)HostContent-Length 和 Content-TypeUser-Agent&#xff08;UA&#xff09;RefererCookie&#xff08;重要&#xff09; 前言 如图&a…

HAL/LL/STD STM32 U8g2库 +I2C SSD1306/sh1106 WouoUI磁贴案例

HAL/LL/STD STM32 U8g2库 I2C SSD1306/sh1106 WouoUI磁贴案例 &#x1f4cd;基于STM32F103C8T6 LL库驱动版本&#xff1a;https://gitee.com/chcsx/platform-test/tree/master/MDK-ARM&#x1f3ac;视频演示&#xff1a; WouoUI移植磁贴案例&#xff0c;新增确认弹窗 &#x1f…

Unity中关于ScrollRect组件完整解决方案(ScrollRect中元素自动排版+ScrollRect中元素自动定位到Viewport可见范围内)

一、元素自动排版功能 1、首先要往我们的unity项目中导入两个脚本文件&#xff0c;脚本文件名称分别是UIScrollEventListener和CZScrollRect&#xff0c;这两个脚本文件代码如下所示。 1-1、介绍UIScrollEventListener脚本写法。 using System.Collections; using System.Co…

Ubuntu 20.04 安装RVM

RVM是管理Ruby版本的工具,使用RVM可以在单机上方便地管理多个Ruby版本。 下载安装脚本 首先使下载安装脚本 wget https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer 如果出现了 Connection refused 的情况, 可以考虑执行以下命令修改dns,再执…

【自然语言处理】seq2seq模型—机器翻译

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现&#xff08;实验满分&#xff09;&#xff0c;只展示主要任务实验结果&#xff0c;如果需要详细的实验报告或者代码可以私聊博主 有任何疑问或者问题&#xff0c;也欢…

算法学习(七)枚举

枚举 1. 概念 枚举算法是我们在日常中使用到的最多的一个算法&#xff0c;它的核心思想就是:枚举所有的可能。 枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件&#xff1a; (1)可预先确定候选答案的数量&#xff1b; (2)候选答案的范围在求解之…

Linux网络编程——守护进程

文章目录 1. 前台 & 后台进程2. Linux进程之间的关系3. 守护进程 本章Gitee仓库&#xff1a;守护进程 1. 前台 & 后台进程 在Linux系统登陆的时候&#xff0c;它会给我们形成一次会话&#xff0c;会话在系统里面会创建一个bash进程&#xff0c;这个bash就会给用户提供…

Java 抽象容器类源码剖析

总体介绍 抽象容器类接口和具体容器类的关系如图所示&#xff0c;顶层包括Collection、List、Set、Queue、Deque和Map6个抽象容器类。 AbstractCollection&#xff1a;实现了Collection接口&#xff0c;被抽象类AbstractList、AbstractSet、AbstractQueue继承&#xff0c;Arra…

Vue-Router 官网速通

前言&#xff1a;参考Vue Router&#xff0c;本文档例子使用 vue3 语法。 一&#xff1a;介绍 1. 什么是 Vue Router 是 Vue.js 的官方路由。功能包括&#xff1a;1. 路由映射。2. 动态路由。3. 路由配置。4. 路由参数。5. 过渡效果。6. 导航控制。7. CSS 类链接。8. HTML5 模…

7.1 Qt 中输入行与按钮

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 参考&#xff1a; 前言&#xff1a; line edit 与pushbotton的一点联动 当输入行有内容时&#xff0c;按钮才能使用&#xff0c;并能读出输入行的内容 技能&#xff1a; pushButton->setEnabled(false) 按钮不…