色系: EN
Public · 技術讀者

四頁小站的架法

一份設定檔長出整個網站。喜好歸喜好,工程歸工程。

v1.0.02026-08-19 Mila Chen

這份文件講 mila-site 的架法。設計取捨(為什麼是水彩、為什麼有極光)在部落格那篇;這裡只談工程。

01架構總覽

Astro 靜態站,跑在 Cloudflare Pages 免費子網域,託管成本 0、網域成本 0。選 Astro 的理由很單純:預設零 JS、content collections 讓文章就是資料夾裡的 Markdown 檔、build 出來全是靜態檔案,沒有伺服器要顧。四頁的站,不需要更重的東西。

02一份設定檔長出整站樣式

整個站沒有任何一個顏色、字體寫死在元件裡。單一事實來源是一份 brand.json:色票、字體、深淺兩套模式、通路連結全在裡面。build 前一支腳本把它吐成 CSS variables 和 metadata,元件只認變數。

好處在改版時兌現 換色票、換字體、換 tagline,改一個 JSON 檔重 build 就完成。

這份骨架之後會泛化成模板:新品牌站等於一份新的 brand.json 加一個 content 目錄。

03深淺模式的工程做法

雙模式不是套個濾鏡。每個色票都有 light、dark 兩組值,連封面圖都是成對的兩張畫,瀏覽器只載當前模式那張。

狀態有三種:使用者手動選(data-theme 落在 html 上,存 localStorage)、跟隨系統(prefers-color-scheme)、以及 render 前的一段 inline script 先套主題,避免開頁閃白。

最容易漏的地方 CSS 這邊每個主題規則都要寫兩個 selector,才能同時蓋住「手動選深色」與「跟隨系統」兩條路;只寫一個,切換按鈕和系統設定就會互相打架。

04i18n:四頁的站不值得上框架

中英雙語,/ 繁中、/en/ 英文。沒用任何 i18n 框架:兩語文案集中在一個字典檔,路由手刻,文章 frontmatter 標 lang 就能單語出刊。評估過框架,結論是四頁的站,框架的抽象比問題本身大。

那什麼時候才值得上?我的判斷線是三條,踩到任何一條就重新評估:

  • 語言變三種以上。兩語是 if/else,三語開始是矩陣,字典檔會先撐不住。
  • 路由多到手刻出錯。頁面一多,hreflang、sitemap、語言 fallback 這些機械事就該交給框架,人手維護遲早漏。
  • 翻譯不再是一個人的事。要接翻譯流程、要 fallback 到預設語言、要追蹤哪篇還沒翻,那是框架的主場。

在那之前,每加一層抽象都是在替不存在的問題付利息。

05動效工程:讓極光跨頁活著

動效的目標只有一個:整站有極光的流動感。工程上三件事:

  • 換頁用 View Transitions 柔接;背景極光層掛 transition:persist,換頁時元素原封不動延續,動畫不重啟。這個不加,每次換頁極光就閃斷一次。
  • 捲動漸入用 IntersectionObserver,而且加了保險絲:2.5 秒內沒觸發就強制全部顯示。動效失效可以接受,內容隱形不可以。
  • prefers-reduced-motion 一開,全部靜止。

動效的紀律 動態要慢要輕,一次只做一種隱喻(極光)。第一版背景疊彩色霧,參數上有動、視覺上等於零,砍掉重做才變成現在的光影。

06圖的管線

封面極光是生圖模型產的,風格靠錨點不靠運氣:每次生圖都附上自己的水彩畫當參考圖,配同一組風格詞,產出才會是同一家族。出門前一律用 PIL 重存,metadata 全清。生圖走訂閱額度、零 API 費,這條管線值得單獨寫一篇。

← 返回上一篇:這個站為什麼長這樣