本帖最后由 gasment 于 2025-11-3 14:54 编辑   
 
自制卡片计划第五弹,往期链接: 
【更新V2】自制第三方卡片分享,popup-button-card,一个自带弹窗的按钮卡片 - 『HomeAssistant』综合讨论区 - 『瀚思彼岸』» 智能家居技术论坛 - Powered by Discuz!   
自制第三方卡片分享,slider-mod-card,一个简洁的滑动条卡片 - 『HomeAssistant』综合讨论区 - 『瀚思彼岸』» 智能家居技术论坛 - Powered by Discuz!  
自制第三方卡片分享,countdown-mod-card,一个紧凑型定时卡片 - 『HomeAssistant』综合讨论区 - 『瀚思彼岸』» 智能家居技术论坛 - Powered by Discuz!  
自制第三方卡片分享,grid-button-card,一个带动画的按钮切换卡片 - 『HomeAssistant』综合讨论区 - 『瀚思彼岸』» 智能家居技术论坛 - Powered by Discuz!  
 
介绍  
grid-template-card  
 
此项目全部功能实现代码由AI生成 Power By ChatGPT  
预览  
无  (只是一个功能性的框架容器卡片) 
 
安装说明  
复制本项目仓库地址: 在HACS添加Custom repositories,Repositories填写仓库地址,Type选择Dashboard; 搜索:grid-template-card,下载安装,按提示刷新页面  
 
 
卡片配置  
 配置项 
  效果 
  使用说明 
  配置示例 
  type  卡片调用  必须  type: custom:grid-template-card  variables  可配置变量,方便卡片复用与模板复用  可选,支持静态内容,或js模板动态返回 
 如果内嵌卡片也为grid-template-card,变量可以逐级向上读取  见下文varibales详情 
  template  卡片模板,可同一仪表盘内复用  可选,使用方法与button-card一致  见下文template详情 
  name  文本元素,受grid布局控制,不配置时不显示  可选,支持静态内容,或js模板动态返回  name: 我的名字  state  文本元素,受grid布局控制,不配置时不显示  可选,支持静态内容,或js模板动态返回  state: 12138  label  文本元素,受grid布局控制,不配置时不显示  可选,支持静态内容,或js模板动态返回  label: 我的标签  icon   图标元素,受grid布局控制,不配置时不显示  可选,支持内置mdi,或文件路径,支持js模板动态返回  icon: mdi:xxxxxx  tap_action_vibration  点击附带震动效果,仅支持官方APP,不支持web  可选,接受true/false  tap_action_vibration: true  tap_action_vibration_type  震动效果选择  可选,支持官方几种预设效果: 
success, warning, failure, light, medium,  heavy, selection 
 不配置则默认heavy  tap_action_vibration_type: selection confirm_dialog 开启二次确认弹窗,用于防误触 可选,接受true/false  confirm_dialog: true 
 confirm_dialog_content  二次确认弹窗内的自定义文本  可选,接受文本字符串  confirm_dialog_content: 点了就爆炸 
 tap_action  点击动作,调用HA服务  可选,支持HA标准action写法  见下文tap_action详情 
  styles  卡片内各元素的css样式设置  可选,支持通用标准css样式插入  见下文styles详情 
  custom_grid_areas  内嵌子卡片的入口  可选,理论上支持所有卡片  见下文custom_grid_areas详情 
 
 
js模板写法  
基本与button-card一致 分行符使用“|”、“>-”,另起一行使用[[[···]]]包裹js代码 读取实体主属性使用:states[`your_entity_id`].state 读取实体附加属性使用:states[`your_entity_id`].attributes.xxxxx 可以使用变量代替实体id: states[`${variables.your_entity_id`}].state 支持赋值变量var/cont/let,支持if else 多行嵌套 使用return返回数值  
示例:  
button_effect_color: |
    [[[
        var state = states[`sensor.entity`].state
        if (state === "off"){
        return "#D7DFED"
        } else if (state === "cool"){
        return "#2483FF"
        } else if (state === "heat"){
        return "#FF6B6B"
        } else if (state === "dry"){
        return "#54CEAE"
        } else if (state === "fan_only"){
        return "#4CCBA9"
        } else if (state === "auto"){
        return "#464BD8"
        } else {
        return "#D7DFED"
        }
    ]]] 
复制代码 
  
variables用法  
variables:
  example_1: 114514
  example_2: |
      [[[
        var value = states[`light.entity`].state;
        if (value === "on"){
          return "打开"
        } else {
            return "关闭"
        }
      ]]]
  example_3: switch.my_switch 
复制代码 
 
name: |
  [[[return variables.example_1]]]
state: |
  [[[
    var value = states[`${variables.example_3}`].state;
    if (value === "on"){
      return "打开"
    } else {
        return "关闭"
    }
  ]]] 
复制代码 
 如果在此卡片内继续嵌套此卡片,variables可逐级向顶层查询获取,比如,当内嵌卡片全部为此卡片时,只需要在最外层定义变量即可  
 
template用法  
与button-card用法一致,在仪表盘原始配置的views配置前插入grid_template_card_templates字段,如:  
grid_template_card_templates:
  my_card_template:
  ·····
views:
  ···· 
复制代码 
 
template: my_card_template 
复制代码 
 引用模板后,会自动合并现有卡片内配置与模板配置内容,存在相同键配置时,卡片内配置会覆盖模板配置 模板可包含内嵌卡片,即使内嵌卡片不是grid-template-card  
 
 
tap_action用法  
目前仅支持单击动作 action和entity_id支持js模板和variables 更多操作可参考开发者选项中的动作yaml配置  
tap_action:
  action: switch.toggle
  target:
    entity_id: switch.your_entity 
复制代码 
  
styles用法  
styles支持通用标准css样式插入,仅支持如下预设入口: styles -> grid,grid布局控制,使用方法同button-card,示例一个2x4布局  
styles:
  grid:
    - grid-template-areas: |
        "name  state"
        "icon  label"
        "area1 area2"
        "area3 area4"
    - grid-template-columns: auto auto
    - grid-template-rows: auto auto
    - align-content: center
    - align-items: center
    - justify-content: center
    - justify-items: center 
复制代码 
 styles -> card,控制卡片最外部容器的样式  
styles:
  card:
    - padding: 0px
    - height: 180px
    - width: 320px
    - background: rgba(0,0,0,0)
    - border-radius: 20px 
复制代码 
 styles -> name/state/label,配置3个文本元素的样式  
styles:
  name:
    - font-size: 16px
  state:
    - color: red
  label:
    - letter-spacing: 6px 
复制代码 
 
styles:
  icon:
    - height: 30px
    - width: 30px 
复制代码 
 styles -> custom_grid_areas,控制每个grid-template-areas的容器外部样式  
styles:
  custom_grid_areas:
    area1:
      - padding: 6px
    area2:
     - margin-left: -10px
 
复制代码 
  
custom_grid_areas用法  
子入口必须与styles -> grid中配置的自定义区域名称相符  
custom_grid_areas:
  area1:
    card:
      type:xxxxxxxx #其他卡片yaml
      ····
  area2
    card:
      type:xxxxxxxx
      ···· 
复制代码 
  
完整配置示例:  
type: custom:grid-template-card
name: xxx
state: xxx
icon: xxx
label: xxx
varibales:
  aaa: xxxx
  bbb: |
    [[[
        var value = states[`entity_id`].state;
        return value;
    ]]]
template: xxxxx
tap_action_vibration: true
tap_action_vibration_type: success
tap_action:
  action: switch.toggle
  target:
    entity_id: switch.your_entity
styles:
  grid:
    - grid-template-areas: |
        "name  state"
        "icon  label"
        "area1 area2"
        "area3 area4"
    - grid-template-columns: auto auto
    - grid-template-rows: auto auto
    - align-content: center
    - align-items: center
    - justify-content: center
    - justify-items: center
  card:
    - padding: 0px
    - height: 180px
    - width: 320px
    - background: rgba(0,0,0,0)
    - border-radius: 20px
    - -webkit-tap-highlight-color: transparent  #禁止移动端交互阴影效果
  name:
    - font-size: 15px
  state:
    - color: red
  label:
    - letter-spacing: 3px
  icon:
    - height: 30px
    - width: 30px
  custom_grid_areas:
    area1:
      - padding: 6px
    area2:
      - padding: 3px
    area3:
      - padding: 3px
    area4:
      - padding: 3px
custom_grid_areas:
  area1:
    card:
        type: custom:button-card 
复制代码