Analytics choices

Analytics is optional. If allowed, Google measures public pages, navigation, recognized acquisition sources and engagement, including tool and playground use. The site excludes entered code, search terms and form contents from its Analytics events. You can withdraw here. This choice does not change advertising consent.

Read about Analytics and your information.

HTML YouTube

Master YouTube video integration using iframe embedding and adaptive display strategies

YouTube represents the web's dominant video distribution platform. HTML facilitates straightforward YouTube content embedding through iframe element implementation.

Embedding YouTube Videos

The easiest way to embed a YouTube video is to use the iframe code provided by YouTube's share feature. You can also create your own iframe code if you know the video ID.

Basic YouTube Embed

Explanatory video embed: replace VIDEO_ID in your own page. YouTube players are not loaded in this playground. Unavailable or blocked: embedded content “https://www.youtube.com/embed/VIDEO_ID”. Provide inline styles and scripts, embedded images or the missing HTML context. External requests and browser dialogs stay blocked.

<iframe width="560" height="315"
        src="https://www.youtube.com/embed/VIDEO_ID"
        title="YouTube video player"
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen>
</iframe>

How to Get the Video ID

Video identifiers appear within YouTube URLs. Example:
https://www.youtube.com/watch?v=dQw4w9WgXcQ
Video identifier: dQw4w9WgXcQ

Live YouTube Video Example

Here's a working YouTube video embed:

Getting YouTube Embed Code

YouTube provides an easy way to get the embed code for any video:

Steps to Get Embed Code

  1. Go to the YouTube video you want to embed
  2. Click the Share button below the video
  3. Click Embed in the share dialog
  4. Copy the iframe code provided
  5. Paste it into your HTML page

Example Embed Code from YouTube

Explanatory YouTube embed: the external player is not loaded in this playground. Unavailable or blocked: embedded content “https://www.youtube.com/embed/dQw4w9WgXcQ”. Provide inline styles and scripts, embedded images or the missing HTML context. External requests and browser dialogs stay blocked.

<iframe width="560" height="315"
        src="https://www.youtube.com/embed/dQw4w9WgXcQ"
        title="YouTube video player"
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
        allowfullscreen>
</iframe>

YouTube URL Parameters

You can customize the YouTube player behavior by adding parameters to the embed URL:

Parameter Value Description
autoplay 0 or 1 Auto-play video when page loads (1 = yes)
mute 0 or 1 Mute the video by default (1 = yes)
loop 0 or 1 Loop the video (1 = yes)
controls 0 or 1 Display player controls (1 = yes)
start seconds Start video at specific time (in seconds)
end seconds End video at specific time (in seconds)
playlist video IDs Comma-separated list of video IDs to play
rel 0 or 1 Show related videos at end (0 = from same channel)

YouTube Video with Parameters

Explanatory autoplay settings: the external YouTube player is not loaded in this playground. Browser autoplay permissions also apply in your own page. Unavailable or blocked: embedded content “https://www.youtube.com/embed/dQw4w9WgXcQ?autoplay=1&mute=1&start=30”. Provide inline styles and scripts, embedded images or the missing HTML context. External requests and browser dialogs stay blocked.

<!-- Autoplay muted video starting at 30 seconds -->
<iframe width="560" height="315"
        src="https://www.youtube.com/embed/dQw4w9WgXcQ?autoplay=1&mute=1&start=30"
        title="YouTube video player"
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen>
</iframe>

⚠️ Autoplay Note

Browsers typically block autoplay with sound. If you use autoplay=1, you should also use mute=1 for it to work reliably.

Responsive YouTube Videos

By default, YouTube iframes have fixed dimensions. To make them responsive and scale with the screen size, you need to use a container with CSS:

Responsive YouTube Embed

Explanatory responsive-player markup: the layout can be inspected, but the external YouTube player is not loaded in this playground. The snippet includes CSS inside its HTML. Unavailable or blocked: embedded content “https://www.youtube.com/embed/dQw4w9WgXcQ”. Provide inline styles and scripts, embedded images or the missing HTML context. External requests and browser dialogs stay blocked.

<style>
.youtube-container {
  position: relative;
  width: 100%;
  padding-bottom: 56.25%; /* 16:9 aspect ratio */
  height: 0;
  overflow: hidden;
}

.youtube-container iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
</style>

<div class="youtube-container">
  <iframe
    src="https://www.youtube.com/embed/dQw4w9WgXcQ"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
    allowfullscreen>
  </iframe>
</div>

Aspect Ratio Calculation

The padding-bottom percentage maintains the aspect ratio:

  • 16:9 (standard YouTube): 56.25% (9/16 × 100)
  • 4:3 (older videos): 75% (3/4 × 100)
  • 21:9 (ultrawide): 42.857% (9/21 × 100)

Embedding YouTube Playlists

You can also embed entire YouTube playlists using a similar approach:

YouTube Playlist Embed

Explanatory playlist embed: replace PLAYLIST_ID in your own page. YouTube players are not loaded in this playground. Unavailable or blocked: embedded content “https://www.youtube.com/embed/videoseries?list=PLAYLIST_ID”. Provide inline styles and scripts, embedded images or the missing HTML context. External requests and browser dialogs stay blocked.

<iframe width="560" height="315"
        src="https://www.youtube.com/embed/videoseries?list=PLAYLIST_ID"
        title="YouTube playlist player"
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen>
</iframe>

💡 Finding Playlist ID

The playlist ID is found in the URL after list=:
https://www.youtube.com/playlist?list=PLxxxxxxxxxxxxxxxx

YouTube IFrame API

For advanced control, you can use the YouTube IFrame Player API to control playback with JavaScript:

YouTube IFrame API Example

Explanatory Player API integration: it requires an external YouTube script and player, which remain blocked in this playground. The snippet includes JavaScript inside its HTML. Unavailable or blocked: script “https://www.youtube.com/iframe_api”. Provide inline styles and scripts, embedded images or the missing HTML context. External requests and browser dialogs stay blocked.

<!-- 1. The iframe that will hold the player -->
<div id="player"></div>

<!-- 2. Control buttons -->
<button onclick="player.playVideo()">Play</button>
<button onclick="player.pauseVideo()">Pause</button>
<button onclick="player.stopVideo()">Stop</button>

<!-- 3. Load the IFrame Player API code -->
<script src="https://www.youtube.com/iframe_api"></script>

<script>
var player;

// This function creates the player after API loads
function onYouTubeIframeAPIReady() {
  player = new YT.Player('player', {
    height: '390',
    width: '640',
    videoId: 'dQw4w9WgXcQ',
    playerVars: {
      'playsinline': 1
    },
    events: {
      'onReady': onPlayerReady,
      'onStateChange': onPlayerStateChange
    }
  });
}

// The API will call this function when ready
function onPlayerReady(event) {
  console.log('Player is ready');
}

// The API calls this when player state changes
function onPlayerStateChange(event) {
  if (event.data == YT.PlayerState.PLAYING) {
    console.log('Video is playing');
  }
}
</script>

Available API Methods

  • playVideo() - Plays the video
  • pauseVideo() - Pauses the video
  • stopVideo() - Stops the video
  • seekTo(seconds) - Seeks to a specific time
  • setVolume(volume) - Sets volume (0-100)
  • mute() / unMute() - Mute/unmute
  • getPlayerState() - Returns current state
  • getDuration() - Returns video duration

YouTube Embedding Best Practices

Best Practices

  1. Use Responsive Design: Wrap iframes in containers for responsive scaling
  2. Add Meaningful Titles: Use descriptive title attributes for accessibility
  3. Lazy Loading: Use loading="lazy" for iframes below the fold
  4. Privacy-Enhanced Mode: Use youtube-nocookie.com for better privacy
  5. Avoid Autoplay: Don't autoplay unless necessary (and mute if you do)
  6. Consider Performance: Each iframe adds overhead to page load
  7. Thumbnail Previews: Consider using thumbnail images with click-to-load
  8. Test on Mobile: Ensure videos work well on mobile devices
  9. Provide Alternatives: Offer links to videos for users who can't view embedded content
  10. Check Permissions: Ensure you have rights to embed the video

Privacy-Enhanced YouTube Embed

Explanatory privacy-enhanced embed: youtube-nocookie.com is still an external player and is not loaded in this playground. Unavailable or blocked: embedded content “https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ”. Provide inline styles and scripts, embedded images or the missing HTML context. External requests and browser dialogs stay blocked.

<!-- Use youtube-nocookie.com for privacy-enhanced mode -->
<iframe width="560" height="315"
        src="https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ"
        title="YouTube video player"
        frameborder="0"
        loading="lazy"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen>
</iframe>

Lazy Load YouTube with Thumbnail

Explanatory click-to-load player: the original remote thumbnail and dynamically created YouTube frame are not fetched here. Any labelled thumbnail is a sample illustration. The snippet includes CSS inside its HTML. The snippet includes JavaScript inside its HTML. Unavailable or blocked: image “https://img.youtube.com/vi/dQw4w9WgXcQ/maxresdefault.jpg”; embedded content “https://www.youtube.com/embed/”. Provide inline styles and scripts, embedded images or the missing HTML context. External requests and browser dialogs stay blocked.

<style>
.video-preview {
  position: relative;
  cursor: pointer;
}

.video-preview img {
  width: 100%;
  display: block;
}

.video-preview .play-button {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 68px;
  height: 48px;
  background: rgba(255, 0, 0, 0.8);
  border-radius: 12px;
}
</style>

<div class="video-preview" onclick="loadVideo(this, 'dQw4w9WgXcQ')">
  <img src="https://img.youtube.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" alt="Video thumbnail">
  <div class="play-button"></div>
</div>

<script>
function loadVideo(element, videoId) {
  var iframe = document.createElement('iframe');
  iframe.setAttribute('src', 'https://www.youtube.com/embed/' + videoId + '?autoplay=1');
  iframe.setAttribute('frameborder', '0');
  iframe.setAttribute('allowfullscreen', '1');
  iframe.setAttribute('allow', 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture');
  element.parentNode.replaceChild(iframe, element);
}
</script>

Test Your Knowledge

5 practice questions are available. Choose Start practice to try them.