👀 Live Preview
Before you press play, the poster image is visible:
Press play — the poster disappears and video frames take over.

The poster attribute sets a thumbnail image on the <video> element. Browsers show this image before the user presses play and while the first video frame is loading. It gives visitors a visual preview of the content — like a movie poster or YouTube thumbnail. The value is a URL to an image file (JPEG, PNG, WebP). Once playback starts, the poster is replaced by video frames. Use video.poster in JavaScript to swap thumbnails dynamically. Pair with preload and controls for a polished media experience.
Before play.
Only element.
JPEG, PNG.
JS property.
Different role.
Preview cue.
poster AttributeWithout a poster, a video may show a blank or black rectangle until the user interacts or the first frame loads. The poster attribute solves this by displaying a chosen still image — a marketing thumbnail, title card, or representative frame from the clip.
This improves first impressions on landing pages, course platforms, and product demos. A good poster tells users what the video is about before they commit to loading and playing it.
poster points to a separate image URL. The actual video still comes from <source src="…"> or the src attribute on video.
Add poster with an image URL on a video element:
<video controls width="320"
poster="/images/apple.png">
<source src="/video/count.mp4" type="video/mp4">
Your browser does not support the video tag.
</video><video> — not on audio or other elements.controls, preload, autoplay, and muted.video.poster = "/images/new-thumb.jpg".poster="" removes the custom thumbnail.The poster attribute accepts a URL to an image file:
poster="/images/video-thumb.jpg" — Relative path on your site.poster="https://example.com/preview.png" — Absolute URL.poster="/images/apple.png" — PNG thumbnail.poster="" — No custom poster (browser default appearance).<!-- Relative path -->
<video poster="/images/apple.png" controls>…</video>
<!-- Absolute URL -->
<video poster="https://cdn.example.com/intro.webp" controls>…</video>| Concept | Behavior | Element |
|---|---|---|
poster | Thumbnail before play | video only |
video.poster | JS read/write URL | HTMLVideoElement |
| During playback | Poster hidden | Video frames shown |
With preload="none" | Poster especially useful | Video not pre-fetched |
| Image formats | JPEG, PNG, WebP, GIF | Standard web images |
| Not supported on | audio, iframe | Video only |
| Element | Supported? | Notes |
|---|---|---|
<video> | Yes | Primary and only HTML element for poster |
<audio> | No | No visual thumbnail — use surrounding UI |
<img> | No | Images use src, not poster |
<iframe> | No | Embedded players handle their own thumbnails |
<input> | No | Use placeholder for text hints |
poster vs preload vs first frame| Feature | What it does | When it matters |
|---|---|---|
poster | Custom thumbnail image URL | Before user presses play |
preload | Hints how much video to buffer | Page load / bandwidth |
| First video frame | Default if no poster set | May be black until metadata loads |
placeholder (input) | Text hint in form fields | Unrelated — different element |
Basic video poster, dynamic video.poster in JavaScript, and comparing video with and without a poster.
Before you press play, the poster image is visible:
Press play — the poster disappears and video frames take over.
Set a thumbnail image on a video with controls:
<video controls width="320"
poster="/images/apple.png">
<source src="/video/count.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>The browser loads and displays /images/apple.png as the video area background until playback starts. The MP4 file loads separately via <source>.
Swap the poster image when the user clicks a button:
<video id="myVideo" controls width="320"
poster="/images/apple-80.png">
<source src="/video/count.mp4" type="video/mp4">
</video>
<button type="button" id="swapBtn">Change poster</button>
<script>
document.getElementById("swapBtn").addEventListener("click", function () {
document.getElementById("myVideo").poster = "/images/apple-120.png";
});
</script>The poster IDL property mirrors the attribute. Changing it updates the thumbnail immediately (when the video is not playing).
See how a poster improves the idle appearance of a video:
<!-- With poster -->
<video controls width="240" poster="/images/apple.png">
<source src="/video/count.mp4" type="video/mp4">
</video>
<!-- Without poster (may show blank/black) -->
<video controls width="240" preload="none">
<source src="/video/count.mp4" type="video/mp4">
</video>With preload="none" and no poster, the video area often looks empty. A poster gives users a clear preview and encourages them to press play.
aria-label on the video when needed.<track kind="captions"> for spoken content; poster does not replace captions.Video element.
Image URL.
Frames render.
Engaging UX.
The poster attribute on video is supported in all modern browsers with HTML5 video.
poster supportVideo thumbnails work wherever native HTML5 video is supported.
Bottom line: Safe for video thumbnails in all modern browsers.
poster with preload="none" to save bandwidthposter to audio elementsThe poster attribute is a simple way to show a custom thumbnail on video elements before playback begins.
Pick a representative image, keep it optimized, and combine with proper labels and captions for an accessible, professional media experience.
posterBookmark these before embedding videos.
One element.
ScopeThumbnail.
ValueIdle state.
TimingJS swap.
APIDifferent job.
Comparevideo element before playback starts or while the first frame loads. It acts as a custom thumbnail.<video>. The audio element does not support poster.poster is a visible thumbnail image. preload hints how much video data to fetch before play. They complement each other.videoElement.poster = "/path/to/image.jpg" on the HTMLVideoElement.video (IE 9+).Practice the poster attribute with basic thumbnails, JavaScript swaps, and with-vs-without comparisons in the Try It editor.
5 people found this page helpful