发布于 2026-01-06 6 阅读
0

Almond.CSS:一套无类 CSS 样式表

Almond.CSS:一套无类 CSS 样式表

过去几周,我一直在做一个有趣的项目:一个无类 CSS 库*。

我知道严格来说它不能算作一个库,但为了方便起见,我就这么称呼它了,这样我就不用每次都写“一组无类 CSS 样式”了 :P

我们的目标是提供一套可以轻松应用于任何网站的样式,使其外观更加美观。并非要打造极致华丽的效果,但肯定比默认显示效果更好,并且尽可能在所有浏览器中都呈现最佳效果。

与其他项目(如 Bootstrap)不同,这是一个无类项目:所有样式都针对 HTML 标签,因此用户无需向其添加任何类/属性。

该项目的目标是:

  • 不使用类或 ID(仅使用标签选择器)。
  • 覆盖所有 HTML5 标签(或尽可能多的标签)。
  • 确保它与各种浏览器兼容(或尽可能兼容)。
  • 使其易于进行主题定制(通过使用 HSL 颜色和 CSS 变量)。
  • 确保响应性、可访问性和易用性
  • 构建轻量级版本(未压缩时为 17KB,但 gzip 压缩后为 3KB)。
  • 保持简洁而优雅(虽然这只是个人观点)。

在支持方面,我们决定放弃 IE11,专注于 Chrome、Edge、Firefox 和 Safari(包括移动版)。

结果

以下是结果演示,以及一些关于其中关键部分的说明。

主题

我们基于 CSS 变量和 HSL 颜色来实现主题设计。HSL 允许根据色相、饱和度和亮度三个参数定义颜色。使用 HSL 提供主色和辅助色,即可查看演示页面的自动变化。

默认主色为深浅蓝色,默认辅助色为中灰色。

除了颜色之外,还有更多参数可以更改,例如字体大小或粗细、边框圆角等。以下是一些开发者可以指定的值:

多变的 描述 默认值
--primaryH 原色色调值 210
--primaryS 原色饱和度值 50%
--primaryL 普鲁玛丽颜色亮度值 40%
--primary-bg 主色背景 白色的
--secondaryH 原色色调值 0
--secondaryS 原色饱和度值 0%
--secondaryL 普鲁玛丽颜色亮度值 13%
--secondary-bg 主色背景 白色的
--font-family 文本字体集 Helvetica、Arial、无衬线字体
--font-size-root 默认字体大小(根) 16像素
--font-weight-bolder 字体粗细值(加粗文本) 700
--font-weight-bold 字体粗细值(粗体文本) 400
--font-weight-normal 字体粗细值(普通文本) 200
--font-weight-thin 字体粗细值(细字) 100
--border-radius 边界半径 2像素

通用排版

默认字体我们选择了 Helvetica,备用字体为 Arial。它们都是网页安全字体,适用范围广,并且有多种字重可供选择(还可以自定义主题)。不过,默认字重可能有点太细了(尤其是在移动设备上)。

以下是一些元素的样式示例,以及一些根据其属性设置了特殊样式的链接:

Almond.CSS 中的内联元素
Almond.CSS 上的链接

形式元素

对于表单输入框,我们决定对所有不同类型的输入框进行不同的样式设置,通过添加图标来帮助用户更快地识别各个字段:

替代文字

此外,还要使用主色来表示活动元素,这有助于后续的主题化:

替代文字

您可以在另一篇文章中阅读有关如何创建交互式 HTML 输入的内容(示例与时间组件和动画有关,但它设置了执行类似操作的步骤)。

其他元素

有些元素是通用的,例如表格或按钮,我们需要将它们的样式设置为在所有浏览器中看起来相似:

替代文字

此外,还有一些元素,要在所有浏览器中设置相同的样式会很麻烦(例如滑块、进度条、输入文件等)。

对于后者,我们选择至少找到一些共同点,例如将相似的元素设置为相同的宽度/高度,或者调整宽度以匹配所有浏览器。

接下来会发生什么?

我想继续开发和扩展这个库(即使只是为了好玩)。稍微清理一下,重新组织一下。

例如,目前库的大部分空间都被交互式表单输入和图像占据了。我正在考虑提供两个版本的库:一个包含这些元素,另一个不包含(或者对第一个版本进行扩展)。

经过 gzip 压缩后差别不大;但如果只是进行压缩,文件大小就会从包含图片增加到 17KB,而从不包含图片减少到 9KB 以下。

此外,我还想添加一个扩展功能,添加一些类,从而实现一些有趣的交互功能和结果:例如不同类型的表格、“预打包”的结构……


你觉得怎么样?有什么反馈意见吗?欢迎提出任何建议 :)

文章来源:https://dev.to/alvaromontoro/almond-css-a-collection-of-class-less-css-styles-302f