[{"data":1,"prerenderedAt":44},["ShallowReactive",2],{"category-前端":3},{"name":4,"posts":5},"前端",[6,19,28,36],{"path":7,"title":8,"description":9,"date":10,"updated":11,"tags":12,"category":4,"cover":16,"draft":17,"pinned":17,"featured":18},"\u002Fposts\u002Fview-transitions","View Transitions 不是动画库","用它做页面切换、做主题扩散、做列表到详情的共享元素过渡。它真正的价值不是\"让页面动起来\"，而是让你不必手动管理进入和离开两套状态。","2025-09-18",null,[13,14,15],"动画","浏览器","CSS","\u002Fimages\u002Fcovers\u002Fview-transition.png",false,true,{"path":20,"title":21,"description":22,"date":23,"updated":11,"tags":24,"category":4,"cover":11,"draft":17,"pinned":17,"featured":17},"\u002Fposts\u002Fself-hosted-fonts","自托管字体的一年","从 Google Fonts 换成自托管，从自托管换成子集化分片。聊聊为什么一个中文字体能从 25MB 变成实际加载 180KB。","2025-08-08",[25,26,27],"字体","性能","中文",{"path":29,"title":30,"description":31,"date":32,"updated":11,"tags":33,"category":4,"cover":11,"draft":17,"pinned":17,"featured":17},"\u002Fposts\u002Fno-loading-feel","无加载不是速度，是连续感","一个 300ms 的白屏比一个 800ms 的骨架屏更让人焦虑。这篇讲怎么用 SSG、预取和 view transition 把页面跳转做成「一瞬间的事」。","2025-05-15",[26,34,35],"体验","Nuxt",{"path":37,"title":38,"description":39,"date":40,"updated":11,"tags":41,"category":4,"cover":11,"draft":17,"pinned":17,"featured":17},"\u002Fposts\u002Fcss-variables-as-api","我把 CSS 变量当成了 API","设计 token 写进配置文件，构建期编译成 CSS 变量，组件只读变量。这套做法让「改一处，全站生效」从口号变成了构建期保证。","2025-04-20",[15,42,43],"设计系统","构建",1794113902396]