Loading
Copy-paste a theme-editor section for marketing - A scrolling strip of press or partner marks. Ships with text placeholders - swap in your real logos as images.
As featured in
Blocks take real logo images; text shows until assets are uploaded.
{%- comment -%} Uses image blocks for real logos; text renders as a fallback wordmark so the layout still works before assets are uploaded.{%- endcomment -%}{%- if section.blocks.size > 0 -%} <div class="gpl-logos" style="--gpl-speed: {{ section.settings.speed }}s;"> <p class="gpl-logos__eyebrow">{{ section.settings.eyebrow | escape }}</p> <div class="gpl-logos__mask"> <div class="gpl-logos__track"> {%- for i in (1..2) -%} {%- for block in section.blocks -%} <span class="gpl-logos__item" {{ block.shopify_attributes }} {% if i == 2 %}aria-hidden="true"{% endif %}> {%- if block.settings.image != blank -%} {{ block.settings.image | image_url: height: 48 | image_tag: loading: 'lazy', class: 'gpl-logos__img', alt: block.settings.name }} {%- else -%} <span class="gpl-logos__word">{{ block.settings.name | escape }}</span> {%- endif -%} </span> {%- endfor -%} {%- endfor -%} </div> </div> </div>{%- endif -%} {% schema %}{ "name": "Logo marquee", "settings": [ { "type": "text", "id": "eyebrow", "label": "Small heading", "default": "As featured in" }, { "type": "range", "id": "speed", "label": "Seconds per loop", "min": 6, "max": 40, "step": 2, "default": 16 } ], "blocks": [ { "type": "logo", "name": "Logo", "settings": [ { "type": "image_picker", "id": "image", "label": "Logo image" }, { "type": "text", "id": "name", "label": "Name (fallback text)", "default": "Press name" } ] } ], "max_blocks": 14, "presets": [{ "name": "Logo marquee", "blocks": [{ "type": "logo" }, { "type": "logo" }, { "type": "logo" }, { "type": "logo" }] }]}{% endschema %} {% stylesheet %}.gpl-logos { padding: 1.5rem 0; text-align: center; }.gpl-logos__eyebrow { margin: 0 0 1rem; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; opacity: 0.55; }.gpl-logos__mask { overflow: hidden; mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent); }.gpl-logos__track { display: inline-flex; align-items: center; gap: 3rem; white-space: nowrap; animation: gpl-logos var(--gpl-speed, 16s) linear infinite; will-change: transform;}.gpl-logos:hover .gpl-logos__track { animation-play-state: paused; }.gpl-logos__item { display: inline-flex; align-items: center; }.gpl-logos__img { height: 1.75rem; width: auto; opacity: 0.7; }.gpl-logos__word { font-size: 1rem; font-weight: 700; opacity: 0.55; letter-spacing: 0.02em; }@keyframes gpl-logos { to { transform: translateX(-50%); } }@media (prefers-reduced-motion: reduce) { .gpl-logos__track { animation: none; }}{% endstylesheet %}