Berichte und Recherche zu Shopify und E-Commerce
Der Hero von Horizon hat 36 Section-Einstellungen und 8 Block-Typen mit weiteren 104, und sein Height-Dropdown wechselt von rem auf svh, sobald der Bildschirm größer wird. Gelesen aus dem Quellcode des Themes bei Commit 8b42ace.
Horizon ist das Theme, das Shopify neuen Shops mitgibt, und seine Hero-Section ist das Erste, was die meisten Händler anfassen. Der Theme-Editor zeigt Ihnen ein Height-Dropdown mit sechs Auswahlmöglichkeiten und einen Bildplatz. Er sagt Ihnen nicht, dass drei dieser Optionen ihre Maßeinheit je nach Bildschirmbreite wechseln – oder dass „Large“ hier etwas völlig anderes bedeutet als „Large“ in Dawn.
Wie wir zu diesen Zahlen gekommen sind. Am 1. September 2026 haben wir das öffentliche Repository Shopify/horizon bei Commit 8b42ace (2026-08-31) gelesen – Horizon veröffentlicht keine Releases und keine Tags, der Commit ist also die Version. Das Settings-Schema und die srcset-Staffeln haben wir aus sections/hero.liquid mit 1496 Zeilen entnommen, die Höhenvariablen aus snippets/theme-styles-variables.liquid und die Section-Regeln aus assets/base.css. Die Block-Beschreibungen haben wir über die gemeinsam genutzte blocks/-Bibliothek des Themes aufgelöst, weil das Hero-Schema sie nur benennt. Jede Zahl wurde per Skript aus diesen Dateien extrahiert.
Das ist der Teil, der die Leute überrascht. Horizon hat nicht eine Höhe pro Option – es hat drei, über zwei Breakpoints, und die Einheit wechselt:
| Einstellung | Mobil | ≥40em | ≥60em |
|---|---|---|---|
| Small | 15rem = 240px | 40svh | 50svh |
| Medium | 25rem = 400px | 55svh | 65svh |
| Large | 35rem = 560px | 70svh | 80svh |
Unterhalb von 40em sind die Höhen fest in rem angegeben. Darüber werden sie zu svh, der Einheit für die kleine Viewport-Höhe – also einem Prozentsatz des sichtbaren Bildschirms. Auf einem Smartphone ist ein Large-Hero damit fest 560px hoch, und auf einem breiten Desktop 80% von dem, was das Fenster des Besuchers gerade hergibt.
Zwei weitere Höhen umgehen die Tabelle vollständig. full-screen setzt 100svh. custom blendet einen Slider ein, section_height_custom, der von 0 bis 100% läuft, mit einem Standardwert von 50 – und dieser Wert wird ebenfalls direkt als svh ausgegeben, nicht als Pixel.
Beide Themes bieten einen Large-Hero. Vergleichbar sind sie nicht, und zwar aus zwei voneinander unabhängigen Gründen.
Die rem-Basis unterscheidet sich. Wir haben jede einzelne Datei des Themes durchsucht: Horizon überschreibt die Root-Schriftgröße nie, also entspricht 1rem dem Browser-Standard von 16px. Dawn setzt font-size: calc(var(--font-body-scale) * 62.5%), wodurch 1rem 10px sind. Dieselben 35rem würden in Horizon 560px und in Dawn 350px bedeuten.
Die Einheit unterscheidet sich oberhalb des Breakpoints. Large ist in Dawn auf dem Desktop fest 720px, auf jedem Bildschirm gleich. Large in Horizon sind 80svh, wächst also mit dem Display: etwa 720px bei einem 900px hohen Fenster und etwa 1152px bei einem 1440px hohen.
Wenn Sie ein Design zwischen den beiden Themes portieren, ist das die eine Einstellung, die es am wahrscheinlichsten zerlegt.
Horizon baut ein srcset aus zwei hart codierten Staffeln, in den Zeilen 103 und 105 der Section:
| Staffel | Bereich | Stufen | Angeforderte Breiten |
|---|---|---|---|
| Media über die volle Breite | 832–3840px | 6 | 832, 1200, 1600, 1920, 2560, 3840 |
| Split-Media | 416–1600px | 5 | 416, 600, 800, 1200, 1600 |
Laden Sie 3840px Breite hoch, wenn der Hero über die ganze Seite reichen soll. Die schmalere Staffel endet bei 1600px, weil jedes Bild dort immer nur einen Teil der Breite einnimmt.
Beachten Sie die unterste Stufe: Horizon beginnt bei 832px, Dawn bei 375px. Horizon liefert einfach keine Smartphone-Variante eines Hero-Bildes über die volle Breite aus – gut zu wissen, wenn Ihr Traffic überwiegend mobil ist und über langsame Verbindungen kommt.
Dawn beschreibt seine Blöcke innerhalb des Section-Schemas. Horizon benennt sie und hält die Beschreibungen in einer gemeinsam genutzten Bibliothek, sodass sections/hero.liquid allein gelesen nichts darüber sagt, was ein Block kann. Aufgelöst tragen die 8 Typen zusammen 104 Einstellungen:
| Typ | Name | Einstellungen | Definiert in |
|---|---|---|---|
@theme | — | 0 | wildcard |
text | Text | 19 | blocks/text.liquid |
button | Button | 12 | blocks/button.liquid |
logo | Logo | 15 | blocks/logo.liquid |
jumbo-text | Jumbo text | 9 | blocks/jumbo-text.liquid |
spacer | Spacer | 7 | blocks/spacer.liquid |
group | Group | 36 | blocks/group.liquid |
_marquee | Marquee | 6 | blocks/_marquee.liquid |
@theme ist ein Platzhalter: Er akzeptiert jeden Theme-Block, weshalb er keine eigenen Einstellungen hat. group ist der schwere Fall mit 36 Einstellungen, weil es ein Layout-Container ist, der die meisten Ausrichtungs- und Abstandsregler der Section selbst eine Ebene tiefer wiederholt.
Zur Größenordnung: Das Image-Banner von Dawn bietet 3 Block-Typen mit insgesamt 12 Einstellungen. Der Hero von Horizon bietet 8 mit 104. Das ist der eigentliche Unterschied zwischen den beiden Themes – und er ist nirgends im Theme-Editor sichtbar.
36 Einstellungen, so wie sie im Editor erscheinen:
| ID im Code | Label im Editor | Typ | Standard | Bereich / Optionen |
|---|---|---|---|---|
media_type_1 | Type | select | image | 2 Optionen |
image_1 | Image | image_picker | — | — |
video_1 | Video | video | — | — |
media_type_2 | Type | select | image | 2 Optionen |
image_2 | Image | image_picker | — | — |
video_2 | Video | video | — | — |
stack_media_on_mobile | Stack media | checkbox | false | — |
custom_mobile_media | Show different media on mobile | checkbox | false | — |
media_type_1_mobile | Type | select | image | 2 Optionen |
image_1_mobile | Image | image_picker | — | — |
video_1_mobile | Video | video | — | — |
media_type_2_mobile | Type | select | image | 2 Optionen |
image_2_mobile | Image | image_picker | — | — |
video_2_mobile | Video | video | — | — |
link | Link | url | — | — |
open_in_new_tab | Open link in new tab | checkbox | false | — |
content_direction | Direction | select | column | 2 Optionen |
vertical_on_mobile | Vertical on mobile | checkbox | true | — |
horizontal_alignment | Alignment | select | flex-start | 4 Optionen |
vertical_alignment | Position | select | center | 3 Optionen |
align_baseline | Align text baseline | checkbox | false | — |
horizontal_alignment_flex_direction_column | Alignment | select | flex-start | 3 Optionen |
vertical_alignment_flex_direction_column | Position | select | center | 4 Optionen |
gap | Gap | range | 12 | 0–100px, Schritt 1 |
section_width | Width | select | page-width | 2 Optionen |
section_height | Height | select | medium | 6 Optionen |
section_height_custom | Custom height | range | 50 | 0–100%, Schritt 1 |
background_color | Background color | color | — | — |
toggle_overlay | Media overlay | checkbox | — | — |
overlay_color | Overlay color | color | #00000026 | — |
overlay_style | Overlay style | select | solid | 2 Optionen |
gradient_direction | Gradient direction | select | to top | 2 Optionen |
blurred_reflection | Blurred reflection | checkbox | false | — |
reflection_opacity | Reflection opacity | range | 75 | 0–100%, Schritt 1 |
padding-block-start | Top | range | 0 | 0–100px, Schritt 1 |
padding-block-end | Bottom | range | 0 | 0–100px, Schritt 1 |
Erwähnenswert:
Vier separate Ausrichtungseinstellungen. horizontal_alignment und vertical_alignment greifen, wenn Inhalte in einer Reihe fließen; horizontal_alignment_flex_direction_column und vertical_alignment_flex_direction_column greifen, wenn sie gestapelt werden. Ändern Sie die eine, behält die andere ihren alten Wert – das ist der üblichere Grund, warum ein Hero auf dem Desktop richtig und auf dem Smartphone falsch aussieht.
reflection_opacity – ein Slider von 0 bis 100%, Standardwert 75, gekoppelt an blurred_reflection. Dawn hat kein Gegenstück dazu.
Vier Bildplätze und vier Videoplätze. Der Hero nimmt Media doppelt auf – für Desktop und einen separaten Mobile-Satz hinter custom_mobile_media, das standardmäßig auf false steht.
Öffnen Sie sections/hero.liquid und lesen Sie den {% schema %}-Block am Ende für die Einstellungen. Die Höhen stehen in den Zeilen 143 bis 157 von snippets/theme-styles-variables.liquid. Die Block-Beschreibungen liegen in blocks/ – eine Datei pro Typ, benannt genau wie in der Spalte type oben.
Horizon hat keine Releases, es gibt also keine Versionsnummer zum Zitieren. Diese Seite nennt stattdessen den Commit, aus dem gelesen wurde; wenn sich das Theme ändert, ändern sich diese Zahlen mit.
3840px Breite für einen Hero über die volle Breite. Horizon fordert 6 Breiten von 832px bis 3840px an. Für Split-Media nutzt es eine zweite Staffel aus 5 Breiten, die bei 1600px endet – dort genügen also 1600px.
Auf dem Smartphone lauten die festen Optionen 240px, 400px und 560px. Ab 40em werden daraus 40svh, 55svh und 70svh, ab 60em 50svh, 65svh und 80svh. Full-Screen ist 100svh, und Custom ist ein Slider, dessen Wert direkt als svh gelesen wird.
Dafür gibt es zwei Gründe. Horizon überschreibt die Root-Schriftgröße nie, also entspricht 1rem dem Browser-Standard von 16px, während Dawn 62.5% setzt und damit auf 10px kommt. Und oberhalb des Breakpoints rechnet Horizon in svh, also einem Prozentsatz des Fensters, während Dawn bei einem festen Wert bleibt.
36 an der Section selbst, plus 8 Block-Typen, die zusammen 104 Einstellungen tragen. Die Block-Einstellungen stehen nicht in der Section-Datei – Horizon hält sie in einer gemeinsam genutzten blocks/-Bibliothek.
In jeweils einer Datei pro Block-Typ unter blocks/ im Theme. Das Hero-Schema listet nur die Typnamen auf, weshalb die Section allein gelesen Blöcke ohne jegliche Einstellungen zeigt. Der Eintrag @theme ist ein Platzhalter, der jeden Theme-Block akzeptiert.