CSS 样式设计的演变史
为了更好的理解 Nue CSS,接下来一起看看过去几年 CSS 发生了什么变化。
BEM:需要从混乱中寻找秩序,包括:OOCSS、BEM 和 SMACSS 等等样式方案,开发人员迷失于 block-name__elem-name_mod-name_mod-val 的命名模式或基于 SMACSS 的 Bootstrap 的 600 不同的类名中。
CSS-in-JS方案:保证了干净的全局命名空间,同时诞生了众多 Vanilla Extract、Styled JSX 和 Emotion 框架。缺点也很明显、可以阅读我编写的相关 css-in-js 专栏。
Tailwind:内联样式:是一种以复制 / 粘贴的心态构建美观的用户界面的简单方法。 后端开发人员和初级前端开发人员能够在不了解 CSS 级联如何工作的情况下构建页面。
很多情况下,开发者都非常满意 CSS-in-JS 和 Tailwind ,但是缺点也很明显:
代码库体积臃肿:单个按钮比一个完整的、专业设计的网站具有更多的 CSS。同时,小的样式更改会触发大型编译链,在浏览器热重新加载之前可能会涉及数百个 JavaScript 文件和 NPM 模块。
代码不容易理解:基于复制、粘贴的模式代码更加难以理解,特别是团队间合作、甚至跨团队合作场景
内容、布局、样式和业务逻辑混杂:所有的一切都由 JavaScript 开发者负责,内容创作者、设计师和 CSS 开发人员很难甚至不可能参与其中。
什么是 Nue CSS
Nue CSS 是 Tailwind、BEM 和 CSS-in-JS 的更易于维护和扩展的替代方案,是一种编写和构建 CSS 的新方法。Nue CSS 采用一种全新的设计方法来构建出色的用户体验。
A more maintainable and scaleable alternative to Tailwind, BEM, and CSS-in-JS. It's new a way to write and structure your CSS. It takes a design approach to building great user/customer experiences.
设计基于设计系统
每个 Nue 项目都始于一个设计系统,设计系统是 “单一事实来源”。
设计系统实际上是一个简单的概念,在中心位置定义主外观和样式并让所有页面继承。 理想情况下,设计只是一个 CSS 文件。 以下是 Nue CSS 的三个示例,最终 CSS 体积都比单个 Catalyst 按钮小得多:
Nue 将设计传播到页面
Nue 始终确保设计一致地应用于网站上的所有页面和组件:
Nue 会根据页面所在的位置自动将正确的 CSS 文件绑定到页面, 无需使用 JS/CSS import 语句修改路径名。
设计系统由设计师和 UX 开发人员控制,设计与内容完全分离。
这样,非技术人员就可以创建内容,以便页面自动继承正确的设计,无法通过本地或内联样式来打破设计系统。
一种全新简约的方式来编写 vanilla CSS
系统设计越简单越好,如:颜色、字体粗细、元素、组件和变体越少越好。
简单意味着精益且组织良好的 CSS,易于维护和扩展。 出错的空间更小,没有全局命名空间问题,没有本地断点,也没有一致性问题。
关键思想是省略与样式相关的所有类名,并让外部 CSS 处理元素或组件的外观和样式。
命名元素和极简主义是齐头并进的。 名称越多,设计系统 API 就越复杂。 在大多数情况下,组件名称就应该是需要的全部命名:
<!-- 组件名称是唯一需要命名的地方 -->
<div class="gallery">
<figure>
<figure>
<figure>
...
</div>
不需要 CSS-in-JS 层
当一切都基于单一事实来源时,抛弃设计系统前面多余的 CSS-in-JS 层就很简单了,无论是 Tailwind、CSS Modules 还是 Vanilla Extract,从而使堆栈更简单:
这么做有诸多好处:
更加简单:使用 Nue 制作的网站的 CSS 极少。例如,一个基本的 Tailwind 按钮比一个完整的 Nue 驱动的网站有更多的样式。
易于维护:三个 Nue 网站中的 CSS 总量等于单个 Tailwind Catalyst 按钮的大小。
易于控制:随着网站的发展,设计系统驱动的网站保持精简
可以通过下面命令体验 Nue 热重载和现代 CSS 的强大功能:
// 安装 Bun 运行时
curl -fsSL https://bun.sh/install | bash
// 安装 Nue 框架
bun install nuekit --global
// 实例化 Nue 模板
bun create nue@latest
更多关于 Nue CSS 的理论和用法可以参考文末资料,本文不再过多展开。
https://nuejs.org/blog/introducing-nue-css/
https://nuejs.org/docs/
https://thenewstack.io/dev-news-a-nue-frontend-dev-tool-panda-and-bun-updates/
3
为您推荐
在当今前端开发领域,CSS框架扮演着至关重要的角色,它们不仅简化了样式编写,也提高了开发效率。Bootstrap与Tailwind CSS作为两个备受瞩目的框架,各自拥有独特的特点与适用场景,开发者在项目启动之初,往往会面临..
JavaScript开发人员倾向于寻找可用于机器学习模型训练的JavaScript框架。下面是一些机器学习算法,基于这些算法可以使用本文中列出的不同JavaScript框架来模型训练:简单的线性回归多变量线性回归逻辑回归朴素贝叶斯..
BotSharp 是一个开源的、基于 .NET 平台的 AI 聊天机器人框架,旨在简化构建智能对话系统的过程。它主要通过自然语言处理(NLP)技术,帮助开发者构建具备语言理解和对话能力的应用。BotSharp 提供了丰富的功能和扩..
在游戏开发领域,.NET 框架因其强大的功能和灵活性而广受欢迎。对于希望使用 .NET 进行游戏开发的开发者来说,了解可用的框架是至关重要的。以下是一些流行的 .NET 游戏开发框架:1. Unity: 尽管 Unity 主要使用 C# ..
项目概述PluginCore 是一个基于 ASP.NET Core 的轻量级插件框架,旨在简化插件的集成与管理。通过最少的配置,开发者可以快速集成并专注于业务逻辑的开发。它支持动态 WebAPI、插件隔离与共享、前后端分离、热插拔等..
.NET 框架和 CLR(公共语言运行时,Common Language Runtime)共同构成了一个应用程序运行和开发的环境,为多种编程语言提供跨平台支持、内存管理、异常处理、安全性、以及其他服务。它们各自的工作原理如下:.NET F..
编者按:考虑到英文原文的长度以及可读性,十大前端开发框架将分成上下两部分呈现给大家。上半部分着重讲的是Bootstrap家族框架,第二节将会跟大家分享更多其他的框架。随着互联网的不断成熟以及我们越来越多的用各..
选择跨平台 UI 框架取决于你的项目需求、目标平台、开发团队的技能和框架的特点。以下是 MAUI、Avalonia 和 Flutter 的比较,帮助你做出合适的选择。1. .NET MAUI (Multi-platform App UI)微软推出的跨平台框架,可..
尤雨溪和他的虚空帝国:VoidZero,一场前端的创世纪!2024年初秋,一个名字,VoidZero,如同代码中突然插入的一行神秘指令,瞬间扰乱了前端世界的平静。而这行指令的编写者,正是前端界的传奇,Vue.js之父—&md..
.NET 爱好者!我刚刚偶然发现了一个非常酷的新 PR,它被合并到 .NET 运行时存储库中,我想分享一个例子。希望您能为新的 .NET 版本大肆宣传!在即将到来的 .NET 9 版本中,我们预计会有一个名为 .它在这里让您的异步..
数据库交互是几乎所有应用程序不可或缺的一部分,开发者们常常需要对数据库进行各种操作,包括插入、更新、删除和查询等。然而,在开发过程中直接对真实数据库进行操作不仅耗时耗力,还可能带来数据一致性和安全性的..
DockerUI 是由国内开发者打造的一款优秀的 Docker 可视化管理工具。该工具拥有简洁直观的UI界面,可以轻松进行Docker主机管理、集群管理,以及Docker任务的编排等操作。DockerUI不仅展示了资源利用率、系统信息和更..
我们从下面这幅图开始,下图显示了三种渲染模式,分别称之为静态SSR、交互式SSR(即之前的BlazorServer)、交互式CSR(即之前的BlazorWasm)。还有一种渲染模式BlazorHybrid,稍后说。一、先浅层理解一个图例静态SSR:经..
CSS设计模式主要包括OOCSS、SMACSS和BEMCSS等。以下是对这些模式的具体介绍:OOCSS:面向对象的CSS,旨在编写高可复用、低耦合和高扩展的CSS代码。它将抽象(结构)和实现(样式)分离,抽离公共代码,以提高代码的..
不论是在外出差,还是在家临时办公,现在很多设备携带起来都不是那么方便,在这种情况下,有一个轻巧而高效的操作系统环境就显得格外关键。今天,要给大家介绍一款超级实用的便携式系统启动盘,凭借其独特功能和卓越..
.NET Framework并未完全被淘汰,但它的某些版本确实已经停止支持。微软在2023年11月10日停止了对.NET Framework 4.8之前的版本的支持。这一决策意味着使用这些旧版本的应用程序将不再获得安全更新和其他维护,从而可..
单元测试是确保代码质量和可靠性的重要手段。当我们的代码依赖于外部系统、数据库或第三方服务时,编写有效的单元测试可能会变得复杂且耗时。为了简化这一过程,模拟(Mocking)技术应运而生。在 .NET 生态系统中,M..
在网页设计和开发中,CLS(Cumulative Layout Shift)是指页面布局的累计偏移量。当一个用户与页面互动时,如果页面的某些元素突然改变位置或大小,导致整个布局发生偏移,就会产生布局偏移。这种偏移可能会影响用户..
在 Angular 单元测试中,我们经常需要模拟异步操作,比如 setTimeout。提高测试速度: 真实环境下的 setTimeout 会阻塞测试,导致测试运行时间过长。确保测试的可靠性: 模拟 setTimeout 可以让我们更好地控制异步操..
直接给 sessionStorage 加锁是不可能的。sessionStorage 的本质: sessionStorage 是浏览器提供的一种用于在当前浏览器会话中存储数据的机制。它存储在客户端,数据仅在当前浏览器窗口或标签页中有效。加锁的必要性..