Design

Popup Design Best Practices: Anatomy of a Popup That Converts

A popup that works is not a prettier popup — it is a smaller, quieter, more obvious one. Here is the anatomy, element by element: size, hierarchy, contrast, imagery, the close button, the mobile keyboard and the accessibility rules, with the numbers I would actually start from.

📅 Updated July 2026 ⏱ 14 min read ✍️ By ChilliPopup
Popup design best practices in the ChilliPopup editor: width and height in pixels, background colour and gradient controls beside a live preview of the popup

Good popup design comes down to three things: one job, one accent colour, one obvious way out. Size, hierarchy, imagery, field count, motion and mobile layout are all downstream of those. Get them right and a popup stops reading as an interruption and starts reading as an offer.

What follows is the anatomy, element by element, with the numbers I would start from, a do/don't line for each, and an honest note on what you can actually prove afterwards.

Key Takeaways

  • One popup, one job. One headline, one input, one button. A second offer on the same card does not double your chances — it splits the attention you just interrupted someone to get.
  • Size it to the ask. 560–680 px wide and 380–520 px tall covers almost every centre modal. If you need 900 px, you are asking for too much.
  • Spend the accent colour on the button. Colour is how you point; using it three times points nowhere.
  • The close button is a design element. 30–44 px, top right, 3:1 contrast, visible in the first frame. Hiding it costs more than the email you catch.
  • Design the phone version first. The keyboard eats half the screen and the thumb only reaches the bottom third.

What good popup design actually means

The three-second test

A well-designed popup passes three questions in about three seconds: Can I tell what this is? (one glance at the headline), Can I do it in one gesture? (one field, one button), and Can I leave in one tap? (an obvious close control). Fail any one and the design is broken, however good it looks in a screenshot.

Almost every popup has the same seven parts, read in roughly the same order. Knowing the order tells you what to make big and what to keep quiet:

  1. The card — its size, and the dimmed page behind it. This says how big an ask is this? before a word is read.
  2. The eyebrow — an optional two- or three-word label like WAIT! or ONE-TIME OFFER.
  3. The headline — the offer, in eight words or fewer.
  4. The subhead — one sentence answering "and then what?"
  5. The input — ideally exactly one.
  6. The button — the accent colour lives here and nowhere else.
  7. The exits — the close control, plus an optional text decline link.
Popup design anatomy in the ChilliPopup editor: an eyebrow, a two-line headline, a short subhead, one email field, a discount code, one accent-coloured button and a plain-text decline link, with a white circular close button in the corner

The whole anatomy in one card — and on the left, the width and height as literal pixel values.

One popup, one job

This is the rule that fixes the most popups, and the one most often overruled in a meeting. Someone wants the discount and the newsletter checkbox and the social follow, because the popup is "already there". Each addition looks free. None of them are.

The deletion test: remove everything except the headline and the button. Is the offer still intact? If yes, what you removed was decoration. If no, add back the single smallest element that restores it — and stop there.

When you genuinely have two offers, build two campaigns with different display rules rather than one crowded card. Every enabled rule is an AND gate, so they are easy to keep apart: a discount popup on product pages at exit intent, and a newsletter form on blog articles at 60% scroll.

A minimal 500 by 380 pixel popup design in the ChilliPopup builder — headline, one-line subhead, two box-variant fields and a single full-width button

500 × 380 px, white card, one button, one accent colour. A good default to argue every bloated popup back down to.


Size and placement: the numbers to start from

Size is the first message. A card that fills the viewport reads as a demand; a small card in the corner reads as a suggestion. Match the footprint to the size of the favour you are asking.

Format Desktop size to start from Best for Watch out for
Centre modal 560–680 × 380–520 px Exit intent, a discount, the one offer that matters on this page Going wide just to fill space — the copy gets lost across long lines
Corner card 340–420 px wide Ambient asks: newsletter, a feedback prompt, a nudge Cramming a headline, subhead, two fields and an image into 380 px
Bar / strip Full width, 60–90 px tall Announcements, shipping thresholds, one always-on offer Covering the site nav, or a close control smaller than the text beside it
Near-fullscreen Viewport, with 40+ px of breathing room Content that needs the room — a spin wheel, a multi-step quiz Using it for a newsletter signup: the size promises what the offer cannot pay off

Inside whatever box you pick, four numbers do most of the work:

The 640 px rule of thumb. If your desktop card stays at or under roughly 640 px wide, the same layout usually survives a phone with almost no rework. Go past that and you have committed to designing twice.

Placement and trigger are one decision, not two. A centre modal is an interrupt, so it needs the strongest moment — usually exit intent on desktop. A corner card is ambient, so it pairs with scroll depth or a time delay. Put an ambient trigger on an interrupting format and you get a takeover four seconds after landing.


The copy hierarchy: eyebrow, headline, subhead, button

Four slots, in this order, with sizes to start from:

A paste-ready set you can adapt in two minutes:

Sample popup copy — swap the offer, keep the shape
Eyebrow:   ONE-TIME OFFER
Headline:  Get 20% off your first order
Subhead:   Enter your email and the code appears right here.
           One email a week, unsubscribe in a click.
Button:    Send my 20% code
Decline:   No thanks, I'll pay full price

Thank-you screen
Headline:  Here's your code
Body:      COFFEE20 — copy it and use it at checkout. Expires in 7 days.

Two typographic rules save most popups. One font family — set the editor's default font once and let every block inherit it, rather than mixing three faces in 450 px of space. And no centred paragraph longer than two lines: centring is fine for a headline and punishing for a subhead, because every line starts somewhere different. If the words themselves are the problem, the popup copywriting guide goes deeper than there is room for here.


Colour, contrast and imagery

One accent colour, spent on the button

Pick one accent, put it on the button, and let it appear nowhere else — not the headline, not the border, not an icon. Colour is a pointing device; the moment it appears three times it stops pointing at anything. Everything else stays quiet: near-white or near-black card, ink headline, softer grey subhead. If the popup needs to feel branded, do it with the background — a flat colour or a two-hue gradient — and keep the copy on the calmest part of it.

The contrast numbers you cannot argue with

White text on a mid-tone accent is the classic near-miss — fine on a big monitor, unreadable on a phone in daylight. Check the button's text-on-fill pair, and fix it by darkening the fill rather than bolding the label.

Imagery has to earn its pixels

An image is worth including only when it explains the offer or shows the product. The actual bag of coffee earns its half of the card; a stock photo of a laptop is furniture that takes 40% of the space and pulls the eye off the button. Three rules if you do use one: split layouts beat backgrounds when there is text to read; faces steal attention, so have them looking towards the copy; and keep the file well under 200 KB, or the card paints first and the picture arrives a beat later, which looks broken even though nothing is.


The close button is part of the design

Hiding the close button is the worst thing you can do to a popup, and it is done deliberately surprisingly often. The theory is that a harder exit means more signups. What it produces is a reader who now dislikes you, and a page that fails a mobile-usability review.

The spec I would treat as non-negotiable:

A ChilliPopup spin-to-win popup live on a store page, with the store dimmed behind the card and a close control in the top right corner

Live on a real store: the page dims so the card has figure and ground. The close control is in the right place — and it is exactly the sort of small, thin X that should be bigger.

Confirmshaming has a ceiling. No thanks, I'll pay full price is playful and reads as confidence. No thanks, I hate saving money insults the person you are asking for an email address. The first is a design flourish; the second is the thing people screenshot.

What happens after the close is a design decision too. Set a display frequency so a dismissal sticks — once a day, or once every N days, suits most offers. And turn Show again after conversion off, so people who already signed up stop being asked. Nothing makes a site feel less considered than being pitched a discount you already redeemed.


Fields: how many, and box versus underline

One field. That is the answer for the overwhelming majority of popups: an email input and a button. Every extra field is a decision, not a keystroke, and decisions are what people leave over. If you need a second, make it optional and put it second — and if you need a third, what you actually need is a second ask on a later visit.

Each field can use a box or an underline variant, and that is a real design decision rather than a taste one:

Box variant Underline variant
Reads as A standard, unmistakable input Editorial, light, magazine-ish
Use it on Dark, photographic or gradient backgrounds; two or more fields; anything transactional Flat light backgrounds; a single field; luxury, wellness and editorial designs
Main risk Looks heavy if the border is dark or the radius large Reads as a divider rather than something you type in
Contrast rule Border at least 3:1 against the card fill Line at least 3:1 and at least 2 px thick, with real space under the text

One setting worth using deliberately: email validation. You can check the format and catch common typos, restrict to business addresses, do both, or neither. Typo checking is free design-wise and it is the difference between a list you can send to and one you cannot.


Mobile popup design: thumb reach and the keyboard

Most popups are designed on a 27-inch monitor and then seen on a phone. Reverse it — design the phone version first and the desktop one is nearly free.

Two behaviours change on touch. Exit intent has no real equivalent — no cursor leaves towards the tab bar — so use scroll depth or a time delay on mobile instead. And because targeting includes a device rule that ANDs with everything else, the honest answer when a layout will not compromise is to stop compromising: build two campaigns, one per device, each designed properly.

Check the preview, then check it for real. The editor has a phone icon next to the desktop one, which catches the obvious breaks — but it cannot show you the keyboard. Publish, open the page on your own phone, and tap the field. That one test finds more mobile popup problems than any amount of previewing.


Timing, motion and layout courtesy

Design does not stop at the card edge. How the popup arrives is part of how it feels.

On layout stability: a popup is a triggered overlay, so it sits above your page rather than pushing content around. The residual risk is inside the card — an oversized background image that lands after the text and reflows the block. Compress it and the popup arrives in one piece.


Accessibility: never trap the reader

A popup has three obligations: readable, operable without a mouse, easy to leave. The contrast numbers above cover most of the first. The rest is short, and skipping it is how a popup becomes a complaint.

One thing you do not have to build: Escape already closes it. Every overlay the pixel shows — popup, form, survey, quiz or game — listens for the Escape key, so a keyboard user is never stuck behind a card they cannot dismiss. Where the JavaScript API earns its keep is the opposite case: opening a campaign from your own button, without ending up with two cards on screen.

Open a campaign from your own button, without stacking overlays
// Escape already dismisses any ChilliPopup overlay — no code needed for that.
// This is for opening one yourself, e.g. from a "Get the code" link:
document.querySelector('#get-the-code').addEventListener('click', function () {
  if (!window.ChilliPopup) return;   // window.Pepper is an alias for window.ChilliPopup
  window.ChilliPopup.close();        // clear whatever is on screen first
  window.ChilliPopup.open('YOUR-POPUP-UUID');  // forced open, bypasses the queue
});

open() deliberately ignores the display rules and the queue, which is what makes it useful for a manual trigger and dangerous without the close() in front of it.


The do and don't table, element by element

Everything above, compressed. Read this next to your live popup.

Element Do Don't Why
Card size 560–680 × 380–520 px centre modal Fill the viewport for a newsletter Size sets the expected cost
Backdrop Dim the page 40–60% Leave the page at full brightness No figure and ground, no readability
Eyebrow 2–3 words, uppercase, 12–13 px Write a sentence up there It is a label, not copy
Headline 8 words max, names the benefit, 28–34 px "Join our newsletter!" For most readers it is the whole offer
Subhead What arrives, how often, how to stop Restate the headline in longer words It answers the unspoken objection
Button 2–4 first-person words, 48 px+, accent colour "Submit" or "Continue" Last thing read before the decision
Second CTA Delete it, or make it its own campaign Discount + follow + survey on one card Two asks is functionally zero
Accent colour One, on the button only Colour headline, border and button Colour is how you point
Imagery Product or offer imagery, under 200 KB Stock photography as filler Image pixels are pixels off the offer
Fields One, 48 px tall, 16 px text Four fields and a phone number Each field is a decision
Field style Box on busy backgrounds, underline on flat light ones A 1 px pale underline on a pale card If it looks untypable, nobody types
Close button 30–44 px, top right, 3:1, immediate A 10 px grey ×, or a delayed one Trapping people costs more than it earns
Motion One fade or short slide, 150–250 ms Bounce, pulse, loop Motion announces, it does not perform
Timing 5–8 s, 40–60% scroll, or exit intent Fire at 0 seconds Nothing has been read to say yes to
Mobile ~90% viewport width, button in the thumb zone Reuse the desktop layout unchanged The keyboard takes half the screen
Contrast 4.5:1 body, 3:1 large text and UI Light grey on white because it looks calm Unreadable cannot convert

Worked example: one popup, rebuilt element by element

A made-up but extremely typical starting point, and the rebuild. Nothing about the offer changes — only the design.

Before

After

Four fields became one; one typeface, one accent colour, two exits. The offer is identical — the design simply stopped charging for it. For more finished shapes to steal from, the website popup examples roundup walks through a pile of them.

How to tell whether it worked

The ChilliPopup analytics dashboard showing views, unique views, clicks, submissions and conversion rate — the numbers used to judge a popup design change

Conversion is submissions divided by views. Compare a design against its own previous number over an equal stretch of days.

Be honest about the method, because it is easy to fool yourself here. ChilliPopup has no split testing, so you cannot run two designs against each other at the same time. What you can do is sequential and disciplined: change one element at a time, run each version for the same number of days (whole weeks, so the weekday mix matches), read conversion rather than submissions so a traffic spike cannot flatter you, and only believe big moves — seasonality and traffic mix shift that number too. Then check quality as well as volume: the collected-fields breakdown shows the top values per field, and junk answers are a friction signal, people complying rather than converting.

One reporting boundary, so you do not go hunting. The funnel, completion rate, average time and drop-off views live on survey and quiz analytics. Popups and forms report views, unique views, clicks, submissions, conversion, field inputs, the interactions chart, device split, collected fields and the raw submissions table — plenty to judge a design change by.

The pre-publish checklist

If the pixel is not on your site yet, the one-line install guide takes about two minutes, and the same script then serves every popup, form, survey and quiz you build afterwards.

Design a popup people don't resent

Build popups, forms, surveys, quizzes and prize games in one editor, with pixel-level control over every element on this page. Plans from $15/month with a 14-day free trial.

Start your free trial →

Related reading

Frequently asked questions

What are the most important popup design best practices?

Three rules carry most of the weight: give the popup one job, so there is one headline, one input and one button; spend your single accent colour on that button and keep everything else quiet; and make the close control obvious from the first frame, 30 to 44 pixels, top right, in high contrast. Size, imagery, timing and motion all follow from those three.

What size should a popup be?

For a centre modal on desktop, start at 560 to 680 pixels wide and 380 to 520 pixels tall, and only go bigger when the content earns it — a spin wheel or a multi-step quiz, not a newsletter signup. In the ChilliPopup editor width and height are literal pixel fields. Staying under about 640 pixels wide also means the layout survives a phone.

Where should the close button go on a popup?

Top right, on or just inside the card edge, with a hit area of at least 30 pixels and ideally 44, and at least 3:1 contrast against whatever sits behind it. A white circle with a dark X works on every background. Never hide it and never fade it in after a delay. For a big ask, add a plain text decline link under the button too.

How many fields should a popup have?

One. An email input and a button is the whole shape you need, because every extra field is a decision rather than a keystroke. If you truly need a second, make it optional and put it second. Anything beyond that belongs on a later ask on a later visit, or on the claim screen of a game, after the visitor has already played.

How do I design a popup for mobile?

Design the phone version first. Leave 16 to 20 pixels of page visible each side, keep the field and the button above the on-screen keyboard, make the button full width and at least 48 pixels tall, and set input text to 16 pixels or larger so iOS does not zoom when the field is focused. Exit intent has no equivalent on touch, so use scroll depth or a time delay there.

Are popups bad for accessibility?

A badly designed one is. A popup has to be readable, operable without a mouse and easy to leave. Hold body text to 4.5:1 contrast and large text and interface elements to 3:1, never signal an error with colour alone, and keep the close control large. Every ChilliPopup overlay already closes when the visitor presses Escape, so nobody is trapped by the keyboard — but publish it and test it with the keyboard yourself anyway.