Inchieste e ricerca su Shopify e l’e-commerce
L'hero di Horizon ha 36 impostazioni di sezione e 8 tipi di blocco che ne portano altre 104, e il suo menu a tendina Height passa da rem a svh al crescere dello schermo. Letto dal codice sorgente del tema al commit 8b42ace.
Horizon è il tema che Shopify fornisce ai nuovi store, e la sua sezione Hero è la prima cosa su cui la maggior parte dei merchant mette mano. L’editor del tema ti mostra un menu a tendina Height con sei scelte e uno slot per l’immagine. Non ti dice che tre di quelle scelte cambiano la loro unità di misura a seconda della larghezza dello schermo, né che qui “Large” significa qualcosa di completamente diverso da “Large” in Dawn.
Come abbiamo ottenuto questi numeri. Il 1 settembre 2026 abbiamo letto il repository pubblico Shopify/horizon al commit 8b42ace (2026-08-31) — Horizon non pubblica release né tag, quindi il commit è la versione. Abbiamo preso lo schema delle impostazioni e le scale srcset da sections/hero.liquid, 1496 righe; le variabili di altezza da snippets/theme-styles-variables.liquid; e le regole della sezione da assets/base.css. Le descrizioni dei blocchi sono state ricostruite dalla libreria condivisa blocks/ del tema, perché lo schema dell’hero si limita a nominarli. Ogni dato è stato estratto da quei file tramite script.
Questa è la parte che sorprende le persone. Horizon non ha un’altezza per opzione — ne ha tre, su due breakpoint, e l’unità cambia:
| Impostazione | Mobile | ≥40em | ≥60em |
|---|---|---|---|
| Small | 15rem = 240px | 40svh | 50svh |
| Medium | 25rem = 400px | 55svh | 65svh |
| Large | 35rem = 560px | 70svh | 80svh |
Sotto 40em le altezze sono fisse in rem. Sopra diventano svh, l’unità small viewport height — una percentuale dello schermo visibile. Così su un telefono un hero Large è alto 560px fissi, e su un desktop ampio è l’80% di qualunque dimensione abbia la finestra del visitatore.
Altre due altezze bypassano completamente la tabella. full-screen imposta 100svh. custom espone uno slider, section_height_custom, che va da 0 a 100% con un default di 50 — e anche quel valore viene scritto direttamente come svh, non in pixel.
Entrambi i temi offrono un hero Large. Non sono comparabili, per due ragioni distinte.
La base rem è diversa. Abbiamo cercato in tutti i file del tema: Horizon non sovrascrive mai la dimensione del font di root, quindi 1rem è il valore predefinito del browser, 16px. Dawn imposta font-size: calc(var(--font-body-scale) * 62.5%), che rende 1rem pari a 10px. Lo stesso 35rem significherebbe 560px in Horizon e 350px in Dawn.
L’unità è diversa sopra il breakpoint. Il Large di Dawn è un valore fisso di 720px su desktop, uguale su ogni schermo. Il Large di Horizon è 80svh, quindi cresce con il display: circa 720px su una finestra alta 900px e circa 1152px su una da 1440px.
Se stai portando un design da un tema all’altro, questa è l’impostazione che più probabilmente lo romperà.
Horizon costruisce un srcset da due scale hardcoded, alle righe 103 e 105 della sezione:
| Scala | Intervallo | Passaggi | Larghezze richieste |
|---|---|---|---|
| Media a piena larghezza | 832–3840px | 6 | 832, 1200, 1600, 1920, 2560, 3840 |
| Media diviso | 416–1600px | 5 | 416, 600, 800, 1200, 1600 |
Carica 3840px di larghezza per un hero che occupa tutta la pagina. La scala più stretta si ferma a 1600px perché lì ogni immagine occupa sempre solo una parte della larghezza.
Nota il gradino più basso: Horizon parte da 832px dove Dawn parte da 375px. Horizon semplicemente non serve una versione da telefono di un’immagine hero a piena larghezza, cosa che vale la pena sapere se il tuo traffico è prevalentemente mobile e su connessioni lente.
Dawn descrive i suoi blocchi all’interno dello schema della sezione. Horizon li nomina e tiene le descrizioni in una libreria condivisa, quindi leggere solo sections/hero.liquid non ti dice nulla su cosa può fare un blocco. Una volta ricostruiti, gli 8 tipi portano 104 impostazioni complessive:
| Tipo | Nome | Impostazioni | Definito 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 è una wildcard: accetta qualsiasi blocco del tema, ed è per questo che non ha impostazioni proprie. group è il più pesante con 36 impostazioni, perché è un contenitore di layout che ripete un livello più sotto la maggior parte dei controlli di allineamento e spaziatura della sezione stessa.
Per avere un ordine di grandezza: l’image banner di Dawn offre 3 tipi di blocco con 12 impostazioni in totale. L’hero di Horizon ne offre 8 con 104. Questa è la vera differenza tra i due temi, e non è visibile in nessun punto dell’editor del tema.
36 impostazioni, così come appaiono nell’editor:
| ID nel codice | Etichetta nell’editor | Tipo | Default | Intervallo / opzioni |
|---|---|---|---|---|
media_type_1 | Type | select | image | 2 opzioni |
image_1 | Image | image_picker | — | — |
video_1 | Video | video | — | — |
media_type_2 | Type | select | image | 2 opzioni |
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 opzioni |
image_1_mobile | Image | image_picker | — | — |
video_1_mobile | Video | video | — | — |
media_type_2_mobile | Type | select | image | 2 opzioni |
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 opzioni |
vertical_on_mobile | Vertical on mobile | checkbox | true | — |
horizontal_alignment | Alignment | select | flex-start | 4 opzioni |
vertical_alignment | Position | select | center | 3 opzioni |
align_baseline | Align text baseline | checkbox | false | — |
horizontal_alignment_flex_direction_column | Alignment | select | flex-start | 3 opzioni |
vertical_alignment_flex_direction_column | Position | select | center | 4 opzioni |
gap | Gap | range | 12 | 0–100px, passo 1 |
section_width | Width | select | page-width | 2 opzioni |
section_height | Height | select | medium | 6 opzioni |
section_height_custom | Custom height | range | 50 | 0–100%, passo 1 |
background_color | Background color | color | — | — |
toggle_overlay | Media overlay | checkbox | — | — |
overlay_color | Overlay color | color | #00000026 | — |
overlay_style | Overlay style | select | solid | 2 opzioni |
gradient_direction | Gradient direction | select | to top | 2 opzioni |
blurred_reflection | Blurred reflection | checkbox | false | — |
reflection_opacity | Reflection opacity | range | 75 | 0–100%, passo 1 |
padding-block-start | Top | range | 0 | 0–100px, passo 1 |
padding-block-end | Bottom | range | 0 | 0–100px, passo 1 |
Vale la pena segnalare:
Quattro impostazioni di allineamento distinte. horizontal_alignment e vertical_alignment si applicano quando il contenuto scorre in riga; horizontal_alignment_flex_direction_column e vertical_alignment_flex_direction_column si applicano quando si impila. Cambiane una e l’altra conserva il vecchio valore: è il motivo tipico per cui un hero appare corretto su desktop e sbagliato su mobile.
reflection_opacity — uno slider da 0 a 100%, default 75, abbinato a blurred_reflection. Dawn non ha un equivalente.
Quattro slot immagine e quattro slot video. L’hero prende i media due volte — desktop e un set mobile separato dietro custom_mobile_media, il cui default è false.
Apri sections/hero.liquid e leggi il blocco {% schema %} in fondo per le impostazioni. Le altezze sono alle righe da 143 a 157 di snippets/theme-styles-variables.liquid. Le descrizioni dei blocchi sono in blocks/ — un file per tipo, denominato esattamente come nella colonna type qui sopra.
Horizon non ha release, quindi non c’è alcun numero di versione da citare. Questa pagina indica invece il commit da cui è stata letta; se il tema cambia, questi dati cambiano con esso.
3840px di larghezza per un hero a piena larghezza. Horizon richiede 6 larghezze da 832px a 3840px. Per i media divisi usa una seconda scala di 5 larghezze che si ferma a 1600px, quindi lì 1600px sono sufficienti.
Su mobile le opzioni fisse sono 240px, 400px e 560px. Sopra 40em diventano 40svh, 55svh e 70svh, e sopra 60em 50svh, 65svh e 80svh. Full-screen è 100svh e Custom è uno slider letto direttamente come svh.
Per due motivi. Horizon non sovrascrive mai la dimensione del font di root, quindi 1rem è il valore predefinito del browser, 16px, mentre Dawn imposta 62.5% e ottiene 10px. E sopra il breakpoint Horizon misura in svh, una percentuale della finestra, mentre Dawn resta su un valore fisso.
36 sulla sezione stessa, più 8 tipi di blocco che portano 104 impostazioni complessive. Le impostazioni dei blocchi non sono nel file della sezione — Horizon le tiene in una libreria condivisa blocks/.
In un file per ogni tipo di blocco sotto blocks/ nel tema. Lo schema dell'hero elenca solo i nomi dei tipi, quindi leggere la sola sezione mostra blocchi senza alcuna impostazione. La voce @theme è una wildcard che accetta qualsiasi blocco del tema.