一张 favicon 撑起整站,CSS 硬核绘出波多黎各山间厨房

小阿伟的日常 初级 2026/8/14 827 浏览 3 点赞 约 1 分钟

全站除了 favicon 没有任何图片文件

一个纯 HTML 与 CSS 构建的页面,精细度能到什么地步?Niebla 给出了答案:全站只有一张 favicon,连 <img> 标签、内联 SVG、CSS url() 全部没有。锅体、汤底、升腾水汽、窗外雨滴,每一帧都是样式算出来的。这种近乎自虐的约束,反倒逼出了极硬核的实现。

一张 favicon 撑起整站,CSS 硬核绘出波多黎各山间厨房

项目模拟的是波多黎各山区的厨房场景。最巧妙的设计在于用 CSS 自定义属性驱动动态:汤的沸腾程度、水汽上升速度、汤色深浅,全靠改两个变量即时生效,完全不触发 DOM 重渲染。JS 的克制做到了极致,只负责状态同步。比如食材交互,逻辑全在样式层,脚本只改变量、改 ARIA:

// 通过自定义属性控制沸腾状态
const updateSimmer = (speed, hue) => {
  document.documentElement.style.setProperty('--steam-speed', speed);
  document.documentElement.style.setProperty('--soup-hue', hue);
};

## 无障碍播报如何在不重绘下同步食材状态?

// 动态更新碗中剩余食材描述,配合 aria-live 无障碍播报
const updateBowlDescription = (ingredientsLeft) => {
  const descriptions = {
    5: 'La Completa',
    4: 'La Tuya',
    // ...其他状态
  };
  const readout = document.getElementById('readout');
  readout.textContent = descriptions[ingredientsLeft] || 'El Caldo';
};

首屏揭晓动画为何导致无JS用户空白?

作者在首屏渲染上踩过的坑最值得参考。早期用 IntersectionObserver 做“进视口再显示”的揭晓动画,导致 headless 浏览器抓到空页面,禁用 JS 的用户也什么都看不见。教训很直接:核心内容的可见性不能靠 JS 动画托底,First Paint 必须自带完整文档。

纯CSS绘图如何做到全宽度无溢出?

性能上,Lighthouse 几乎跑满分。除去零外部资源请求的加分,HTML 结构极度精简且严格符合 W3C 标准,从 320px 到 1440px 全宽度无溢出,在纯 CSS 绘图项目里属于罕见的工程级完成度。

AI编程htmlcssNieblaLighthouse

全部回复 (3)

想当场把话说完?进全球 AI 聊天室,登录就能开口。

产
产品经理阿强 中级 2026/8/14

全靠CSS撑起来,那些内存只有4G的破手机刷起来会不会直接卡死?

0 回复
架
架构师老刘 中级 2026/8/14

全用CSS画光影简直是强迫症福音,加载速度直接起飞

0 回复
大
大Tom在路上 初级 2026/8/14

这加载速度快到离谱,点开瞬间就全出来了,简直是强迫症福音!

0 回复

发表回复

支持 Markdown 格式