前言

断断续续折腾了近两周,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. 三:瑞芯微OK3399-C开发板

    场景一 给广告机加上一双智慧的眼睛,时刻关注这经过自己面前的每一个人,把他(她)们的性别.年龄.胖瘦.着装风格.经过频次.观看广告的时间.每个广告观看的人数等等一一记录下来,为广告机运营商.广告创业设 ...

  2. linux开发vue项目,不能热更新?

    只需要运行下面的命令即可: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo ...

  3. C语言:计算长方形面积问题

    #include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or a ...

  4. C语言:通讯录程序设计(多功能)

    回顾我的代码shi 通讯录程序设计 主函数 遇到的困难 补充标注说明(一定要看) 效果展示截图 结语 程序源代码 通讯录程序设计 作者前言:该通讯录作品是我大一的C语言结课作业,代码像shi山一样,之 ...

  5. IceRPC之调用管道Invocation pipeline与传出请求Outgoing request->快乐的RPC

    作者引言 .Net 8.0 下的新RPC 很高兴啊,我们来到了IceRPC之调用管道 Invocation pipeline与传出请求 Outgoing request->快乐的RPC, 基础引 ...

  6. bond网卡

    目录 一.bond概述 1.1.bond的优点 二.bond模式 2.1.mode=0 2.2.mode=1 2.3.mode=2 2.4.mode=3 2.5.mode=4 2.6.mode=5 2 ...

  7. 5款.NET开源、免费、功能强大的图表库

    LiveCharts2 LiveCharts2是一个.NET开源(MIT License).简单.灵活.交互式且功能强大的.NET图表.地图和仪表,现在几乎可以在任何地方运行如:Maui.Uno Pl ...

  8. 【题解】A18747.眼红的同学

    题目链接:眼红的同学 题干信息很简单,看到数据量之后就不简单了.在数据量小的时候可以使用双层循环暴力的方法来求答案.显然对于这道题而言O(n^2)是完全过不去的. 前置知识: 使用树状数组求逆序对 会 ...

  9. 手写Word2vec算法实现

    1. 语料下载:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 [中文维基百科语料] 2. ...

  10. CSS——圆角

    例子1: <!DOCTYPE html> <html lang="en"> <head> <style> div { width: ...