找回密碼
 立即註冊
惟家LINE群QRCODE
    查看: 1|回覆: 0

    自訂主題(Theme):一次改變整個 HA 的外觀

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    card-mod 是改單張卡片,主題是改全部

    而且主題是官方功能,不會因為更新而壞掉。



    主題是什麼

    一組 CSS 變數的值。

    HA 的前端到處都在用這些變數:
    1. 卡片背景  →  var(--ha-card-background)
    2. 主要文字  →  var(--primary-text-color)
    3. 強調色    →  var(--accent-color)
    複製代碼

    你只要改這些變數的值,整個介面就跟著變。

    怎麼建立

    第一步:建立資料夾和檔案
    1. /config/themes/my_theme.yaml
    複製代碼

    第二步:告訴 HA 去讀它
    1. # configuration.yaml
    2. frontend:
    3.   themes: !include_dir_merge_named themes/
    複製代碼

    第三步:寫主題
    1. # /config/themes/my_theme.yaml
    2. 我的主題:
    3.   # ===== 主色 =====
    4.   primary-color: "#2E9D6E"
    5.   accent-color: "#FFB300"
    6.   dark-primary-color: "#1F6E4D"
    7.   light-primary-color: "#7FD3B0"
    8.   # ===== 文字 =====
    9.   primary-text-color: "#1C2430"
    10.   secondary-text-color: "#6B7684"
    11.   text-primary-color: "#FFFFFF"
    12.   disabled-text-color: "#B0B8C4"
    13.   # ===== 背景 =====
    14.   primary-background-color: "#F5F7FA"
    15.   secondary-background-color: "#EDF1F6"
    16.   divider-color: "#E0E5EC"
    17.   # ===== 卡片 =====
    18.   card-background-color: "#FFFFFF"
    19.   ha-card-background: "#FFFFFF"
    20.   ha-card-border-radius: "16px"
    21.   ha-card-box-shadow: "0 2px 8px rgba(0,0,0,0.06)"
    22.   ha-card-border-width: "0"
    23.   # ===== 狀態顏色 =====
    24.   state-icon-color: "#8A94A6"
    25.   state-icon-active-color: "#FFB300"
    26.   error-color: "#E53935"
    27.   warning-color: "#FB8C00"
    28.   success-color: "#43A047"
    29.   info-color: "#1E88E5"
    30.   # ===== 側邊欄 =====
    31.   sidebar-background-color: "#FFFFFF"
    32.   sidebar-icon-color: "#8A94A6"
    33.   sidebar-selected-icon-color: "#2E9D6E"
    34.   sidebar-selected-text-color: "#2E9D6E"
    35.   # ===== 上方列 =====
    36.   app-header-background-color: "#2E9D6E"
    37.   app-header-text-color: "#FFFFFF"
    複製代碼

    第四步:套用


    • 重新載入主題:開發者工具 → YAML → 重新載入主題
    • 套用:左下角你的名字 → 主題 → 選你的


    主題是每個使用者各自設定的 ——
    你換主題不會影響家人。



    深色模式

    主題可以同時定義淺色和深色兩套
    1. 我的主題:
    2.   # 共用的設定(兩種模式都套用)
    3.   ha-card-border-radius: "16px"
    4.   primary-color: "#2E9D6E"
    5.   modes:
    6.     light:
    7.       primary-text-color: "#1C2430"
    8.       card-background-color: "#FFFFFF"
    9.       primary-background-color: "#F5F7FA"
    10.     dark:
    11.       primary-text-color: "#E8EAED"
    12.       card-background-color: "#1E2530"
    13.       primary-background-color: "#141A22"
    14.       ha-card-background: "#1E2530"
    15.       divider-color: "#2C3542"
    複製代碼

    使用者選「自動」的話,會跟著系統的深淺色設定切換。

    自動切換主題

    用自動化在日落時換主題:
    1. alias: 日落切換深色主題
    2. triggers:
    3.   - trigger: sun
    4.     event: sunset
    5. actions:
    6.   - action: frontend.set_theme
    7.     data:
    8.       name: 我的主題
    9.       mode: dark
    10. mode: single
    複製代碼

    但老實說:讓使用者選「自動」跟著系統走,
    比你寫自動化強制切換好 —— 因為每個人的偏好不同

    有哪些變數可以改



    官方文件有完整清單,但實務上最常改的就這幾類:

    顏色類


    • primary-color —— 主色,影響很多地方
    • accent-color —— 強調色(滑桿、選取狀態)
    • state-icon-active-color —— 燈開著時圖示的顏色


    卡片類


    • ha-card-border-radius —— 圓角
    • ha-card-box-shadow —— 陰影
    • ha-card-border-width —— 邊框寬度
    • ha-card-background —— 背景


    字體
    1.   primary-font-family: "'Noto Sans TC', sans-serif"
    2.   paper-font-common-base_-_font-family: "'Noto Sans TC', sans-serif"
    複製代碼

    中文字體建議


    • Noto Sans TC —— Google 的開源字體,字重齊全
    • 微軟正黑體 —— Windows 上直接有
    • PingFang TC —— Mac / iOS 上直接有


    一個實用的寫法(依平台自動選):
    1.   primary-font-family: >-
    2.     "PingFang TC", "Microsoft JhengHei", "Noto Sans TC", sans-serif
    複製代碼

    自己定義變數(進階但很好用)

    你可以在主題裡定義自己的變數,然後在 card-mod 裡用。
    1. 我的主題:
    2.   # 自訂變數
    3.   my-warm-glow: "rgba(255, 193, 7, 0.15)"
    4.   my-alert-red: "#E53935"
    5.   my-card-gap: "10px"
    複製代碼

    card-mod 裡:
    1. card_mod:
    2.   style: |
    3.     ha-card {
    4.       background: var(--my-warm-glow);
    5.     }
    複製代碼

    好處:改一個地方,所有卡片跟著變。

    我用這招管理「所有警示的紅色」 ——
    想換顏色只要改主題裡那一行。

    找現成的主題

    不想自己寫的話:


    • HACS → 前端,有很多現成的主題
    • 熱門的有 Google ThemeiOS Theme
        NoctisMetrology 等等
    • 下載之後一樣要重新載入主題再套用


    我的建議:先裝一個現成的,看它的 YAML 怎麼寫,再改成自己的。

    比從零開始快很多。

    除錯:怎麼知道某個東西用的是哪個變數


    • F12
    • 點那個元素
    • 右邊的 Styles 會顯示套用的 CSS
    • 看到 var(--xxx) 就是那個變數


    或者更快:選 html 元素,右邊會列出所有變數的目前值。

    搜尋你想找的顏色,就知道是哪個變數。

    三個實務建議

    一、先改顏色,不要一開始就改結構

    改 border-radius、box-shadow 這類很安全

    改 padding、margin、position 的話可能會在某些畫面破版

    二、在手機上測

    很多主題在電腦上很好看,在手機上字太小或對比不夠

    三、深色模式的對比要夠

    深色主題最常見的問題是文字太暗看不清楚


    • 背景 #1E2530 配文字 #E8EAED 是安全的組合
    • 次要文字不要低於 #9AA4B2


    ---

    下一篇:一個好用的儀表板該長什麼樣

    不講技術,講設計 —— 這是最多人做不好的部分。
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-9-24 10:31 , Processed in 0.083748 second(s), 24 queries .

    快速回覆 返回頂部 返回列表