前言

断断续续折腾了近两周,ng-matero v18 终于发布了。其中最大的亮点是启用 Material 3 主题以及全新的 UI 设计。特别说明,这是 ng-matero 发布五年以来首次 UI 大改版!本文重点聊一下 Material 3 的使用方式以及 v18 的几个小变化。

仓库:https://github.com/ng-matero/ng-matero

预览:https://ng-matero.github.io/ng-matero/

如何使用 Material 3 主题

为了适配 M3,Angular Material 从 v16 开始对主题系统进行了大刀阔斧的改动。v16 将所有主题样式全部拆分到 CSS token 中;v17 在 Material 实验库中增加 M3 的 CSS token,提供实验性支持;v18 正式发布 M3 主题,所有 M2 主题配置都增加 m2- 前缀。

这些变化在用户层面是无感知的,使用 ng update 自动升级时,原有配置都会自动添加 m2- 前缀。使用 M3 主题的方式如下:

@use '@angular/material' as mat;

@include mat.core();

$my-theme: mat.define-theme((
color: (
theme-type: light,
primary: mat.$violet-palette,
),
)); html {
@include mat.all-component-themes($my-theme);
}

如果使用了 Material 的扩展组件库,则必须使用 mat.private-deep-merge-all 额外处理一下主题配置的合并。

@use '@angular/material' as mat;
@use '@ng-matero/extensions' as mtx; ... $my-theme: mat.private-deep-merge-all(
mat.define-theme($my-config),
mtx.define-theme($my-config)
); html {
@include mat.all-component-themes($my-theme);
@include mtx.all-component-themes($my-theme);
}

讲几句题外话,增加 M3 主题之后,Angular Material 的主题系统变得更加复杂,想要扩展 Material 的组件的难度也加大了。通过 define-theme 生成的配置项结构如下:

$theme: (
_mat-theming-internals-do-not-access: (
theme-version: 1,
theme-type: light,
palettes: (...),
color-tokens: (...),
typography-tokens: (...)
...
)
)

所以,Material 扩展库的主题配置也必须使用 _mat-theming-internals-do-not-access 作为 key 才能融合到已有的主题系统中。如果有时间的话,我会专门写文章介绍 Angular Material 的主题系统。

如何自定义 Material 3 主题

在 Material 3 中,增加了一个 color roles 的概念(什么是 color roles?),主题定制就是更改这些颜色变量。

在 Angular Material 中,所有 color roles 都有对应的 CSS token,但是默认情况下,Angular Material 的组件都是从主题配置的调色盘中取色的,这些 CSS token 并不会暴露出来。如果想使用自定义主题,必须用下面的方式开启:

$my-material-app-theme: mat.define-theme(
(
color: (
theme-type: light,
primary: mat.$azure-palette,
tertiary: mat.$blue-palette,
use-system-variables: true, // Added
),
typography: (
use-system-variables: true, // Added
),
density: (
scale: 0,
),
)
);

请注意:打开上面的配置之后,所有的颜色都消失了,你必须手动添加 color roles 才可以。有关自定义主题的更多内容,请阅读下面的文章。

Material 3 的颜色助手

在 ng-matero v18 中,颜色助手的调色盘已经更新到 Material 3。所谓的颜色助手就是一些辅助类,你可以使用比如 bg-red-50text-red-50border-red-50 这样的 class 去设置 CSS 的颜色属性。

M2 和 M3 的调色盘最大的区别就是颜色的 hue,另外 M3 的预设颜色数减少了。其实 M3 的调色盘是 Angular Material 单独定义的,在 Material Design 的官方网站中,我并没有找到具体的介绍,不过 M2 的调色盘是有明确定义的,请查看 2014 Material Design color palettes

M2 的调色盘(19 色)

M3 的调色盘(12 色)

优化侧边栏的收窄效果

侧边栏的收窄效果是一个很久远的遗留问题,详情可以查看这个 issue。该问题本身其实并不复杂,最简单的修复方式就是在侧边栏收窄的时候把子菜单收起来,而且大部分 admin 模板也是这么处理的。但是我个人觉得这种处理方式并不理想,由于迟迟没找到理想的解决方案,所以就一直拖着(其实用户也可以自行修复)。

在 ng-matero v18 中,经过一整天的思想斗争,这个问题终于圆满解决。在侧边栏收窄的时候显示子菜单的图标,展开的时候隐藏,如果没有设置子菜单的图标,则显示第一个文本字符。

新的资源文件夹

如果你创建一个 Angular 18 的新项目,你会发现原来的 assets 文件夹不见了,而根目录多了一个 public 文件夹。这个变化使得 src 目录再次精简(只剩一个 app 目录),另一方面,就是项目内静态文件的地址不需要再加 /assets 前缀。不过对于想升级的朋友来说也不用惊慌,这个变化并不是一个 break change,因为之前的项目并不会受影响,这种引用变化主要是在 angular.json 中调整的。

{
"projects": {
"ng-matero": {
"architect": {
"build": {
- "assets": [
- "src/favicon.ico",
- "src/assets"
- ],
+ "assets": [
+ {
+ "glob": "**/*",
+ "input": "public"
+ }
+ ],
...

总结

升级 ng-matero v18 最大的难点是 UI 设计的部分,本人虽有一定的审美基础,但在修改的过程中还是遇到很大挑战。一方面想要融合 Material 3 的设计风格,给人耳目一新的感受;另一方面又不想改动太大,以免失去产品固有的一些特点。这种变与不变之间的分寸是最难拿捏的。那么你喜欢最新的 UI 设计吗?

全新 UI 震撼来袭!ng-matero v18 正式发布!的更多相关文章

  1. 黑洞版视频裂变程序【接口版】全新上线,全新UI,支持分享数据统计

    黑洞版视频裂变程序[接口版]全新上线,全新UI,支持分享数据统计!   后台效果   程序统一售价:1899/套(包安装,包更新) 注:本程序不属于之前视频程序的更新版,展现形式和广告位设置均不同,是 ...

  2. 开源微信管家平台——JeeWx 捷微4.0 微服务版本发布,全新架构,全新UI,提供强大的图文编辑器

    JeeWx捷微4.0   微服务版本发布^_^ 换代产品(全新架构,全新UI,提供强大的图文编辑器) JEEWX 从4.0版本开始,技术架构全新换代,采用微服务架构,插件式开发,每个业务模块都是独立的 ...

  3. 3.0.0 alpha 重磅发布!九大新功能、全新 UI 解锁调度系统新能力

    2022 年 4 月 22 日,Apache DolphinScheduler 正式宣布 3.0.0 alpha 版本发布!此次版本升级迎来了自发版以来的最大变化,众多全新功能和特性为用户带来新的体验 ...

  4. 【转】Beyond Compare for Mac中文版震撼来袭!-- 不错

    原文网址:http://mt.sohu.com/20160329/n442685522.shtml Beyond Compare想必大家都知道,它是一个专业级的一个文件对比工具,由于工作原因,我们会经 ...

  5. eoLinker上线两周年+ AMS V4.0 发布:全新UI界面,带来领先的API开发管理解决方案!

    2018年7月,eoLinker 发布了<eoLinker AMS 2018年年中用户调研问卷>,前后经历一周的时间,共收集到超过1000份有效调查问卷.超过300个有效改进意见. eoL ...

  6. Android全新UI编程 - Jetpack Compose 超详细教程

    1. 简介 Jetpack Compose是在2019Google i/O大会上发布的新的库.Compose库是用响应式编程的方式对View进行构建,可以用更少更直观的代码,更强大的功能,能提高开发速 ...

  7. 红旗 Linux 桌面操作系统11来了:支持国产自主CPU,全新UI风格设计,兼容面广...

    链接:https://reurl.cc/g8ke9X 红旗Linux桌面操作系统11将于1月10日开放预览版的下载,新版本具有良好的硬件兼容,支持多款国产自主CPU品牌,同时还具有丰富的外设支持及海量 ...

  8. JetBrains IDE全新UI预览版来了,要做简洁与强大兼顾的IDE

    5月23日,JetBrains发布了一篇博文,透露他们正在实现一套全新的界面界面. 他们认为目前行业中的用户界面趋势已经发生了演变,很多新用户认为JetBrains IDE的界面过于笨重,而且过时.所 ...

  9. ZBrush中文版ZBrushCore震撼来袭

    北京时间2016年9月30日,Pixologic公司召开新闻发布会,宣布ZBrush精简版ZBrushCore正式发布.该版本不仅支持中文,还支持多国语言,包括法语.西班牙语等.简单点来说,ZBrus ...

  10. MTSC2019第五届中国移动互联网测试开发大会北京站震撼来袭!

    MTSC2019 暨第五届中国移动互联网测试开发大会(Mobile Testing Summit China)是由国内最大的测试开发技术社区之一 TesterHome 发起的行业会议,聚焦于软件测试及 ...

随机推荐

  1. 七、Doris Colocation Join

    Colocation Join 是在 Doris 0.9 版本中引入的新功能.旨在为某些 Join 查询提供本地性优化,来减少数据在节点间的传输耗时,加速查询. 1.基本理论 Join 的常见连接类型 ...

  2. docker 权限问题 Got permission denied while trying to connect to the Docker daemon socket at 。。。

    非root用户运行docker命令报如下错误 说明没有权限 haima@haima-PC:/usr/local/docker/docker_compose_efk$ docker ps -a Got ...

  3. Goland 的配置

    目录 下载安装 设置好go的系统环境变量 设置 GOROOT 设置 GOPATH 设置 MODULES 设置 工作面板里的字体缩放大小快捷键 安装主题包 安装中文中包 Redis Mannager 读 ...

  4. golang、JS AES(CBC模式)加密解密兼容

    目录 golang.JS AES(CBC模式)加密解密兼容 golang代码 前端javascript的代码 aes.js 原文地址: https://www.cnblogs.com/haima/p/ ...

  5. 显示器AVG、DVI、HDMI、DisplayPort、Type-C、雷电接口

    在近十年的发展,显示设备的接口发生了巨大的改变.以前使用比较多的是蓝色VGA接口,接著出现了白色的DVI接口,当遇到不同接口时,还得买转接头进行转接.后来,又有了HDMI等接口,现在则出现DP和USB ...

  6. MSP 通过 Splashtop SOS 远程支持非托管设备

    RMM 是 MSP 的绝佳工具.它们使 MSP 可以通过集中控制台来管理其所有客户计算机,通常使他们能够远程访问任何计算机以提供远程支持. 但是,这样做的一个很大限制是--并非所有客户设备都在 MSP ...

  7. C 语言编程 — 高级数据类型 — void 类型

    目录 文章目录 目录 前文列表 void 类型 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> & ...

  8. C 语言编程 — 高级数据类型 — 共用体

    目录 文章目录 目录 前文列表 共用体 定义共用体 访问共用体成员 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本 ...

  9. AIRIOT物联网低代码平台如何配置Modbus RTU协议?

    MBRTU即MODBUS RTU的简称,MODBUS是OSI模型第7层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信.平台的MBRTU协议是建立在TCP协议之上的 ...

  10. linux获取docker容器中的文件路径怎么表示

    在Linux系统中,Docker容器中的文件路径与宿主机上的文件系统是隔离的,因此我们不能直接使用宿主机的文件系统路径来访问容器内的文件.但是,有几种方法可以让我们获取或操作Docker容器中的文件. ...