
精选 2026 年 8 月 31 日至 9 月 14 日的 7 个前端创意 Demo,拆解 WebGPU/TSL 单 Pass 材质、顶点求导管线与原生 CSS 锚点如何把渲染成本压进底层架构。
position-anchor 的文本紧贴,创意的实现路径变得更加轻盈且结构化。| Demo | 来源与日期 | 核心技术栈 | 核心看点 |
|---|---|---|---|
| Decathlon Yestalgia | Codrops,2026-09-12 1 | piecesjs(Web Components)、Tailwind v4、GSAP、Lenis、Rive、Tempus | 随身听物理卡入交互、声明式 HTML 滚动时间线与视口按需订阅 |
| Shrink-wrap Text | CodePen,2026-09-11 2 | 原生 CSS(position-anchor、anchor-size、text-wrap: balance) | 利用文本行内锚点为多行折行文字自适应生成贴合气泡背景 |
| Still Generative Garden | Codrops,2026-09-09 3 | Three.js、WebGPU、TSL、Blender Geometry Nodes、VAT、MeshBVH | 水墨风格色调量化着色、双阴影贴图与 DataTexture 动态实例化 |
| Names into Digital Architecture | Codrops,2026-09-09 4 | Three.js、Line Geometry、离屏 Canvas 遮罩、轮廓追踪、空间贝塞尔变形 | 动态提取用户输入文字的闭合轮廓,沿空间曲线生成金属机械塔架 |
| Infinite Liquid Glass Grid | Codrops,2026-09-08 5 | Next.js、React Three Fiber v10、WebGPU、TSL、Motion、CSS3D | 零 Render Target 单 Pass 色散折射材质与球面伪无限包裹拖拽 |
| Drawing With Light | Codrops,2026-09-07 6 | Three.js WebGPU、TSL、Storage Buffer、Catmull-Rom、MRT Bloom | 废弃 CPU 管线重建,在顶点阶段数学求导法线并用半径函数实现生长 |
| Why Zero | Awwwards SOTD,2026-09-07 7 | GSAP、Three.js、Blender、Shader Interactions、Responsive Text Sprites | 游戏化地图控制器、长按推进手势与三维叙事滚动协同机制 |
<c-timeline>。工程师直接在 HTML 标签中配置动画起始位移、旋转角和视口进出触发点,组件解析属性后自动构建 GSAP 时间线 1:<c-timeline
cid="TimelineUID"
class="c-timeline"
data-scroll-item
data-timeline-from='{"x":"50%","y":"150%", "rotate":"-45deg"}'
data-timeline-to='{"x":"-50%","y":"-150%", "rotate":"45deg"}'
data-scroll-progress-call="progress,Timeline">
</c-timeline>IntersectionObserver 监听可见状态,进入视口时订阅动画帧,移出视口立即解除,离屏状态保持零 CPU 消耗。1position-anchor、anchor-name、anchor-size、place-self: anchor-center、text-wrap: balance / pretty)。2text-wrap: balance 或 pretty 能够显著改善段落孤字孤行问题,但多行折行后外层块级容器往往会残留大面积不规则的空白区域。如果尝试使用 inline-size: fit-content,容器尺寸通常只匹配最长单行或最长单词,无法自适应紧密包裹折行后的完整文本块。2<span>,并为其声明锚点名称;父级容器的伪元素则直接锚定该文本节点,读取其计算尺寸 2:.text {
anchor-name: --text;
display: inline;
}
.message::before {
content: "";
position: absolute;
z-index: -1;
position-anchor: --text;
place-self: anchor-center;
height: anchor-size(height);
width: anchor-size(width);
}ResizeObserver 或 Canvas measureText 频繁监听并更新 DOM 宽高的复杂逻辑,让排版响应回归渲染流水线本身。fwidth() 维持屏幕恒定像素宽度的细轮廓。为了防止花朵向自身投射杂乱阴影,系统部署了第二张仅接收花朵投影的独立深度贴图,该平行光源强度设为零,只负责写入深度值。3for (let k = 0; k <= SEG; k++) {
const u = k / SEG, m = ease(u), bump = Math.sin(Math.PI * u);
bezier(A, C, B, u, p);
bezierTangent(A, C, B, u, t);
const s = THREE.MathUtils.lerp(sA, sB, m) * (1 - state.pinch * bump);
const tw = THREE.MathUtils.lerp(rollA, rollB, m) + Math.PI * state.twist * (i % 2 ? -1 : 1) * bump;
const cosT = Math.cos(tw), sinT = Math.sin(tw);
for (let j = 0; j < N; j++) {
const x = THREE.MathUtils.lerp(ringA[j][0], ringB[j][0], m) * s;
const y = THREE.MathUtils.lerp(ringA[j][1], ringB[j][1], m) * s;
const rx = x * cosT - y * sinT, ry = x * sinT + y * cosT;
}
}MeshPhysicalMaterial 与二次缓冲区离屏渲染,这对多卡片阵列的显存带宽消耗极为严峻。作者选择了一条极度轻量化的材质着色路线:motionValue 对象中;渲染主循环每帧直接同步状态,避免高频拖拽引发整组件重新渲染。5MeshStandardNodeMaterial、Storage Buffer、Catmull-Rom 曲线样条、MRT 独立自发光 Bloom 管线。6THREE.TubeGeometry 会迫使 CPU 在每帧重新计算并上传巨大的网格顶点,极易引发严重掉帧。Drawing With Light 实验彻底颠覆了这套旧流程,借助 WebGPU 与 TSL,将几何构造的全部重担迁移至 GPU 顶点着色器中。6const sampleCurve = (t) => gpuPositionNode(clamp(t, 0, 1))
this.positionNode = Fn(() => {
const P = sampleCurve(aProgress)
const Pnext = sampleCurve(aProgress.add(EPS))
const Pprev = sampleCurve(aProgress.sub(EPS))
const delta = Pnext.sub(Pprev)
const tangent = delta.div(max(delta.length(), float(1e-6)))
const N = normalize(cross(upAxis, tangent))
const B = cross(tangent, N)
const radial = N.mul(cos(aAngle)).add(B.mul(sin(aAngle)))
vTubeNormal.assign(radial)
return P.add(radial.mul(radius))
})()
this.normalNode = Fn(() => transformNormalToView(normalize(vTubeNormal)))()radiusFn:在扫描进度前沿处管径设为零,随着进度推进平滑膨胀至目标粗细,使整个生长过程维持在完全不透明的 PBR 渲染管线中。6anchor-name 与 anchor-size() 即可将排版逻辑完整交还给浏览器渲染引擎,大幅降低交互抖动与重排成本。2blog.codepen.io
awwwards.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.