dawnのコレクションリストに背景画像を作り、PC用とスマホ用に切り替えるようにしたい。

Topic summary

Dawnテーマのコレクションリストに背景画像を追加し、PC用とスマホ用で切り替える方法についての質問です。

質問者の試み:

  • スキーマで2つの画像ピッカー(img-backgroundimg-background_sp)を作成
  • HTMLの外枠に画像を読み込む方法を検討中だが、実装方法が不明

提案された解決策:

  1. HTMLに両方の画像を適用し、data-bg-sp属性でスマホ用画像を指定
  2. CSSメディアクエリ(@media screen and (max-width: 768px))でスマホサイズ時に切り替え
  3. JavaScriptでdata-bg-sp属性を読み込み、背景画像を動的に変更

追加の質問:

  • JavaScriptコードをどこに記載すべきか
  • 質問者はassetsbackground-image.jsファイルを作成し、<script>タグで読み込みを試みたが、スマホサイズで「NO IMAGE」と表示される問題が発生

回答:
JavaScriptコードはセクションファイル内に<script>タグで直接記述すれば、別ファイルを作成せずに対応可能との助言がありました。

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

dawnのコレクションリストに背景画像を作り、PC用とスマホ用に背景画像を切り替えるようにしたいのですが、

どのような施策をすれば良いのでしょうか。

自分が思ったのが、schemaでPCとスマホ用を作成し、

{
“type”: “image_picker”,
“id”: “img-background”,
“label”: “t:sections.collection-list.settings.img-background.label”
},
{
“type”: “image_picker”,
“id”: “img-background_sp”,
“label”: “t:sections.collection-list.settings.img-background_sp.label”
},

↓一番外枠に画像を読み込むように考えたのですが、

PC用の背景画像は読み込むようにできたものの、
スマホ用をどのようにして読み込むようにするのかがわからなくて
このようなやり方ではなく、違うやり方があるのでしょうが・・・
調べてもどのようにすれば良いのかわからなくて、わかる方教えていただけると幸いです。

あまり詳しくないので説明が上手くできていないかもですが、よろしくお願いいたします。

1 Like

質問拝見しました。

スキーマで二つの画像を選べるようにしているところまでは問題ございません!

あとはスマホのサイズの時に画像を切り替えるようにしてあげればいいので以下手順でおすすめします。

HTMLに両方の画像を適用

HTMLにPC用とスマホ用の画像を分けて適用します。

ここではデフォルトでPC用の画像を表示し、スマホサイズでスマホ用の画像を適用するCSSを使います。

<div class="collection-list__image color-{{ section.settings.color_scheme }} gradient"
style="background-image: url('{{ section.settings.img_background | img_url: 'master' }}');"
data-bg-sp="{{ section.settings.img_background_sp | img_url: 'master' }}">
</div>

### CSSでメディアクエリを使ってスマホ用の画像を切り替える

CSSでメディアクエリを使用して、スマホサイズ時にdata-bg-sp属性を利用して背景画像を変更します。

css

.collection-list__image {
  background-size: cover;
  background-position: center;
}

@media screen and (max-width: 768px) {
  .collection-list__image {
    background-image: url(var(--bg-sp));
  }
}

JavaScriptでスマホ用背景画像を動的に読み込む

Liquidの出力はCSSに直接変数を渡せないため、JavaScriptを使ってスマホ用背景画像を動的に読み込みます。

javascript

document.addEventListener('DOMContentLoaded', function () {
  const bgElements = document.querySelectorAll('.collection-list__image');
  bgElements.forEach(el => {
    const bgSp = el.getAttribute('data-bg-sp');
    if (window.matchMedia('(max-width: 768px)').matches && bgSp) {
      el.style.setProperty('background-image', `url(${bgSp})`);
    }
  });
});

上記のコード、css、JavaScriptで画像の切り替えが可能かと思いますので参考にしていただけますと幸いです、

なにかご質問があれば、お気軽にご相談ください。
お悩み解決できましたら、ベストアンサー、いいねいただけると励みになります。
何卒よろしくお願いします。

株式会社フルバランス

株式会社フルバランス様。

返信ありがとうございます!!

アドバイス頂いた内容にご質問がございます。

javascriptの文章はどのあたり記載すればいいのでしょうか??

コレクションリスト内にjavascriptを載せる?のでしょうか?

詳しくない者なので初歩的な質問で申し訳ございませんが教えてください。

よろしくお願いいたします。

株式会社フルバランス様。

度々の質問失礼いたします。

自分がやってみたことなのですが、

まずjavascriptを読み込む為にassetsに専用ファイルを作り(background-image.jsを作り)、

そしてコレクションリストの上のところにjavascriptを読み込むようにして

読み込むようにするかと思い、トライしてみたのですが

画像がスマホサイズすると背景画像がNO IMAGEと表示されます。

スマホ画像を表示する為に使用するurl(var(–bg-sp));に対して何か施策が必要なのでしょうか?

それとも自分が行ったやり方ではなくjavascriptiを読み込むようにするのでしょうか??

度々の質問となり、お手数をおかけしますが教えて下さい!!

よろしくお願い致します。

1 Like

これを表示しているセクションファイル内にタグで囲って記述で問題ございません。

そうすれば別でjsのファイルを作るなどせずに対応できるかと思います。


ご確認よろしくお願いいたします。