CSS 對話框產生器將一個網路對話框 API 取代為瀏覽器端工具,它能產生純 CSS 的訊息氣泡,並搭配一個三角形的 ::after 尾巴,方法是從一個零尺寸的方框出發,設定三條透明邊框和一條有顏色的邊框,並在即時預覽和複製出來的規則中執行同一套經過驗證的尺寸、顏色、位置和偏移量計算,因此你看到的幾何形狀就是實際部署出去的幾何形狀。

團隊在需要聊天訊息、工具提示或標註指引時,往往會求助於遠端 API,但每一個外部依賴都會增加一把金鑰、一個速率限制、一個網路節點和一個版本鎖定。本機產生器則用「在與網頁同一台機器上執行的輸出」來換掉這些:不需要 API 金鑰,沒有配額,不用上傳,不必建立帳號,也不會為了「一小段邊框、尺寸和定位」這個需求而新增依賴。

產生器會驗證兩個完整的六位數十六進位顏色、一個介於零到八十像素之間的圓角半徑,以及一個介於四到四十像素之間的三角形尾巴尺寸。空白的數值欄位會被拒絕,而不是悄悄被強制轉為零,這代表預覽永遠反映複製出來的規則能夠套用的值,正式版版面也永遠不需要去吸收一個模稜兩可的 border-width 或遺漏的權杖。

css speech bubble generator api alternative
css speech bubble generator api alternative

為何要用瀏覽器端工具取代對話框 API

對話框端點通常會回傳一個 base64 編碼的 SVG、一張 PNG 素材,或一段以雜湊為鍵的 CSS 字串,而這三種做法各自都帶有瀏覽器內產生器可以消除的摩擦成本。

  • 無需 API 金鑰:這個工具不需要權杖、計費關係或配額窗口就能產生該形狀。
  • 無網路節點:計算會在同一個事件迴圈中與網頁其他部分一起執行,因此延遲實際上為零,離線模式也能正常運作。
  • 無依賴:複製出來的規則只是一小段邊框、尺寸和定位,所以使用它的元件可以保持不依賴任何框架。
  • 無資料留存風險:不會上傳、不會記錄,也不會儲存任何東西,當氣泡會包裹使用者產生的內容時,這一點格外重要。
  • 無版本漂移問題:幾何形狀會在每次渲染時重新計算,因此使用該元件的專案中發生的權杖或版面異動,不會悄悄破壞來自不同部署的快取氣泡。

這些優點的代價是範圍。本工具專注於一個圓角表面和一個單一的直線指引。客製化偏移、多重指引、曲線尾巴、外框和陰影都刻意被排除在輸出之外,因為每一項都會改變預覽所承諾呈現的幾何形狀。

純 CSS 三角形尾巴是如何計算出來的

這個三角形是 W3C CSS Backgrounds and Borders Level 3 規範中所描述的經典 CSS 邊框技巧:給一個寬高皆為零的方框設定四條實心邊框,將不構成可見邊緣的邊框設為透明,剩下的那條邊框則填上與氣泡相符的顏色。根據 MDN 的 border-style 參考資料,相鄰的邊框會在角落共用一條對角線,正是這一點讓形狀呈現三角形輪廓而不是梯形。

產生器將四個尾巴方向各自對應到同一個範本,而這個對應關係是跨選項唯一會變動的部分:

選取的方向可見的投影設為透明的邊框有顏色的邊框位置偏移
下方在氣泡下方左與右方框下方,水平置中
上方在氣泡上方左與右方框上方,水平置中
左側在氣泡左邊上與下方框左邊,垂直置中
右側在氣泡右邊上與下方框右邊,垂直置中

數值範例解析:一個 14 像素的底部尾巴

選一個底部尾巴,尾巴尺寸設為 14 像素。產生器會將這個數字同時詮釋為氣泡下方的可見投影,以及三角形底邊的一半,因此計算非常直接:

  • 上邊框寬度 = 2 × 14 = 28 像素(有顏色的那一半)
  • 左邊框寬度 = 14 像素,右邊框寬度 = 14 像素,兩者皆設為透明
  • 下邊框寬度 = 0(沒有向下的邊緣,因為指引是朝那個方向投影出去的)
  • 偽元素上的 width 和 height = 0
  • position: absolute,置於氣泡下方,並設定 left: 50% 搭配 transform: translateX(-50%) 以置中底邊

結果是一個底部寬 28 像素、在氣泡下方突出 14 像素的三角形,因此滑桿上設定的尺寸與指引在版面中所佔用的間距完全一致。

設定顏色、圓角、尾巴尺寸和方向的操作步驟

使用 CSS 對話框產生器,一次就能完成氣泡的撰寫:

  1. 輸入兩個六位數十六進位顏色:一個氣泡背景色,以及一個在該背景上能產生足夠對比的文字色。
  2. 設定氣泡圓角表面的圓角半徑(以像素為單位);此欄位接受零到八十像素之間的值。
  3. 設定三角形尾巴尺寸(以像素為單位),此值會同時控制可見投影與三角形底邊的一半;此欄位接受四到四十像素之間的值。
  4. 選擇上、右、下或左,並觀察即時預覽以相符的 border-color 幾何重新繪製。
  5. 複製為所選方向產生的基礎類別,以及 ::after 偽元素規則。
  6. 補上輸出刻意留白的元件決策:寬度、內距、字型、max-width、換行、語意、對比和響應式間距。

解讀複製出來的基礎類別與 ::after 規則

輸出包含兩部分:擁有圓角形狀的相對定位基礎類別,以及負責繪製三角形的 ::after 偽元素。基礎類別會取得氣泡背景色、圓角半徑,以及 position: relative,讓偽元素可以錨定到它身上。偽元素本身就是幾何本體,而每一條宣告都明確寫出,確保規則在開發者工具中仍然易讀。

偽元素帶有 content: ''、寬度為零、高度為零,以及一條對每個邊都設定 border-style: solid 的宣告,並在三個不該出現的邊上設為 border-color: transparent,在所選方向對面的那條邊則填上氣泡背景色。明確的宣告正是 W3C CSS Backgrounds and Borders Level 3 規範所要求的,也正是本產生器所輸出的內容 — 不使用任何會隱藏「到底是哪一條邊帶有顏色」的簡寫。

產生器中的預覽會把同一個三角形當成真實的子元素來繪製,因為 inline style 無法指定偽元素。兩條路徑採用的是同一套經過驗證的尺寸、顏色、方向和偏移計算,因此預覽中所看到的,就是複製出來的規則一旦進入樣式表後所產生的結果。

產生器刻意省略的部分

複製出來的規則刻意維持精簡。它不包含內容、內距、寬度、字型、動畫或互動邏輯,因為這些屬於使用該形狀的元件。它也不包含:

  • 超出預設 50% 置中之外的指引客製化偏移
  • 單一氣泡上的多重指引
  • 曲線尾巴
  • 氣泡外框
  • 氣泡下方的陰影
  • 斷詞規則、行高或文字溢位規則

尾巴尺寸刻意上限設為四十像素,因為同一個值同時決定可見投影與三角形底邊的一半,超過這個範圍後,幾何形狀就不再適合用於訊息表面。空白的數值控制項會被拒絕,而不是被轉為零,因此複製出來的規則永遠不會包含一條模稜兩可的宣告。至於陰影層,同樣的「取代 API」模式可透過 Box Shadow Generator API Alternative for Client-Side CSS 這個配套工具來套用,讓該視覺處理同樣留在瀏覽器本地執行。

將氣泡整合進聊天、工具提示和引述中

裝飾性的指引本身並不構成語意關聯,因此意義必須由周圍的 HTML 來承擔。以下三種模式反覆出現:

  • 聊天:以文字揭露作者、順序、狀態和時間戳記,而不是單純靠左側或右側擺放位置來暗示發言者。
  • 引述:使用段落元素作為內文,並以 cite 或周圍標記處理出處;氣泡僅負責框住內容。
  • 工具提示:單靠形狀是不夠的 — 還需要加上觸發關聯、鍵盤可達性、可預測的焦點行為、可按 Esc 關閉,以及與觸發元素之間的無障礙關聯。裝飾性的尾巴絕對不能因為外觀看起來像,就升格為工具提示。

請手動檢查文字顏色與氣泡背景之間的對比。本產生器不會計算 WCAG 比率,因此一個視覺上討喜的氣泡,在常見文字尺寸下仍可能未通過無障礙檢查。過長且不中斷的字串、翻譯後的文字、縮放和狹窄的行動裝置寬度,都可能撐開方框或與尾巴相撞,因此請為正式版元件設定合理的 max-width、換行規則、內距,並在尾巴那一側預留足夠的外部空間。若祖先元素使用了 overflow: hidden,可能會裁切掉指引,請預留空間並檢查每個斷點。

複製完成後,請整合既有的設計權杖,接著測試語意閱讀順序、對比、高對比模式、縮放、本地化、溢位情況,以及實際承載指引的那個容器。50% 的偏移量可以調整成與大頭貼或錨點對齊,而不必更動底層的三角形幾何 — 有顏色的邊框會停留在滑桿設定的位置,變動的只有偽元素上的絕對偏移量。

想進一步了解,請參閱 CSS Stripes Generator Alternative With Hard-Edge Stops