Video with Text: Video won't work on mobile

Topic summary

A user created a custom Shopify section called “video-with-text.liquid” that displays a video alongside text content. The implementation works correctly on desktop but fails to function on mobile devices.

Code Details:

  • Uses HTML5 <video> element with autoplay, loop, and muted attributes
  • Includes mobile-specific attributes (webkit-playsinline and playsinline)
  • Implements responsive grid layout with CSS
  • Supports customizable blocks for heading, text, and button elements

Community Response:

  • One commenter suggested the code appears correct and recommended changing the video format
  • Multiple users report experiencing the same mobile playback issue

Current Status:
The problem remains unresolved. No definitive solution has been identified for why the video fails to play on mobile devices despite including standard mobile video attributes.

Summarized with AI on November 14. AI used: claude-sonnet-4-5-20250929.

Hello, I added a video with text with the following code. It works great for desktop, but mobile does not work. Can anyone please help me out??

Here is the code:

Created a new section with this code, called “video-with-text.liquid”

Coded with:

{{ ‘component-video-with-text.css’ | asset_url | stylesheet_tag }}

{%- for block in section.blocks -%} {% case block.type %} {%- when 'heading' -%}

{{ block.settings.heading | escape }}

{%- when 'text' -%}
{{ block.settings.text }}
{%- when 'button' -%} {%- if block.settings.button_label != blank -%} {{ block.settings.button_label | escape }} {%- endif -%} {%- endcase -%} {%- endfor -%}

{% schema %}
{
“name”: “Video with text”,
“class”: “spaced-section spaced-section–full-width”,
“settings”: [
{
“type”: “select”,
“id”: “color_scheme”,
“options”: [
{
“value”: “background-1”,
“label”: “Background 1”
},
{
“value”: “background-2”,
“label”: “Background 2”
},
{
“value”: “inverse”,
“label”: “Inverse”
},
{
“value”: “accent-1”,
“label”: “Accent 1”
},
{
“value”: “accent-2”,
“label”: “Accent 2”
}
],
“default”: “background-1”,
“label”: “Color scheme”
},
{
“type”: “text”,
“id”: “video_url”,
“default”: “https://cdn.shopify.com/s/files/1/0050/2779/0919/files/1_1_Cutting_fruit_H.mp4?v=1603372350”,
“label”: “Video url”,
“info”: “Upload your video to Shopify then paste the url here”
},
{
“type”: “select”,
“id”: “height”,
“options”: [
{
“value”: “adapt”,
“label”: “Adapt”
},
{
“value”: “small”,
“label”: “Small”
},
{
“value”: “large”,
“label”: “Large”
}
],
“default”: “adapt”,
“label”: “Video ratio”
},
{
“type”: “select”,
“id”: “layout”,
“options”: [
{
“value”: “image_first”,
“label”: “Video first”
},
{
“value”: “text_first”,
“label”: “Text first”
}
],
“default”: “image_first”,
“label”: “Desktop layout”,
“info”: “Video first is the default mobile layout.”
}
],
“blocks”: [
{
“type”: “heading”,
“name”: “t:sections.video-with-text.blocks.heading.name”,
“limit”: 1,
“settings”: [
{
“type”: “text”,
“id”: “heading”,
“default”: “Image with text”,
“label”: “Heading”
}
]
},
{
“type”: “text”,
“name”: “Text name”,
“limit”: 1,
“settings”: [
{
“type”: “richtext”,
“id”: “text”,
“default”: “

Pair text with an image to focus on your chosen product, collection, or blog post. Add details on availability, style, or even provide a review.

”,
“label”: “Description”
}
]
},
{
“type”: “button”,
“name”: “Button name”,
“limit”: 1,
“settings”: [
{
“type”: “text”,
“id”: “button_label”,
“default”: “Button label”,
“label”: “Button label”,
“info”: “Leave the label blank to hide the button.”
},
{
“type”: “url”,
“id”: “button_link”,
“label”: “Button link”
}
]
}
],
“presets”: [
{
“name”: “Video with text”,
“blocks”: [
{
“type”: “heading”
},
{
“type”: “text”
},
{
“type”: “button”
}
]
}
]
}
{% endschema %}

Created a new asset called “component-video-with-text.css” with this code:

.video-with-text {
margin-top: 5rem;
}

.video-with-text:not(.color-scheme-background-1) {
margin-bottom: 5rem;
}

@media screen and (min-width: 750px) {
.video-with-text {
margin-bottom: calc(5rem + var(–page-width-margin));
}
}

.video-with-text .grid {
margin-left: 0;
margin-bottom: 0;
}

.video-with-text__grid {
overflow: hidden;
}

@media screen and (min-width: 750px) {
.video-with-text__grid–reverse {
flex-direction: row-reverse;
}
}

.video-with-text__media {
background-color: transparent;
min-height: 100%;
}

.video-with-text__media–small {
height: 19.4rem;
}

.video-with-text__media–large {
height: 40rem;
}

@media screen and (min-width: 750px) {
.video-with-text__media–small {
height: 31.4rem;
}

.video-with-text__media–large {
height: 60rem;
}
}

.video-with-text__media–placeholder {
background-color: rgba(var(–color-foreground), 0.04);
position: relative;
overflow: hidden;
}

.video-with-text__media–placeholder.video-with-text__media–adapt {
height: 20rem;
}

@media screen and (min-width: 750px) {
.video-with-text__media–placeholder.video-with-text__media–adapt {
height: 30rem;
}
}

.video-with-text__media–placeholder > svg {
position: absolute;
left: 50%;
max-width: 80rem;
top: 50%;
transform: translate(-50%, -50%);
width: 100%;
fill: currentColor;
}

.video-with-text__content {
display: flex;
flex-direction: column;
align-items: flex-start;
height: 100%;
justify-content: center;
padding: 4rem calc(4rem / var(–font-body-scale)) 5rem;
}

@media screen and (min-width: 750px) {
.video-with-text__grid–reverse .video-with-text__content {
margin-left: auto;
}
}

@media screen and (min-width: 750px) {
.video-with-text__content {
padding: 6rem 7rem 7rem;
}
}

.video-with-text__content > * + * {
margin-top: 2rem;
}

.video-with-text__content > .video-with-text__text:empty ~ a {
margin-top: 2rem;
}

.video-with-text__content > :first-child:is(.video-with-text__heading) {
margin-top: 0;
}

.video-with-text__content :last-child:is(.video-with-text__heading) {
margin-bottom: 0;
}

.video-with-text__content .button + .video-with-text__text {
margin-top: 2rem;
}

.video-with-text__content .video-with-text__text + .button {
margin-top: 3rem;
}

.video-with-text__heading {
margin-bottom: 0;
}

.video-with-text__text p {
margin-top: 0;
margin-bottom: 1rem;
}

.video-with-text__content {
padding-left: 15px !important;
padding-right: 15px !important;
}

the code is perfect. change video format to MP4

Have you solved the issue? I have the same one.

I’ve done this and it has not solved the issue