Entwicklung
Blöcke, Designs, Stile und Variablen – technisch
Wie Blocktyp, Design, Stile und Theme-Variablen zusammenspielen und wie daraus HTML und CSS entstehen.
Ein Block auf einer Seite entsteht aus vier Teilen: dem Blocktyp (was der Block ist und welche Inhalte er hat), dem Design (Markup und eigenes SCSS), den Stilen (Auswahlen wie „Hintergrund: Dunkel“, die CSS-Klassen setzen) und den Theme-Variablen (Farben, Schriftgrößen, Abstände als CSS Custom Properties). Diese Seite zeigt, wo jedes Teil liegt, wie sie sich gegenseitig verwenden und in welcher Reihenfolge das CSS entsteht. Die vollständige Referenz liegt in deiner Installation unter docs/module/.
1. Blocktyp: module.json
Ein Blocktyp liegt in config/modules/<typ>/. Die module.json beschreibt die Bedeutung des Blocks, nie sein Aussehen:
| Schlüssel | Inhalt | Im Template |
|---|---|---|
level | section, layout (Anordnung) oder element | Klasse bloqy-section usw. |
fields | Inhalte, die Redakteure pflegen: text, rich, image, link, list, table, file … | {{field.title}}, {{field.image.src}} |
settings | Schalter mit Bedeutung: Überschriften-Ebene, Anzahl, Autoplay (select, boolean, number, icon …) | {{setting.level}}, {{#if setting.x}} |
slots | Bereiche für weitere Blöcke mit accepts (Ebenen) und optional types (erlaubte Blöcke) | {{slot.content}} |
style_sets | Stile für alle Designs ohne eigene Angabe | {{style.x}} |
example | Startinhalt neuer Blöcke und der Vorschau | – |
{
"type": "headline",
"level": "element",
"label": "Überschrift",
"fields": { "text": { "type": "rich", "format": "emphasis", "label": "Text" } },
"settings": { "level": { "type": "select", "label": "Ebene",
"options": ["h1", "h2", "h3"], "default": "h2" } }
}
Faustregel: Felder sind Inhalt, Einstellungen haben eine Bedeutung (SEO, Verhalten), reine Optik wie Farbe, Größe oder Ausrichtung ist ein Stil.
2. Design: variants/<id>
Jedes Design eines Blocktyps besteht aus bis zu drei Dateien in config/modules/<typ>/variants/. Im Block-Studio entsprechen sie den Reitern:
| Datei | Inhalt | Block-Studio |
|---|---|---|
<id>.json | id (typ.name), Name, default, style_sets, eigene Stile (style_options), eigene Felder, Beispiel | Aussehen, Eigene Stile, Individuelle Felder |
<id>.html | Template mit genau einem äußeren Element | Code → HTML |
<id>.scss | SCSS nur für dieses Design, gekapselt in .mv-<id> (& = der Block) | Code → SCSS |

Der Renderer hängt an das äußere Element feste Klassen: bloqy-element (bzw. -section, -layout), bloqy-type-<typ> und bei Designs mit SCSS die Scope-Klasse mv-<id>. Seiten speichern nur den Verweis (type, variant) und ihre Werte; eine Änderung am Design wirkt deshalb auf allen Seiten.
3. Wie ein Design Stile einbindet
Ein Stil ist für Redakteure eine Auswahl mit verständlichen Namen, technisch eine Liste von Werten mit CSS-Klassen. Ein Design bietet zentrale Stile über style_sets in seiner JSON-Datei an:
"style_sets": {
"spacing": "none",
"size": { "set": "headline_size", "default": "auto" },
"align": "",
"text_color": "default"
}
- Schlüssel → Standardwert: legt je Design fest, welcher Wert ohne Auswahl gilt.
- Anderer Name:
"size": {"set": "headline_size"}bietet den Stilheadline_sizeunter dem Namensizean. - Kurzform als Liste:
"style_sets": ["background", "spacing"]. - Ein eigener Stil des Designs (
style_options) mit gleichem Namen hat Vorrang.
Im Template setzt {{style.<name>}} die Klassen des gewählten Werts ein:
<hgroup class="bloqy-headline-group {{style.align}}">
<{{setting.level}} class="{{style.size}}" data-cms-field="text">{{field.text}}</{{setting.level}}>
</hgroup>
Verwendet das Template einen angebotenen Stil nicht, hängt bloqy dessen Klassen an das äußere Element. Steht umgekehrt {{style.x}} im Template, ohne dass das Design den Stil anbietet, zeigt der Reiter Aussehen ihn unter Fehlende Stile; dort ordnest du ihm einen zentralen Stil zu.

4. Stilwerte sind CSS-Klassen
Die zentralen Stile pflegst du unter Gestaltung → Blöcke → Reiter Stile. Gespeichert werden sie in
config/modules/.style-sets.json:
{
"version": 46,
"sets": {
"background": {
"label": "Hintergrund",
"default": "none",
"values": {
"none": { "label": "Keiner", "classes": "" },
"dark": { "label": "Dunkel", "classes": "bloqy-bgc-color-dark" },
"brand": { "label": "Marke", "classes": "bloqy-bgc-color-brand" }
}
}
}
}

Das CSS zu den Klassen liefert ein Paket je Stil: config/styles/<stil>/style.scss, bearbeitet über den Button CSS am Stil. Mitgelieferte Pakete stammen aus
bloqy/resources/styles/; neue Fassungen aus Updates erscheinen als Update verfügbar mit Vergleich, angepasstes CSS wird nie überschrieben. Bekommt ein Stil einen Wert mit einer Klasse ohne CSS, legt bloqy beim Speichern eine leere Regel unter „Eigene Werte“ an.

Redakteure sehen nur die Bezeichnungen der Werte, nie Klassen. Ändert sich ein Wert, wirkt das sofort in allen Designs, die den Stil anbieten.
5. Wie Theme-Variablen entstehen
Vier Seiten unter Gestaltung → Theme erzeugen CSS Custom Properties auf
:root (und die gleichnamigen SCSS-Variablen):
| Theme-Seite | Erzeugte Variablen |
|---|---|
| Farben | --color-primary … --color-error und eigene Farben, je Farbe -100 … -900 (gemischt mit Weiß bzw. Schwarz, -500 = die Farbe) und -on (Schriftfarbe darauf) |
| Typografie | Schriftskala --bloqy-step--2 … --bloqy-step-6 (Fließtext = Stufe 0, H6 … H1 = Stufen 0 … 5), Schriften --font-<familie> |
| Design-System | --breakpoint-sm … --breakpoint-2xl, Abstandsskala --bloqy-space-xs … --bloqy-space-3xl (wenn eingeschaltet), --bloqy-radius-s|m|l, --bloqy-shadow-s|l, Standard-Ecken --bloqy-radius-button|image|box|field |
| Variablen | jede eigene Variable als $name und --name |
Die Liste aller Gruppen mit Beispielen steht unter Variablen.

6. Farbklassen
Aus jeder Farbe des Themes erzeugt bloqy Klassen, die die Stile als Werte verwenden:
| Klasse | Wirkung | Genutzt von |
|---|---|---|
bloqy-color-<farbe> | color: var(--<farbe>) | Stil „Textfarbe“ |
bloqy-bgc-<farbe> | Hintergrund in der Farbe, Schrift in --<farbe>-on, setzt --bloqy-surface | Stil „Hintergrund“ |
bloqy-bgc-<farbe>-100 | Hintergrund in der hellsten Abstufung | Stil „Hintergrund“ (z. B. „Primär hell“) |
bloqy-btn-c-<farbe> | Button in der Farbe (--bloqy-btn-color) | Stil „Button-Farbe“ |
bloqy-on-dark | helle Schrift und helle Kontur-Buttons | setzt der Renderer automatisch neben jede bloqy-bgc--Klasse einer dunklen Farbe |
<farbe> ist der volle Variablenname, also z. B. bloqy-bgc-color-primary. Ob eine Farbe dunkel ist, ergibt sich aus dem Kontrast oder aus „Schrift darauf“ unter Theme → Farben.
7. Wie Designs die Variablen nutzen
Im SCSS eines Designs verwendest du die Grundfarben direkt als Variable, ohne Ersatzwert. So folgt das Design jeder Änderung unter Theme → Farben:
// Design-SCSS, gekapselt in .mv-<id>
& {
background: var(--color-surface);
color: var(--color-text);
border: 1px solid var(--color-border);
border-radius: var(--bloqy-radius, var(--bloqy-radius-box, 0.5rem));
}
& .badge { background: var(--color-primary); color: var(--color-primary-on); }
& .hinweis { background: var(--color-warning-100); }
@media (min-width: $breakpoint-md) {
& { padding: var(--bloqy-space-l, 2rem); }
}
- Farben immer aus
Theme → Farben; feste Farbwerte nur für Abdunklungen über Bildern.
- Ecken sind die Ausnahme mit Ersatzwert: zuerst der Stil „Ecken“ (
--bloqy-radius), dann der Standard dieser Art aus dem Design-System, dann der eigene Wert. - In Media Queries funktionieren keine CSS-Variablen; nimm dort die SCSS-Variablen wie
$breakpoint-md.
8. Reihenfolge des CSS
Die Website lädt die Stylesheets in dieser Reihenfolge: die Tailwind-Basisdatei (site.json → theme.base), weitere Stylesheets, zuletzt /theme/custom.css. Diese Datei übersetzt bloqy aus /theme/custom.scss:
scss/_variables.scss– erzeugt aus den Theme-Variablen und Farben ($nameund--name)scss/_fonts.scss–@font-faceund--font-<familie>aus der Schriftbibliothek- mitgelieferte Teildateien wie
_reset.scss scss/_module.scss– erzeugt, siehe unten- eigene Teildateien, die du später anlegst (bloqy hängt sie ans Ende)
_module.scss ist in sich so aufgebaut:
- CSS der Stil-Pakete (in der Reihenfolge der Stile, deaktivierte und ungenutzte entfallen)
- gemeinsame Regeln des Kerns, Effekt-Pakete, Komponenten
- Regeln je Breakpoint, Sichtbarkeit je Bildschirmbereich, Schriftklassen
bloqy-font-*, Menü, Navigation, Spalten - Design-System und Typografie (bei Tailwind mit Cascade Layers im Layer
base) - Farben: Abstufungen,
-onund die Farbklassen - zuletzt das SCSS jedes Designs in seiner Klasse
.mv-<id>
Bei gleicher Spezifität gewinnt also das Design gegen Stile und Kernregeln, und eigene Teildateien am Ende von custom.scss gewinnen gegen alles davor. _variables.scss, _fonts.scss und _module.scss werden bei jedem Build neu geschrieben, bearbeite sie nie von Hand.
9. Wohin mit eigenem CSS?
- Gehört es zu einem Design? Ins SCSS des Designs (Block-Studio → Code → SCSS).
- Gehört es zu einem Stilwert? Ins CSS-Paket des Stils.
- Alles Übrige (globale Typografie-Feinheiten, Formularfelder außerhalb von Blöcken): eine eigene Teildatei unter
Theme → SCSS-Dateien, die
custom.scsseinbindet.
Mehr dazu unter CSS: Stile, custom.scss und Theme. Nach Änderungen außerhalb des Admins erzeugt Werkzeuge →
Theme neu übersetzen das CSS komplett neu.