How can I make the modal popups in my Webflow CMS collection only open individually instead of all at once?

TL;DR
  • Wrap each CMS item’s modal and trigger in a shared parent and use Webflow interactions set to affect only nested elements.  
  • For advanced control, assign unique data-id attributes from the CMS and use custom JavaScript to target matching modals and triggers.

When using modals in a Webflow CMS Collection List, triggering one modal often opens all others due to shared classes or IDs. Here’s how to fix that so each modal only opens individually.

​

1. Understand the Problem

​

  • Webflow duplicates modal elements for each CMS item with the same classes and attributes.
  • When you trigger one modal (e.g., with an interaction on a button), all modals respond if they share the same target class or ID.

​

2. Use Unique Attributes per CMS Item

​

  • Each modal and its trigger should be uniquely targeted using a specific attribute, such as a combination of a custom data- attribute and the item's CMS ID or slug.
  • Webflow interactions can't dynamically target unique elements out of the box, so targeting needs to be scoped carefully.

​

3. Use Webflow’s Native Interactions with CMS-Friendly Structure

​

  • Wrap each CMS item (modal trigger and modal popup) inside a shared parent element like a div block.
  • Set all interactions (open/close modal) to target "Only children with this class" instead of selecting global classes.

​

4. Set Up the Interaction Properly

​

  • Select the trigger element inside a CMS item (e.g., a button).
  • Set up a Click or Tap interaction.
  • Use "Affect: Element" → "Class" and check "Limit to nested elements".
  • This makes sure that, when clicking the trigger, only the modal within the same CMS item opens.

​

5. Use Combo Classes or Custom Attributes for Advanced Control

​

  • If targeting still causes problems, consider adding a combo class or a custom data-id attribute from the CMS (e.g., from a unique field like slug or post ID).
  • Assign this data-id to both the modal trigger and modal popup inside each CMS item.
  • Use custom JavaScript (added in the page's <before body> embed area) to show/hide modals based on matching data-id values.

​

Summary

​

To make only one CMS modal open at a time, structure each modal and trigger within the same parent container inside the CMS item and use Webflow interactions set to affect nested elements only. For more control, use data- attributes and custom code for targeting.

Rate this answer

Other Webflow Questions