Free visual CSS tool

CSS Speech Bubble Generator

Design a chat or speech bubble with a positioned tail. Tune background, border, radius and tail placement, then copy ready-to-use HTML and CSS.

Hey! This bubble is fully editable — try typing here 💬
Ready-to-use HTML + CSS

🔒 Everything runs locally — no data is uploaded.

How the speech bubble tail is built

The bubble itself is a normal padded box with a border and radius. The tail is drawn with two triangles built from the classic CSS border trick, layered as ::before and ::after pseudo-elements. When a border is enabled, the outer triangle uses the border color and is slightly larger, while the inner triangle uses the background color and sits on top, leaving a matching outline around the pointer.

Any edge, any offset

Point the tail from the top, bottom, left or right edge, and slide it anywhere from 5% to 95% along that edge.

Matches your border

Enable a border and the tail automatically gets an outline that matches, just like native chat app bubbles.

Copy HTML and CSS

Get a single div and a compact style block — no extra markup, classes or JavaScript required.

CSS speech bubble generator FAQ

How is a CSS speech bubble tail made?

The tail is a small triangle built with the border trick on a ::before and ::after pseudo-element, positioned outside one edge of the bubble so it looks like a pointer.

How do I add a border around the bubble and tail?

This generator draws a slightly larger border-colored triangle behind a smaller fill-colored triangle, so the tail appears outlined to match the bubble border.

Can I move the tail along the edge?

Yes. The offset slider positions the tail anywhere from 0% to 100% along the chosen edge, so it can point at any part of an avatar or element.

Does the bubble resize with its text?

Yes. The bubble uses normal block sizing with padding, so it grows to fit whatever text or HTML content you place inside it.

Is the generated code framework independent?

Yes. It is plain HTML and CSS with no build step, classes or JavaScript required, so it works in any project.