jelonyx
Section library · Section 07

Split image/text story section
for Dawn and Horizon.

A clean, 50/50 split layout perfect for product feature highlights, brand stories, or general landing page components. Includes options to swap the image position on desktop and handles responsive stacking for mobile natively.

TypeSection
Filesections/jlx-split-story.liquid
Schema settings7 section settings
CostFree
Compatible with:Dawn 12+HorizonMost OS 2.0 themes

The code

One file. Paste the whole thing into a new section.

sections/jlx-split-story.liquid
Liquid · CSS · Schema
{% comment %}
  Jelonyx · Split Story Section
  Compatible with Dawn 12+, Horizon, and most OS 2.0 themes
  Source: jelonyx.com/shopify/sections/split-story
{% endcomment %}

<section
  id="jlx-split-{{ section.id }}"
  class="jlx-split{% if section.settings.image_position == 'right' %} jlx-split--reverse{% endif %}"
>
  <div class="jlx-split__inner">
    
    <div class="jlx-split__media">
      {%- if section.settings.image != blank -%}
        <img
          src="{{ section.settings.image | image_url: width: 800 }}"
          alt="{{ section.settings.image.alt | escape }}"
          loading="lazy"
          width="{{ section.settings.image.width }}"
          height="{{ section.settings.image.height }}"
          class="jlx-split__image"
        >
      {%- else -%}
        {{ 'image' | placeholder_svg_tag: 'jlx-split__placeholder' }}
      {%- endif -%}
    </div>

    <div class="jlx-split__content">
      {%- if section.settings.subheading != blank -%}
        <p class="jlx-split__subheading">{{ section.settings.subheading }}</p>
      {%- endif -%}

      {%- if section.settings.heading != blank -%}
        <h2 class="jlx-split__heading">{{ section.settings.heading }}</h2>
      {%- endif -%}

      {%- if section.settings.text != blank -%}
        <div class="jlx-split__text">{{ section.settings.text }}</div>
      {%- endif -%}

      {%- if section.settings.button_label != blank -%}
        <a href="{{ section.settings.button_link | default: '#' }}" class="jlx-split__button">
          {{ section.settings.button_label }}
        </a>
      {%- endif -%}
    </div>

  </div>
</section>

<style>
  #jlx-split-{{ section.id }} {
    padding: clamp(40px, 8vw, 80px) 20px;
    background: var(--color-background, #fff);
  }
  .jlx-split__inner {
    max-width: 1200px;
    margin: 0 auto;
    display: grid;
    gap: 40px;
    grid-template-columns: 1fr;
    align-items: center;
  }
  @media screen and (min-width: 768px) {
    .jlx-split__inner {
      grid-template-columns: 1fr 1fr;
      gap: 60px;
    }
  }
  .jlx-split--reverse .jlx-split__inner {
    direction: rtl;
  }
  .jlx-split--reverse .jlx-split__content,
  .jlx-split--reverse .jlx-split__media {
    direction: ltr;
  }
  .jlx-split__media {
    border-radius: 8px;
    overflow: hidden;
  }
  .jlx-split__image {
    display: block;
    width: 100%;
    height: auto;
    object-fit: cover;
  }
  .jlx-split__placeholder {
    display: block;
    width: 100%;
    height: auto;
    background-color: #f3f3f3;
    fill: #ccc;
  }
  .jlx-split__subheading {
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--color-foreground-secondary, #6b6b6b);
    margin: 0 0 10px;
  }
  .jlx-split__heading {
    font-size: clamp(28px, 4vw, 42px);
    font-weight: 700;
    line-height: 1.2;
    color: var(--color-foreground, #1a1a1a);
    margin: 0 0 20px;
  }
  .jlx-split__text {
    font-size: 16px;
    line-height: 1.6;
    color: var(--color-foreground-secondary, #4a4a4a);
    margin: 0 0 30px;
  }
  .jlx-split__button {
    display: inline-block;
    padding: 12px 24px;
    background: var(--color-button, #1a1a1a);
    color: var(--color-button-text, #fff);
    text-decoration: none;
    font-weight: 600;
    border-radius: 4px;
    transition: opacity 0.2s;
  }
  .jlx-split__button:hover {
    opacity: 0.8;
  }
</style>

{% schema %}
{
  "name": "Split story",
  "tag": "section",
  "settings": [
    {
      "type": "image_picker",
      "id": "image",
      "label": "Image"
    },
    {
      "type": "select",
      "id": "image_position",
      "label": "Desktop image placement",
      "options": [
        { "value": "left", "label": "Image first" },
        { "value": "right", "label": "Image second" }
      ],
      "default": "left"
    },
    {
      "type": "text",
      "id": "subheading",
      "label": "Subheading",
      "default": "Our Story"
    },
    {
      "type": "text",
      "id": "heading",
      "label": "Heading",
      "default": "Feature highlight"
    },
    {
      "type": "richtext",
      "id": "text",
      "label": "Text",
      "default": "<p>Share details about your brand, product features, or values with your customers.</p>"
    },
    {
      "type": "text",
      "id": "button_label",
      "label": "Button label",
      "default": "Learn more"
    },
    {
      "type": "url",
      "id": "button_link",
      "label": "Button link"
    }
  ],
  "presets": [
    {
      "name": "Split story",
      "category": "Image"
    }
  ]
}
{% endschema %}

How to add the section

  1. 01
    Open your theme code editor.

    In Shopify Admin, go to Online Store → Themes. On your active theme, click the three-dot menu and select Edit code.

  2. 02
    Create a new section file.

    Under the Sections folder, click Add a new section. Name it jlx-split-story and click Done.

  3. 03
    Paste the full section code.

    Delete any placeholder content in the new file, paste the entire code block above, and save.

  4. 04
    Add the section to a template.

    Open the theme editor (Customize). Navigate to the page template where you want the section. Click Add section and select Split story.

  5. 05
    Configure settings.

    Select an image, choose if you want it on the left or right on desktop, and fill in the text and button fields. Save your changes.

Schema settings

Section-level settings:

SettingTypeNotes
imageimage_pickerThe visual media for the section.
image_positionselectChoose left or right alignment for desktop displays. Stacks vertically on mobile.
subheadingtextSmall uppercase label above the main heading.
headingtextPrimary section heading.
textrichtextBody content for the section. Supports basic formatting.
button_labeltextCall to action text.
button_linkurlDestination for the button click.
Shopify Section Build

Need this built for your store?

If you want this styled to perfectly match your brand, extended with video support, or set up with custom animations, we can handle it.