Hacker News 中文摘要

RSS订阅

98.css -- 98.css

文章摘要

98.css是一个CSS设计系统,用于构建类似Windows 98界面的复古UI。它依赖语义化HTML,不包含JavaScript,兼容各种前端框架,可通过unpkg或npm安装使用。

文章总结

好的,这是根据您提供的英文内容,用中文重新陈述的文章主要内容,保留了关键细节,并删减了与主题无关的部分。


98.css 设计系统:用 CSS 复刻 Windows 98 界面

98.css 是一个 CSS 库,旨在帮助开发者构建外观与 Windows 98 系统一致的网页界面。该库的核心设计理念是使用语义化的 HTML 标签,例如使用 <button> 来创建按钮,并为输入元素提供对应的 <label> 标签,以确保良好的可访问性。

核心特性:

  • 纯 CSS 方案:98.css 不包含任何 JavaScript,仅通过 CSS 样式化 HTML 元素,因此可以兼容任何前端框架。
  • 高度可定制:开发者可以在保持 98.css 外观风格的前提下,自由覆盖元素的样式,例如调整按钮的内边距或为输入标签添加颜色。
  • 快速上手:可以通过 CDN 链接(如 unpkg)或 npm 包管理器(npm install 98.css)快速引入。

组件详解:

  1. 按钮 (Button):标准按钮尺寸为 75px 宽、23px 高,具有凸起的外边框和内边框。通过添加 default 类可以应用额外样式,用于指示窗口的默认操作。按钮被点击时,边框会变为凹陷状态。禁用按钮的标签会呈现“褪色”效果。按钮获得焦点时,其内容区域内 4px 处会显示一个虚线边框。

  2. 复选框 (Checkbox):复选框由一个凹陷的面板和一个选中时出现的“勾选”图标组成。使用时,必须将 <input>id<label>for 属性关联。当需要分组排列多个复选框时,应将每个输入项包裹在带有 field-row 类的容器中,以保证间距一致。

  3. 选项按钮 (OptionButton / 单选按钮):通过 <input type="radio"> 实现。通过为同一组内的单选按钮设置相同的 name 属性来分组。同样,分组时建议使用 field-row 类容器。

  4. 分组框 (GroupBox):使用 <fieldset> 标签实现,用于将一组控件组织在一起。它拥有凹陷的外边框和凸起的内边框。可以通过在 <fieldset> 内放置 <legend> 元素来添加标签。

  5. 文本框 (TextBox):通过 <input type="text"> 实现。同样需要配合 <label> 标签使用。使用 field-row-stacked 类可以将标签置于输入框上方。多行文本输入则使用 <textarea> 元素。

  6. 滑块 (Slider):通过 <input type="range"> 实现。可以使用 has-box-indicator 类将默认的滑块指示器替换为方块指示器。将滑块包裹在带有 is-vertical 类的 <div> 中,可以使其垂直显示。

  7. 下拉框 (Dropdown):使用 <select><option> 元素实现。默认选中第一个选项,可以通过为某个 <option> 添加 selected 属性来更改默认值。

  8. 窗口 (Window)

    • 标题栏 (Title Bar):由 title-bartitle-bar-texttitle-bar-controls 三个类构建。关闭按钮使用 aria-label 属性来标识其功能,并对应有相应的样式类。通过添加 inactive 类可以使标题栏呈现“非活动”状态。
    • 窗口内容:使用 window 类为标题栏提供容器,并赋予凸起的外边框和内边框。窗口内容区域使用 window-body 类。
    • 状态栏 (Status Bar):使用 status-bar 类,其内部的文本子元素使用 status-bar-field 类。
  9. 树状视图 (TreeView):使用 <ul> 元素并添加 tree-view 类。通过嵌套 <ul> 元素(无需额外类)来创建树形结构,并显示虚线边框和缩进。可折叠的节点通过将子列表包裹在 <details> 元素内实现。

  10. 标签页 (Tabs):使用 <menu> 元素并设置 role="tablist" 属性,其子项 <li> 设置 role="tab" 属性。通过 JavaScript 管理标签页的切换,为当前激活的标签添加 aria-selected="true" 属性。添加 multirows 类可以创建多行标签。

  11. 表格视图 (TableView):使用 <table> 元素,并将其包裹在带有 sunken-panel 类的 <div> 中,以提供正确的边框和溢出容器。为 <table> 添加 interactive 类可在鼠标悬停时显示指针光标。为表格行添加 highlighted 类可表示选中状态。

  12. 进度指示器 (Progress Indicator):有两种类型:实心(默认)和分段式(需添加 segmented 类)。

  13. 字段边框 (Field borders):提供了 field-borderfield-border-disabledstatus-field-border 三个通用类,用于为工作区或动态内容等区域应用相应的边框和背景色样式。

许可与贡献:

98.css 采用 MIT 许可证。欢迎在 GitHub 上提交问题或拉取请求(Pull Request),项目维护者乐于提供代码审查,并希望将该项目打造成一个有趣的开源贡献起点。

评论总结

根据评论内容,总结如下:

主要观点与论据:

  1. 高度认可与怀旧情感(评分高,如2024年471分、2022年606分、2020年838分):

    • 评论者普遍对纯CSS复刻Win98界面表示喜爱,认为其“非常真实,几乎精确到像素”(bhouston: "Very authentic almost down to the pixel. I love it!")。
    • 怀旧情绪强烈:“看到这个让我莫名开心,怀旧真是有趣”(cush: "Seeing this makes me unreasonably happy. Funny how nostalgia is")。
  2. 技术赞赏

    • 纯CSS实现无JavaScript的界面效果令人印象深刻:“纯CSS无JS,边框和阴影技巧完美再现Win98斜面效果”(sshworld: "Impressie that this is pure CSS with no JavaScript. The border and box-shadow tricks... are really well done!")。
    • 作者自述该项目是“倦怠恢复项目”(jordanscales: "This was my burnout recovery project and holds a place near and dear to my heart")。
  3. UI设计反思

    • 对比现代UI,评论者认为Win98/XP的灰色按钮设计更清晰:“现代UI把灰色按钮直接隐藏,反而更令人困惑”(zemo: "the fact that we removed grayed out buttons... is one of the more confusing UI trends")。
    • 认为键盘鼠标UI自XP以来改进不大:“现代键盘鼠标UI并未真正改进,创新主要在触屏设备”(lambdaone: "modern keyboard-and-mouse UIs have not really improved that much... All the real innovation has been on touchscreen devices")。
  4. 改进建议与细节批评

    • 缺少分组框、单选按钮、复选框和下拉菜单(bhouston: "windows UIs loved group boxes and radio buttons and checkboxes... the dropdown is missing")。
    • 标签页示例中点击后位置未随机变化(pxtail: "tabs in the multirow tabs example do not change position randomly as they should")。

平衡性说明: - 正面评价占主导,强调怀旧价值和技术实现。 - 负面反馈集中于功能缺失和细节不完美,但语气温和,多为建设性建议。 - 评论者ranger_danger提供了大量相关复古CSS框架链接,显示社区对此类项目的广泛兴趣。