---
title: "Serve responsive and multi-size slots"
description: "Recipe for slots that accept more than one creative size — flexible placement size, the Any-size and Custom ad units, per-breakpoint placements, and the size-matching pitfalls that silently stop serving."
type: "howto"
audience: [network-manager, publisher]
keywords: [responsive ads, flexible size, variable banner sizes, multi-size, any size, custom ad unit, size matching, fit container, breakpoints]
ui_path: "Account → Publishers → site → zone → placement"
---

Fetch the complete documentation index at: https://epom.com/ad-server/docs/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# Serve responsive and multi-size slots

Your page is responsive: the same slot renders 728×90 on desktop, 300×250 on mobile, and
maybe a 336×280 when the campaign only has that. Epom matches banners to placements **by
size**, strictly, so multi-size serving is a deliberate configuration — this recipe covers
the three strategies and the traps between them.

## Who this is for

Publishers and network managers configuring inventory.

## The three strategies

| Strategy | How it works | Choose when |
|---|---|---|
| **Flexible placement** | One placement with max dimensions + **Flexible placement size**; any banner that **fits inside** (width ≤ W and height ≤ H) is eligible | One slot, several accepted sizes, layout tolerates variation |
| **Per-breakpoint placements** | One placement per size; your page picks which tag to load per breakpoint | You need exact creative-slot fit and clean per-size reporting |
| **Any-size placement** | The **Any Size** ad unit accepts every banner size | Catch-all slots where dimensions truly don't matter |

## Prerequisites

- Existing site and zone ([inventory setup](https://epom.com/ad-server/docs/guides/inventory.md)).
- Knowledge of which creative sizes your demand actually runs — the strategy is only as
  good as the sizes it admits.

## Steps

1. **Pick the strategy** from the table above. Default to per-breakpoint placements when in
   doubt — exact matching is the most predictable.
2. **Flexible placement:** set the placement **Size** to the *largest* dimensions the slot
   can show, then tick **Flexible placement size** under **Advanced settings**
   ([field details](https://epom.com/ad-server/docs/guides/inventory/placement-display.md)). Matching switches from
   "equals exactly" to "fits inside": a 300×250 banner serves into a flexible 336×280 slot,
   a 728×90 does not.
   ![Placement size selector with Flexible placement size ticked](https://epom.com/docs-images/ad-server/responsive-flexible-sizes/flexible-size-toggle.webp)
3. **Per-breakpoint placements:** create one placement per size (e.g. `Header-728x90`,
   `Header-320x50`), put each tag in your template, and let your page's own breakpoint logic
   (CSS/JS) decide which tag to load. Each placement reports separately — you get per-size
   fill and eCPM for free.
4. **Unusual dimensions:** pick the **Custom** ad unit and type the exact **Width** and
   **Height** ([creating placements](https://epom.com/ad-server/docs/guides/inventory/placements-create.md)). If a
   non-standard size recurs across the network, ask your network manager to have it added as a
   named custom ad size (an administrator step,
   [other admin tools](https://epom.com/ad-server/docs/guides/admin/admin-tools.md)) so everyone picks it consistently.
   ![Custom ad unit with editable width and height](https://epom.com/docs-images/ad-server/responsive-flexible-sizes/custom-size-inputs.webp)
5. **Keep the page layout safe.** Flexible matching does not resize creatives — a smaller
   banner renders at its own size inside your slot. On Mobile Site and Non-standard
   placements, the tag's **Fit container** option (the **Settings** tab of the **Ad tags &
   API** card) constrains rendering when the slot must stay fixed
   ([tag options](https://epom.com/ad-server/docs/guides/inventory/ad-tags-and-api.md)).
6. **Verify the match.** After configuring, open the placement's linking card — it offers
   only *suitable* banners, so if an expected creative is missing there, the size rules
   refused it. The full suitability table lives in
   [Hierarchy and linking](https://epom.com/ad-server/docs/concepts/hierarchy-and-linking.md).

## Corner cases and gotchas

> **Corner case — the silent unlink.** Saving a banner re-checks all its links and silently
> removes placements that are no longer suitable. Change a creative from 300×250 to 336×280
> and every exactly-matched 300×250 placement quietly disappears from its linking list — no
> warning. After any resize, re-open the linking card and re-link.

> **Corner case — size is compared only on some placement types.** The serving side compares a
> banner's size with the placement's on **Site** placements (and Email). **Mobile Site** and
> **Non-standard** placements link a banner by placement type alone, so any banner made for that
> type is suitable whatever its size, and **Flexible placement size** changes nothing there. Plan
> multi-size slots on Site placements.

> **Corner case — flexible widens matching, not rendering.** A 120×600 banner serving into
> a flexible 300×600 slot renders at 120×600 and leaves your slot mostly empty; a banner
> near the max can still overflow padding-sensitive layouts. Curate which sizes you actually
> link rather than assuming "fits inside" means "looks right".

> **Corner case — programmatic banners that use the placement size need a concrete size.**
> An OpenRTB DSP banner with *Use placement size* serves into any placement with defined
> dimensions but **refuses placements without one** — an Any-size slot gets no such demand.
> If programmatic matters, prefer flexible-with-dimensions over Any size
> ([OpenRTB banners](https://epom.com/ad-server/docs/guides/advertising/banner-openrtb-dsp.md)).

> **Corner case — a wrong fixed unit matches nothing, silently.** Banners link and Rules
> match by size; a placement saved with the wrong ad unit simply never serves, with no error
> anywhere in the UI. When a new slot stays empty, size is the first thing to check —
> [Ads are not serving](https://epom.com/ad-server/docs/troubleshooting/ad-not-serving.md).

## A tag inside a hidden breakpoint container (desktop/mobile versions of the page)

Page builders often show one module on desktop and another on mobile by hiding the other with
CSS (`display: none` at a breakpoint). The Epom tag does not look at that:

- **A hidden tag still asks for an ad and counts it.** The loader never measures the slot or
  checks whether it is visible; it sends the request as soon as the page is ready. The ad's
  markup runs inside the hidden container, so the impression is recorded although nobody can see
  it — the desktop tag on a phone burns impressions, and reports show both slots served.
- **Hiding the `<ins>` itself does not work.** The loader sets `display: block` on the tag's own
  `<ins>` element, which overrides a stylesheet rule aimed at that element (one without
  `!important`). Hide a wrapper around it instead.
- **A slot shown later can stay empty or tiny.** With **Fit container** the ad takes 100% of its
  container, and a container that was zero-sized when the ad arrived renders it at zero. A
  breakpoint switch after load (rotating a tablet) does not request a new ad.

The fix is to put **only the tag that applies** on the page: render the module server-side per
device, or insert the slot from a script after a `matchMedia` check (with the **Mount JS** tag,
or an `<ins>` plus `init()` — see [The JavaScript API](https://epom.com/ad-server/docs/guides/inventory/ad-tags-api-and-vast.md#the-javascript-api)).
Or use one responsive placement for both layouts (the strategies above), so there is nothing to
hide.

## Per-role notes

- **Publisher:** size, **Flexible placement size** and the **Linked banners** check are yours.
  **Fit container** (Mobile Site and Non-standard placements) shapes the Universal JS tag, which
  the stock role holds once the network has an ad-serving domain.
- **Network manager:** the same. Named custom sizes (step 4) are maintained in the admin area.
- **Can view share:** size settings are read-only, but the linking card still shows what
  matches.

## Related

- [Create a placement](https://epom.com/ad-server/docs/guides/inventory/placements-create.md)
- [Display placements](https://epom.com/ad-server/docs/guides/inventory/placement-display.md)
- [Hierarchy and linking (size suitability rules)](https://epom.com/ad-server/docs/concepts/hierarchy-and-linking.md)
- [Ad tags, invocation codes and the API](https://epom.com/ad-server/docs/guides/inventory/ad-tags-and-api.md)
- [OpenRTB (DSP) banners](https://epom.com/ad-server/docs/guides/advertising/banner-openrtb-dsp.md)
- [Monetize a website with display ads](https://epom.com/ad-server/docs/use-cases/monetize-website-display.md)