Request to Modify Product Slider Section Layout Code - Dawn Theme

Topic summary

A user is customizing a product slider section in Shopify’s Dawn theme to match a reference layout from bookshop.org. The desired layout shows products in a horizontal carousel format.

Initial Request:

  • User provided current layout screenshots and existing code snippet
  • Wanted to modify the collection display to match the reference design

Iterative Code Modifications:

  1. EBOOST provided initial code solution with Flickity carousel implementation
  2. User requested padding reduction between product images
  3. EBOOST suggested removing specific padding code
  4. User reported images appearing too large after width adjustment to 100%
  5. EBOOST provided revised code to match the reference screenshot more closely
  6. User confirmed satisfaction with the visual result

New Issue Identified:
User reported navigation problems:

  • Clicking on any slider consistently jumps to the first slider in the collection instead of the intended one
  • Swipe arrow functionality only moves the first collection slider, ignoring others on the page

EBOOST provided updated code attempting to resolve the navigation issue. The discussion remains ongoing as the navigation fix awaits testing/confirmation.

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

Hi

I have attached a screenshot for reference, highlighting the desired layout that I would like to achieve.

https://bookshop.org/

Currently, the collection is displayed differently from what I envision. Below, I have included the code snippet responsible for generating the collection layout. Could you please assist me in modifying this code to match the layout shown in the screenshot?

Current Layout

Snippet Code

<style>

  .dawn-product-slider {
    max-width: 1300px;
    margin: auto;
    padding: 0 0px;
    padding-bottom: 0px;
    margin-top: 0px;
  }
  .dawn-product-slider img {
      width: 55%;
  }
  .dawn-product-slider .carousel-cell {
    background: #fff;
    border-radius: 1px;
    margin: auto;
    padding: 2px;
    margin: 2px;
    width: calc(32% - 10px);
  }
  .product-btn {
      width: 100%;
  }
  .dawn-product-slider a {
    color: black;
   	text-decoration: none; 
  }
  .dawn-product-slider a .title:hover {
   	text-decoration: underline; 
  }
  .dawn-product-slider a .title, .dawn-product-slider a .price {
   	margin: 0px;
  }
  .dawn-product-slider .flickity-button.flickity-prev-next-button.previous, 
  .dawn-product-slider .flickity-button.flickity-prev-next-button.next {
  	background: red;
    color: white;
  }
  .dawn-product-slider:focus-visible, .dawn-product-slider .carousel:focus-visible {
   	outline: unset;
    outline-offset: unset;
    box-shadow: unset; 
  }
  @media only screen and ( max-width: 767px ) {
    .dawn-product-slider .carousel-cell {
      width: calc(50% - 10px);
    }
  }
  @media only screen and ( max-width: 479px ) {
    .dawn-product-slider .carousel-cell {
      width: calc(100% - 10px);
    }
  }
.overflow-scroll-x {
    overflow-x: scroll;
}
  
</style>

<!-- CSS -->
<link rel="stylesheet" href="https://unpkg.com/flickity@2/dist/flickity.min.css">
<!-- JavaScript -->
<script src="https://unpkg.com/flickity@2/dist/flickity.pkgd.min.js"></script>
<div class="collection page-width">
    
  <div class="title-wrapper-with-link">
	<h2 class="title{% if section.settings.title == blank %} title--no-heading{% endif %}">{{ section.settings.title | escape }}</h2>
  </div>
</div>
<div class="dawn-product-slider">
   <div class="carousel">
      {% for block in section.blocks %}
      {% assign product = all_products[block.settings.product_item] %}
      <div class="carousel-cell">
         <a href="{{ product.url }}">
            <img data-flickity-lazyload="{{ product.featured_image | img_url: 'master' }}"  border="0" />

{% comment %}
           <p class="title">{{ product.title }}</p>
            <p class="price">{{ product.price | money }}</p>
{% endcomment %}
           
         </a>
      </div>
      {% endfor %}
   </div>
  
</div>
{% assign nav_range = section.settings.navigation_amount %}
{% style %}
	@media only screen and ( min-width: 1201px ) {
		{% if nav_range == 2 %}
        .dawn-product-slider .carousel-cell {
            width: calc(49% - 10px);
        }
		{% elsif nav_range == 3 %}
        .dawn-product-slider .carousel-cell {
          width: calc(32% - 10px);
        }
		{% elsif nav_range == 4 %}
        .dawn-product-slider .carousel-cell {
          width: calc(24% - 10px);
         }
		{% endif %}
    }
    .flickity-page-dots .dot {
    	background: {{ section.settings.navigation_color }};
    }
    .flickity-button-icon {
    	color: {{ section.settings.navigation_color }};
    }
{% endstyle %}
<script>
   var elem = document.querySelector('.dawn-product-slider .carousel');
   var flkty = new Flickity( elem, {
     contain: true,
     imagesLoaded: true,
     lazyLoad: 2,
     wrapAround: true,
     pageDots: false,
   });
   {% if request.design_mode %}
   document.addEventListener("shopify:section:load", function(event) {
     var elem = document.querySelector('.dawn-product-slider .carousel');
     var flkty = new Flickity( elem, {
       contain: true,
       imagesLoaded: true,
       lazyLoad: 2,
       wrapAround: true,
       pageDots: false,
     });
   });
   {% endif %}
</script>
{% schema %}
{
  "name": "Products slider",
  "settings": [
    {
      "type": "range",
      "id": "navigation_amount",
      "min": 2,
      "max": 6,
      "step": 1,
      "default": 6,
      "label": "Change the number of cards in view"
    },
    {
      "type": "color",
      "id": "navigation_color",
      "label": "Change color of the pagination|navigation|scrollbar"
    },
	{
      "type": "text",
      "id": "title",
      "default": "Products slider",
      "label": "t:sections.featured-collection.settings.title.label"
    }
  ] ,
  	"blocks": [
	{
        "type": "card",
        "name": "Product card",
        "settings": [
          {
            "type": "product",
            "id": "product_item",
            "label": "Choose the product you want to displayed"
          }
    	]
	}
  ] ,
  "presets": [
    {
      "name": "Product slider",
      "category":"Custom"
    }
  ]
}
{% endschema %}  

Hi @Charlo-007 ,

May I suggest you code below:


    

        ## {{ section.settings.title | escape }}
    

    
       

          {% for block in section.blocks %}
              {% assign product = all_products[block.settings.product_item] %}
              

                
                    
                    {% comment %}
                               

{{ product.title }}

                                

{{ product.price | money }}

                    {% endcomment %}
                
              

          {% endfor %}
       

        
            
        
        
            
        
    

  

{% schema %}
{
  "name": "Products slider",
  "settings": [
    {
      "type": "range",
      "id": "navigation_amount",
      "min": 2,
      "max": 6,
      "step": 1,
      "default": 6,
      "label": "Change the number of cards in view"
    },
    {
      "type": "color",
      "id": "navigation_color",
      "label": "Change color of the pagination|navigation|scrollbar"
    },
    {
      "type": "text",
      "id": "title",
      "default": "Products slider",
      "label": "t:sections.featured-collection.settings.title.label"
    }
  ] ,
    "blocks": [
    {
        "type": "card",
        "name": "Product card",
        "settings": [
          {
            "type": "product",
            "id": "product_item",
            "label": "Choose the product you want to displayed"
          }
        ]
    }
  ] ,
  "presets": [
    {
      "name": "Product slider",
      "category":"Custom"
    }
  ]
}
{% endschema %}

Thanks for code! can we remove padding between two product images in collection check @EBOOST

https://060ef5-5.myshopify.com/

Hi,

You can refer the screenshot below to remove code.

@EBOOST padding did not reduce

Hi,

You try to add code below:

width: 100%;

1 Like

now images look bigger :slightly_smiling_face: can we reduce size of image ? @EBOOST

Hi @Charlo-007 ,

would you like to show the same screenshot below?

yes!

You can replace code below:


    

        ## {{ section.settings.title | escape }}
    

    
       

          {% for block in section.blocks %}
              {% assign product = all_products[block.settings.product_item] %}
              

                
                    
                    {% comment %}
                               

{{ product.title }}

                                

{{ product.price | money }}

                    {% endcomment %}
                
              

          {% endfor %}
       

        
            
        
        
            
        
    

  

{% schema %}
{
  "name": "Products slider",
  "settings": [
    {
      "type": "range",
      "id": "navigation_amount",
      "min": 2,
      "max": 6,
      "step": 1,
      "default": 6,
      "label": "Change the number of cards in view"
    },
    {
      "type": "color",
      "id": "navigation_color",
      "label": "Change color of the pagination|navigation|scrollbar"
    },
    {
      "type": "text",
      "id": "title",
      "default": "Products slider",
      "label": "t:sections.featured-collection.settings.title.label"
    }
  ] ,
    "blocks": [
    {
        "type": "card",
        "name": "Product card",
        "settings": [
          {
            "type": "product",
            "id": "product_item",
            "label": "Choose the product you want to displayed"
          }
        ]
    }
  ] ,
  "presets": [
    {
      "name": "Product slider",
      "category":"Custom"
    }
  ]
}
{% endschema %}
1 Like

Great! Thank you very Much! :heart_eyes:

Hello, @EBOOST

When I attempt to navigate to this particular slider, it consistently slides to the first slider of the collection instead of the intended slider. Could you please review the code to address this issue?

https://community.shopify.com/c/shopify-design/product-slider-section-layout-issue-dawn-theme/m-p/2548981#M669449

Additionally, it seems that the swipe arrow functionality only moves the first collection slider within the section, neglecting the others

https://060ef5-5.myshopify.com/

Hi,

You try to code below


    

        ## {{ section.settings.title | escape }}
    

    
       

          {% for block in section.blocks %}
              {% assign product = all_products[block.settings.product_item] %}
              

                
                    
                    {% comment %}
                               

{{ product.title }}

                                

{{ product.price | money }}

                    {% endcomment %}
                
              

          {% endfor %}
       

        
            
        
        
            
        
    

  

{% schema %}
{
  "name": "Products slider",
  "settings": [
    {
      "type": "range",
      "id": "navigation_amount",
      "min": 2,
      "max": 6,
      "step": 1,
      "default": 6,
      "label": "Change the number of cards in view"
    },
    {
      "type": "color",
      "id": "navigation_color",
      "label": "Change color of the pagination|navigation|scrollbar"
    },
    {
      "type": "text",
      "id": "title",
      "default": "Products slider",
      "label": "t:sections.featured-collection.settings.title.label"
    }
  ] ,
    "blocks": [
    {
        "type": "card",
        "name": "Product card",
        "settings": [
          {
            "type": "product",
            "id": "product_item",
            "label": "Choose the product you want to displayed"
          }
        ]
    }
  ] ,
  "presets": [
    {
      "name": "Product slider",
      "category":"Custom"
    }
  ]
}
{% endschema %}