Tailwind CSS v4.0 发布

Holy shit it's actually done !
1 月 22 日,Tailwind CSS 正式发布了 4.0 版本,针对性能和灵活性进行了优化,重新构想了配置和定制体验,并充分利用了 Web 平台提供的最新进展。
- 新的高性能引擎- 完整构建速度提高 5 倍,增量构建速度提高 100 倍以上 - 以微秒为单位。
- 专为现代网络而设计
@property— 基于诸如级联层、使用、注册的自定义属性等尖端 CSS 功能构建color-mix()。 - 简化安装- 更少的依赖项、零配置,并且只需 CSS 文件中的一行代码。
- 第一方 Vite 插件——紧密集成,实现最高性能和最低配置。
- 自动内容检测——您的所有模板文件都会被自动发现,无需配置。
- 内置导入支持——无需额外的工具即可捆绑多个 CSS 文件。
- CSS 优先配置——重新构想的开发人员体验,您可以直接在 CSS 中自定义和扩展框架,而不是使用 JavaScript 配置文件。
- CSS 主题变量——所有设计令牌都公开为原生 CSS 变量,因此您可以在任何地方访问它们。
- 动态效用值和变体——停止猜测间距尺度中存在什么值,或者扩展诸如基本数据属性之类的配置。
- 现代化的 P3 调色板——重新设计的、更生动的调色板,充分利用了现代显示技术。
- 容器查询——根据容器大小对元素进行样式设置的一流 API,无需插件。
- 新的 3D 变换实用程序— 直接在 HTML 中变换 3D 空间中的元素。
- 扩展渐变 API — 径向和圆锥渐变、插值模式等。
- @starting-style 支持——您可以使用此新变体来创建进入和退出转换,而无需 JavaScript。
- not-* variant — 仅当元素与另一个变体、自定义选择器或媒体或功能查询不匹配时才设置元素样式。
- 更多新实用程序和变体
color-scheme— 包括对、、field-sizing复杂阴影inert等的支持。
- 专为现代网络而设计
立即开始使用 Tailwind CSS v4.0,将其安装在新项目中,或直接在其安装在新项目中,或直接在其安装在新项目中,或直接在其安装在新项目中,或直接在其安装在新项目中,或直接在Tailwind Play上的浏览器中使用它。
对于现有项目,我们发布了全面的升级指南并构建了自动升级工具,以便您尽快、轻松地获得最新版本。
新型高性能引擎
Tailwind CSS v4.0 是对该框架的彻底重写,它吸收了我们多年来对架构的所有了解,并对其进行了优化,使其尽可能快。
当我们对自己的项目进行基准测试时,我们发现完全重建速度提高了 3.5 倍以上,增量构建速度提高了 8 倍以上。
以下是我们对 Tailwind CSS v4.0 与Catalyst进行基准测试时看到的平均构建时间:
| v3.4 | 4.0版 | 改进 | |
|---|---|---|---|
| 完整构建 | 378毫秒 | 100毫秒 | 3.78x |
| 使用新 CSS 进行增量重建 | 44毫秒 | 5毫秒 | 8.8x |
| 无需新 CSS 的增量重建 | 35毫秒 | 192微秒 | 182x |
最令人印象深刻的改进是增量构建,实际上不需要编译任何新的 CSS — 这些构建速度快 100 倍以上,并在几微秒内完成。而且你在项目上工作的时间越长,你遇到的这些构建就越多,因为你只是使用以前已经使用过的类,例如flex、col-span-2或font-bold。
专为现代网络而设计
自我们发布 Tailwind CSS v3.0 以来,平台已经有了很大的发展,而 v4.0 充分利用了其中的许多改进。
@layer theme, base, components, utilities;
@layer utilities {.mx-6 {margin-inline: calc(var(--spacing) * 6);}.bg-blue-500\/50 {background-color: color-mix(in oklab, var(--color-blue-500) 50%, transparent);}
}
@property --tw-gradient-from {syntax: "<color>";inherits: false;initial-value: #0000;
} 我们正在利用以下现代 CSS 功能:
- 原生级联层——让我们比以往更好地控制不同样式规则之间的交互方式。
- 注册的自定义属性- 可以执行诸如动画渐变之类的操作,并显著提高大页面的性能。
- color-mix() — 它让我们调整任何颜色值的不透明度,包括 CSS 变量和
currentColor。 - 逻辑属性——简化 RTL 支持并减少生成的 CSS 的大小。
其中许多功能甚至从内部简化了 Tailwind,减少了出现错误的面积,并使我们更易于维护框架。
简化安装
我们在 v4.0 中大大简化了设置流程,减少了步骤数并删除了大量样板代码。
npm i tailwindcss @tailwindcss/postcss; export default {plugins: ["@tailwindcss/postcss"],
}; @import "tailwindcss"; 通过我们对 v4.0 中此流程所做的改进,Tailwind 比以往更加轻量:
- 只需一行 CSS — 无需更多
@tailwind指令,只需添加@import "tailwindcss"并开始构建。- 零配置——您可以开始使用框架而无需配置任何内容,甚至不需要配置模板文件的路径。
- 无需外部插件- 我们
@import为您捆绑开箱即用的规则,并在后台使用Lightning CSS进行供应商前缀和现代语法转换。
当然,每个项目你只需要经历一次这样的过程,但是当你每个周末开始和放弃不同的副项目时,这个过程就会累积起来。
第一方 Vite 插件
如果您是 Vite 用户,现在可以使用 Tailwind@tailwindcss/vite而不是 PostCSS 来集成:
import { defineConfig } from "vite";
import tailwindcss from "@tailwindcss/vite";
export default defineConfig({plugins: [tailwindcss(),],
}); Tailwind CSS v4.0 用作 PostCSS 插件时速度非常快,但使用 Vite 插件可以获得更好的性能。
自动内容检测
您知道在 Tailwind CSS v3 中总是需要配置那个烦人的content数组吗?在 v4.0 中,我们想出了一系列启发式方法来自动检测所有这些东西,这样您根本不必进行配置。
例如,我们会自动忽略.gitignore文件中的任何内容,以避免扫描依赖项或不受版本控制的生成文件:
/node_modules
/coverage
/.next/
/build 我们还会自动忽略所有二进制扩展名,如图像、视频、.zip 文件等。
如果您需要明确添加默认排除的源,您可以随时使用@source指令在 CSS 文件中将其添加:
@import "tailwindcss";
@source "../node_modules/@my-company/ui-lib"; 该@source指令在底层使用相同的启发式方法,因此它也会排除二进制文件类型,而无需您指定要明确扫描的所有扩展名。
在我们的新文档中了解有关在源文件中检测类的更多信息。
内置导入支持
在 v4.0 之前,如果您想内联其他 CSS 文件,@import您必须配置另一个插件来postcss-import为您处理它。
现在我们可以立即处理这个问题,所以您不需要任何其他工具:
export default {plugins: ["postcss-import","@tailwindcss/postcss",],
}; 我们的导入系统是专为 Tailwind CSS 构建的,因此我们还可以通过将其与我们的引擎紧密集成使其运行得更快。
CSS 优先配置
Tailwind CSS v4.0 中最大的变化之一是从使用 JavaScript 配置项目转变为使用 CSS 配置项目。
您无需使用tailwind.config.js文件,而是可以直接在导入 Tailwind 的 CSS 文件中配置所有自定义项,这样就少了一个需要担心的项目文件:
@import "tailwindcss";
@theme {--font-display: "Satoshi", "sans-serif";--breakpoint-3xl: 1920px;--color-avocado-100: oklch(0.99 0 0);--color-avocado-200: oklch(0.98 0.04 113.22);--color-avocado-300: oklch(0.94 0.11 115.03);--color-avocado-400: oklch(0.92 0.19 114.08);--color-avocado-500: oklch(0.84 0.18 117.33);--color-avocado-600: oklch(0.53 0.12 118.34);--ease-fluid: cubic-bezier(0.3, 0, 0, 1);--ease-snappy: cubic-bezier(0.2, 0, 0, 1);/* ... */
} 新的 CSS-first 配置允许您执行文件中几乎所有可以执行的操作tailwind.config.js,包括配置设计令牌、定义自定义实用程序和变体等。
要了解其工作原理,请阅读新的主题变量文档。
CSS 主题变量
Tailwind CSS v4.0 采用您的所有设计令牌并默认将它们作为 CSS 变量提供,因此您只需使用 CSS 即可在运行时引用所需的任何值。
使用前面的示例@theme,所有这些值都将作为常规自定义属性添加到您的 CSS 中:
:root {--font-display: "Satoshi", "sans-serif";--breakpoint-3xl: 1920px;--color-avocado-100: oklch(0.99 0 0);--color-avocado-200: oklch(0.98 0.04 113.22);--color-avocado-300: oklch(0.94 0.11 115.03);--color-avocado-400: oklch(0.92 0.19 114.08);--color-avocado-500: oklch(0.84 0.18 117.33);--color-avocado-600: oklch(0.53 0.12 118.34);--ease-fluid: cubic-bezier(0.3, 0, 0, 1);--ease-snappy: cubic-bezier(0.2, 0, 0, 1);/* ... */
} 这样可以轻松地将这些值重用为内联样式或将它们传递给Motion等库来为其设置动画。
动态效用值和变体
我们简化了许多实用程序和变体在 v4.0 中的工作方式,有效地允许它们接受某些类型的任意值,而无需任何配置或降低到任意值语法。
例如,在 Tailwind CSS v4.0 中,您可以创建任意大小的网格:
<div class="grid grid-cols-15"><!-- ... -->
</div> 您还可以定位自定义布尔数据属性,而无需定义它们:
<div data-current class="opacity-75 data-current:opacity-100"><!-- ... -->
</div> 甚至间距实用程序(例如px-*、mt-*、w-*、h-*等)现在都是从单个间距比例变量动态派生而来的,并且接受任何开箱即用的值:
@layer theme {:root {--spacing: 0.25rem;}
}
@layer utilities {.mt-8 {margin-top: calc(var(--spacing) * 8);}.w-17 {width: calc(var(--spacing) * 17);}.pr-29 {padding-right: calc(var(--spacing) * 29);}
} 如果我们与 v4.0 一起发布的升级工具注意到您使用了不再需要的任意值,它甚至会自动为您简化大多数这些实用程序。
现代化的 P3 调色板
我们将整个默认调色板从 升级到rgb,oklch利用更宽的色域使以前受 sRGB 色彩空间限制的地方的色彩更加鲜艳。
我们试图保持所有颜色之间的平衡与 v3 中的相同,因此即使我们全面刷新了内容,在升级现有项目时也不会感觉像是重大变化。
容器查询
我们已将容器查询支持纳入 v4.0 的核心,因此您不再需要@tailwindcss/container-queries插件:
<div class="@container"><div class="grid grid-cols-1 @sm:grid-cols-3 @lg:grid-cols-4"><!-- ... --></div>
</div> 我们还使用新变体添加了对最大宽度容器查询的支持@max-*:
<div class="@container"><div class="grid grid-cols-3 @max-md:grid-cols-1"><!-- ... --></div>
</div> 与我们的常规断点变体一样,您也可以堆叠@min-*和@max-*变体来定义容器查询范围:
<div class="@container"><div class="flex @min-md:@max-xl:hidden"><!-- ... --></div>
</div> 在我们全新的容器查询文档中了解更多信息。
新的 3D 变换实用程序
我们最终添加了用于进行 3D 转换的 API,例如、、、rotate-x-*等等。rotate-y-*scale-z-*translate-z-*
<div class="perspective-distant"><article class="rotate-x-51 rotate-z-43 transform-3d ..."><!-- ... --></article>
</div> 查看更新的、、transform-style和文档以开始使用。rotateperspectiveperspective-origin
扩展渐变 API
我们在 v4.0 中添加了大量新的渐变功能,因此您无需编写任何自定义 CSS 即可实现更精美的效果。
线性渐变角度
线性渐变现在支持角度作为值,因此您可以使用类似实用程序bg-linear-45在 45 度角上创建渐变:
<div class="bg-linear-45 from-indigo-500 via-purple-500 to-pink-500"></div> 您可能注意到我们也已重命名bg-gradient-*为bg-linear-*— 您很快就会明白为什么!
渐变插值修饰符
我们添加了使用修饰符来控制渐变的颜色插值模式的功能,因此像bg-linear-to-r/srgb使用 sRGB 进行插值的类,以及bg-linear-to-r/oklch使用 OKLCH 进行插值的类:
<div class="bg-linear-to-r/srgb from-indigo-500 to-teal-400">...</div>
<div class="bg-linear-to-r/oklch from-indigo-500 to-teal-400">...</div> from-*当色轮上的和 颜色相距较远时,使用 OKLCH 或 HSL 等极地色彩空间可以产生更加生动的渐变to-*。我们在 v4.0 中默认使用 OKLAB,但您始终可以通过添加其中一个修饰符来使用不同的色彩空间进行插值。
圆锥渐变和径向渐变
我们添加了用于创建圆锥渐变和径向渐变的新实用程序bg-conic-*:bg-radial-*
<div class="size-24 rounded-full bg-conic/[in_hsl_longer_hue] from-red-600 to-red-600"></div>
<div class="size-24 rounded-full bg-radial-[at_25%_25%] from-white to-zinc-900 to-75%"></div> 这些新实用程序与现有的from-*、via-*和to-*实用程序一起工作,让您可以像创建线性渐变一样创建圆锥渐变和径向渐变,并包含用于设置颜色插值方法的修饰符和用于控制渐变位置等细节的任意值支持。
@starting-style 支持
新starting变体增加了对新 CSS@starting-style功能的支持,使得在元素首次显示时转换元素属性成为可能:
<div><button popovertarget="my-popover">Check for updates</button><div popover id="my-popover" class="transition-discrete starting:open:opacity-0 ..."><!-- ... --></div>
</div> 有了@starting-style,您终于可以在页面上为元素添加动画效果,而无需任何 JavaScript。浏览器支持可能尚未完全实现,但我们正在接近目标!
非-* 变体
我们添加了一个新的not-*变体,最终增加了对 CSS:not()伪类的支持:
<div class="not-hover:opacity-75"><!-- ... -->
</div> .not-hover\:opacity-75:not(*:hover) {opacity: 75%;
}
@media not (hover: hover) {.not-hover\:opacity-75 {opacity: 75%;}
} 它具有双重功能,还允许您否定媒体查询和@supports查询:
<div class="not-supports-hanging-punctation:px-4"><!-- ... -->
</div> .not-supports-hanging-punctation\:px-4 {@supports not (hanging-punctation: var(--tw)) {padding-inline: calc(var(--spacing) * 4);}
} 查看新not-*文档以了解更多信息。
更多新实用程序和变体
我们还在 v4.0 中添加了大量其他新实用程序和变体,包括:
- 新功能 inset-shadow-*和inset-ring-*实用程序——可以在单个元素上堆叠最多四层框阴影。
- 新的 field-sizing实用程序——无需编写一行 JavaScript 即可自动调整文本区域的大小。
- 新的 color-scheme实用程序——这样你最终就可以摆脱黑暗模式下那些丑陋的浅色滚动条。
- 新的 font-stretch实用程序——用于仔细调整支持不同宽度的可变字体。
- 新的 inert变体——用于设置标有属性的非交互式元素的样式
inert。 - 新的 nth-*变种——做一些你最终会后悔的聪明事情。
- 新的 in-*变体— 与 非常相似
group-*,但不需要类group。 - 支持 :popover-open——使用现有
open变体来定位打开的弹出窗口。 - 新的 后代变体— 用于设计所有后代元素的样式,无论是好是坏。
查看所有这些功能的相关文档以了解更多信息。
相关文档
Tailwind CSS v4.0 - Tailwind CSS
Tailwind CSS - Rapidly build modern websites without ever leaving your HTML.
相关文章:
Tailwind CSS v4.0 发布
Holy shit its actually done ! 1 月 22 日,Tailwind CSS 正式发布了 4.0 版本,针对性能和灵活性进行了优化,重新构想了配置和定制体验,并充分利用了 Web 平台提供的最新进展。 新的高性能引擎- 完整构建速度提高 5 …...
pandas基础:文件的读取和写入
文件的读取和写入 读取csv文件 csv文件: name,age,city Alice,25,New York Bob,30,Los Angelesread_csv(filename) header:如 何处理文件的第一行。header0将第一行作为列名,headerNone表示文件中没有列名,所有行都是数据。 im…...
【MySQL — 数据库增删改查操作】深入解析MySQL的create insert 操作
数据库CRUD操作 1 CRUD简介 CURD是对数据库中的记录进行基本的增删改查操作: 2. Create 新增 语法 INSERT [INTO] table_name[(column [,column] ...)] VALUES(value_list)[,(value_list)] ... # value 后面的列的个数和类型,要和表结构匹配…...
每日OJ_牛客_小红的子串_滑动窗口+前缀和_C++_Java
目录 牛客_小红的子串_滑动窗口前缀和 题目解析 C代码 Java代码 牛客_小红的子串_滑动窗口前缀和 小红的子串 描述: 小红拿到了一个长度为nnn的字符串,她准备选取一段子串,满足该子串中字母的种类数量在[l,r]之间。小红想知道&…...
HTTP 配置与应用(局域网)
想做一个自己学习的有关的csdn账号,努力奋斗......会更新我计算机网络实验课程的所有内容,还有其他的学习知识^_^,为自己巩固一下所学知识,下次更新HTTP 配置与应用(不同网段)。 我是一个萌新小白…...
ultralytics 是什么?
ultralytics 是一个用于计算机视觉任务的 Python 库,专注于提供高效、易用的目标检测、实例分割和图像分类工具。它最著名的功能是实现 YOLO(You Only Look Once) 系列模型,特别是最新的 YOLOv8。 1. YOLO 是什么? YO…...
AI竞争:从技术壁垒到用户数据之争
标题:AI竞争:从技术壁垒到用户数据之争 文章信息摘要: AI市场呈现开放模型与封闭模型并存的双轨发展态势,但核心竞争力已从模型技术转向用户数据积累和使用习惯培养。商业模式正在多元化发展,从早期的价格战转向subsc…...
MySQL 主从复制(单组传统复制,GTID复制。双主复制)
案例环境 单组复制 master: 192.168.180.143 slave01:192.168.180.144 双组复制 master01:192.168.180.143 master02:192.168.180.144 案例过程 准备工作 关闭所有防火墙 setenforce 0 && systemctl stop firewa…...
python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖
【1】引言 前序学习了使用numpy创建单通道的灰色图像,并对灰色图像的局部进行了颜色更改,相关链接为: python学opencv|读取图像(九)用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 之后又学习了使用numpy创…...
vue3 中如何监听 props 中的值的变化
在 Vue 3 中,你可以使用 watch 函数来监听组件的 props 值的变化。watch 函数允许你观察一个或多个响应式数据源,并在这些数据源发生变化时执行回调函数。 以下是一个示例,展示了如何在 Vue 3 中使用 watch 来监听 props 中的值的变化&#…...
Scrapy之一个item包含多级页面的处理方案
目标 在实际开发过程中,我们所需要的数据往往需要通过多个页面的数据汇总得到,通过列表获取到的数据只有简单的介绍。站在Scrapy框架的角度来看,实际上就是考虑如何处理一个item包含多级页面数据的问题。本文将以获取叶子猪网站的手游排行榜及…...
hive 自动检测、自动重启、记录检测日志、自动清理日志
最终效果 定时检测hive运行状态,进程不存在或者进程存在但是不监听端口的hiveserver2,自动重新拉起每次检测脚本执行的日志都会保存在log目录下.check文件,每一个月一个文件每月15日,删除2月前的检测日志开启hive自带日志输出后&…...
HFSS同轴替换波端口
波端口仿真正常 将波端口换成内径内径0.3mm外径0.6mm同轴之后 结果很不对 换成下面的尺寸就好了...
【2024年华为OD机试】 (C卷,100分)- 素数之积(JavaScriptJava PythonC/C++)
一、问题描述 RSA 因数分解问题 题目描述 RSA 加密算法在网络安全世界中无处不在,它利用了极大整数因数分解的困难度。数据越大,安全系数越高。给定一个 32 位正整数,请对其进行因数分解,找出是哪两个素数的乘积。 输入描述 …...
【C++模板】:如何判断自定义类型是否实现某个函数
一、引子 偶尔我们会面对这样的尴尬的场景,我们需要显示的去判断在某个自定义类型中,是否已经提供了我们期待的API接口,以避免产生“莫须有”的错误。阁下该如何破解此问题! 这里,直接给出一种通用的方法,…...
基于微信小程序的汽车保养系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
电子应用设计方案102:智能家庭AI鱼缸系统设计
智能家庭 AI 鱼缸系统设计 一、引言 智能家庭 AI 鱼缸系统旨在为鱼类提供一个健康、舒适的生活环境,同时为用户提供便捷的管理和观赏体验。 二、系统概述 1. 系统目标 - 自动维持水质稳定,包括水温、酸碱度、硬度和溶氧量等关键指标。 - 智能投食&…...
【Elasticsearch】RestClient操作文档
RestClient操作文档 新增文档实体类API语法 查询文档删除文档修改文档批量导入文档小结 新增文档 将数据库中的信息导入elasticsearch中 以商品数据为例 实体类 定义一个索引库结构对应的实体。 Data ApiModel(description "索引库实体") public class ItemDoc{…...
内存条的构造、原理及性能参数
内存条的构造、原理及性能参数 一、内存条的构造1.1 外观结构1.1.1 芯片:大脑1.1.2 PCB板:骨架1.1.3 金手指:接口1.1.4 电容电阻:稳压、稳流1.1.5 防呆缺口:防错 1.2 内部层次结构 二、内存条的工作原理2.1 数据的“搬…...
鸿蒙模块概念和应用启动相关类(HAP、HAR、HSP、AbilityStage、UIAbility、WindowStage、window)
目录 鸿蒙模块概念 HAP entry feature har shared 使用场景 HAP、HAR、HSP介绍 HAP、HAR、HSP开发 应用的启动 AbilityStage UIAbility WindowStage Window 拉起应用到显示到前台流程 鸿蒙模块概念 HAP hap包是手机安装的最小单元,1个app包含一个或…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
