Skip to content

Grid Spark

Der Grid Spark setzt CSS Grid auf einen Container innerhalb eines Forge-Elements. Damit lassen sich die direkten Kinder eines Zielcontainers sauber in Spalten, Zeilen und benannte Bereiche verteilen.

Grundnutzung

yaml
type: custom:uix-forge
forge:
  mold: card
  sparks:
    - type: grid
      for: hui-tile-card
      columns: 2
      gap: 8px
element:
  type: tile
  entity: light.living_room

TIP

Der Spark wirkt auf die direkten Kinder des Zielcontainers. Wenn sich scheinbar nichts ändert, prüfe im Browser-Inspektor, ob for wirklich den Container trifft, dessen Kinder du anordnen willst.

Konfiguration

Basiseigenschaften

SchlüsselTypPflichtStandardBeschreibung
typestringja-Muss grid sein.
forstringneinelement, bei Blank Card uix-forge-blank-card $ div.contentUIX-Selektor für den Zielcontainer. $ wechselt in Shadow Roots.
columnsnumber oder stringnein-grid-template-columns. Eine Zahl wird zu repeat(n, 1fr), ein String wird unverändert verwendet.
rowsnumber oder stringnein-grid-template-rows. Gleiche Kurzform wie columns.
gapnumber oder stringnein-Abstand für Zeilen und Spalten. Zahlen werden als Pixel interpretiert.
column_gapnumber oder stringnein-Nur Spaltenabstand.
row_gapnumber oder stringnein-Nur Zeilenabstand.
auto_rowsstringnein-Wert für grid-auto-rows, z. B. minmax(100px, auto).
auto_columnsstringnein-Wert für grid-auto-columns.
auto_flowstringnein-Wert für grid-auto-flow: row, column, row dense oder column dense.
justify_itemsstringnein-Wert für justify-items: start, end, center, stretch.
align_itemsstringnein-Wert für align-items: start, end, center, stretch.
justify_contentstringnein-Wert für justify-content.
align_contentstringnein-Wert für align-content.
place_itemsstringnein-Kurzform für <align-items> / <justify-items>.
place_contentstringnein-Kurzform für <align-content> / <justify-content>.
areasstringnein-Wert für grid-template-areas, z. B. '"header header" "main sidebar"'.
elementslist[string]nein[]Namen für grid-area, die den direkten Kindern der Reihe nach zugewiesen werden.
media_querieslistnein[]Responsive Überschreibungen, siehe unten.

Media Queries

SchlüsselTypPflichtBeschreibung
querystringjaNormale CSS-Media-Query, z. B. "(min-width: 768px)".
Grid-Eigenschaften-neinBeliebige Grid-Eigenschaften wie columns, rows, gap, areas, align_items usw.

TIP

Die Werte in media_queries überschreiben nur die dort gesetzten Eigenschaften. Nicht genannte Eigenschaften bleiben aus der Basiskonfiguration erhalten.

Beispiele

Zwei Spalten

yaml
type: custom:uix-forge
forge:
  mold: card
  sparks:
    - type: grid
      for: hui-tile-card
      columns: 2
      gap: 12px
element:
  type: entities
  entities:
    - light.living_room
    - sensor.living_room_temperature

Feste und flexible Spalten

yaml
type: custom:uix-forge
forge:
  mold: card
  sparks:
    - type: grid
      for: hui-tile-card
      columns: "64px 1fr auto"
      align_items: center
      column_gap: 12px
element:
  type: tile
  entity: light.living_room

Benannte Bereiche

yaml
type: custom:uix-forge
forge:
  mold: card
  sparks:
    - type: grid
      for: uix-forge-blank-card $ div.content
      areas: '"icon name" "icon state"'
      columns: "48px 1fr"
      rows: "auto auto"
      gap: 4px 12px
      elements:
        - icon
        - name
        - state
element:
  type: custom:uix-forge-blank-card
  cards:
    - type: tile
      entity: light.living_room

Responsive Umschaltung

yaml
type: custom:uix-forge
forge:
  mold: card
  sparks:
    - type: grid
      for: uix-forge-blank-card $ div.content
      columns: 1
      gap: 8
      media_queries:
        - query: "(min-width: 768px)"
          columns: 2
          gap: 12px
        - query: "(min-width: 1200px)"
          columns: "1fr 1fr 1fr"
          gap: 16px
element:
  type: custom:uix-forge-blank-card
  cards:
    - type: tile
      entity: light.kitchen
    - type: tile
      entity: light.living_room
    - type: tile
      entity: light.office

Ausrichtung

yaml
type: custom:uix-forge
forge:
  mold: card
  sparks:
    - type: grid
      for: hui-tile-card
      columns: "auto 1fr"
      place_items: "center / stretch"
      gap: 10px
element:
  type: tile
  entity: sensor.energy_today

::: note Der Grid Spark ersetzt keine komplette Dashboard-Layout-Engine. Er ist für das Layout innerhalb des erzeugten Elements gedacht.

:::

columns und rows als Kurzform

Zahlen werden als gleich breite Tracks interpretiert.

yaml
forge:
  sparks:
    - type: grid
      columns: 3
      rows: 2

Das entspricht sinngemäß:

css
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 1fr);

Strings werden direkt als CSS-Wert verwendet:

yaml
forge:
  sparks:
    - type: grid
      columns: "minmax(80px, 160px) 1fr auto"
      rows: "auto minmax(120px, 1fr)"

elements und Reihenfolge

elements vergibt grid-area-Namen an die direkten Kinder des Zielcontainers. Die Reihenfolge entspricht der DOM-Reihenfolge.

yaml
forge:
  sparks:
    - type: grid
      areas: '"title actions" "content content"'
      columns: "1fr auto"
      elements:
        - title
        - actions
        - content

Wenn weniger Namen als Kinder vorhanden sind, bleiben die restlichen Kinder ohne grid-area. Wenn mehr Namen vorhanden sind, werden die überzähligen Namen ignoriert.

Typische Grid-Werte

ZielWert
Zwei gleich breite Spaltencolumns: 2
Icon plus Textcolumns: "40px 1fr"
Text plus Aktioncolumns: "1fr auto"
Kompakte Kachelncolumns: "repeat(auto-fit, minmax(120px, 1fr))"
Gleichmäßiger Abstandgap: 8
Unterschiedlicher Abstandgap: "6px 12px"

Responsive Bereiche

yaml
forge:
  sparks:
    - type: grid
      areas: '"title" "content" "actions"'
      columns: 1
      media_queries:
        - query: "(min-width: 900px)"
          areas: '"title actions" "content content"'
          columns: "1fr auto"

Fehlerquellen

ProblemUrsacheLösung
Grid wirkt nichtfor trifft kein Container-ElementDOM mit Inspektor prüfen
Kinder bleiben untereinanderZielcontainer hat keine direkten KinderEinen tieferen Container wählen
Bereiche passen nichtareas und elements stimmen nicht zusammenDOM-Reihenfolge prüfen
Mobile Ansicht zu engFeste Spaltenmedia_queries oder minmax() nutzen