URL: https://www.progressiverobot.com/js-fullscreen-api/

In this article, we'll cover the Fullscreen API with ample amounts of code snippets, and interactive demos. It's a suprisingly easy API to work with!

The <^>Fullscreen API<^> was introduced in 2013, and provides a native way for browsers to enter/exit fullscreen mode. This specification brought a slew of JavaScript APIs, and CSS selectors that we can use to refine this immersive user experience.

Basics of the Fullscreen API

fullscreen api illustration for: Basics of the Fullscreen API

It's really easy to activate fullscreen mode on the web! Currently, some browsers still require prefixing the <^>requestFullscreen<^> method.

To check which Fullscreen API method is available, you can create a helper function similar to this:

				
					
function activateFullscreen(element) {

 if(element.requestFullscreen) {

 element.requestFullscreen(); // W3C spec

 }

 else if (element.mozRequestFullScreen) {

 element.mozRequestFullScreen(); // Firefox

 }

 else if (element.webkitRequestFullscreen) {

 element.webkitRequestFullscreen(); // Safari

 }

 else if(element.msRequestFullscreen) {

 element.msRequestFullscreen(); // IE/Edge

 }

};

				
			

The word "request" in requestFullscreen is due to the fact that browsers don't have permissions (by default) to activate fullscreen mode.

Exiting fullscreen is pretty easy, but it also requires a bit of browser detection:

				
					
function deactivateFullscreen() {

 if(document.exitFullscreen) {

 document.exitFullscreen();

 } else if (document.mozCancelFullScreen) {

 document.mozCancelFullScreen();

 } else if (document.webkitExitFullscreen) {

 document.webkitExitFullscreen();

 }

};

				
			

Using the above function, to activate fullscreen, simply pass the <^>document<^> HTMLElement!

				
					
&lt;button

 onclick="activateFullscreen(document.documentElement);"

&gt;

 Go fullscreen!

&lt;/button&gt;



&lt;button

 onclick="deactivateFullscreen();"

&gt;

 Leave fullscreen

&lt;/button&gt;

				
			

See the Pen alligatorio-fullscreen-api-1 by wle8300 (@wle8300) on CodePen.

Using Fullscreen API on unconventional HTMLElements

As you might have guessed, other HTML hlements can go into fullscreen mode too, not just <^>document<^>!

In the demo below, try clicking the buttons to make <h1>, <img>, and <video> go into fullscreen mode:

				
					
&lt;button

 onclick="activateFullscreen(document.getElementById('my-image'));"

&gt;

 Fullscreen #my-text!

&lt;/button&gt;

&lt;button

 onclick="activateFullscreen(document.getElementById('my-image'))"

&gt;

 Fullscreen #my-image

&lt;/button&gt;

&lt;button

 onclick="activateFullscreen(document.getElementById('my-video'))"

&gt;

 Fullscreen #my-video

&lt;/button&gt;



&lt;h1 id="my-text"&gt;Hello world&lt;/h1&gt;

&lt;img id="my-image" src="alligatorio-logo.svg" width="200"/&gt;

&lt;video id="my-video" controls src="big-buck-bunny.mp4" /&gt;

				
			

See the Pen alligatorio-fullscreen-api-2 by wle8300 (@wle8300) on CodePen.

Properties & Events

There are additional properties that Fullscreen API brings:

  • <^>document.fullScreenEnabled<^>: returns a boolean denoting whether the webpage has permissions to enter fullscreen mode
  • <^>document.fullScreenElement<^>: returns a HTMLElement Node (only when fullscreen is activated)

You'll also need to detect the browser:

				
					
const fullscreenEnabled = document.fullscreenEnabled

 || document.mozFullScreenEnable

 || document.webkitFullscreenEnabled;

const fullscreenElement = document.fullscreenElement

 || document.mozFullScreenElemen

 || document.webkitFullscreenElement;

				
			

There's also an event called <^>fullscreenchange<^> when the user enters/exits fullscreen mode that you can listen to:

				
					
const fullscreenElement = document.fullscreenElement

 || document.mozFullScreenElement

 || document.webkitFullscreenElement;



document.addEventListener(&lt;^&gt;'fullscreenchange'&lt;^&gt;, (event) =&gt; {

 if (fullscreenElement) {

 console.log('Entered fullscreen:', document.fullscreenElement);

 } else {

 console.log('Exited fullscreen.');

 }

});

				
			

Styling Fullscreen Elements

On top of the JavaScript API that's available, there's also a few CSS pseudo-classes you can use:

				
					
/* Targets the

 HTML element that's

 in fullscreen mode */

:fullscreen,

:-webkit-full-screen,

:-moz-full-screen,

:-ms-fullscreen {

 /* ... */

}





/* Styling the

 backdrop */

::backdrop {

 /* ... */

}

				
			

Here's an example where we add a groovy <^>background-color<^>, and <^>opacity<^> rules to the backdrop:

				
					
::backdrop {

 opacity: 0.8;

 background: #DFA612;

}

				
			

See the Pen alligatorio-fullscreen-api-3 by wle8300 (@wle8300) on CodePen.

Try clicking the button! You can read more about :fullscreen and :backdrop on the Mozilla Developer Network.

The W3C specification alternated between "fullscreen" and "full-screen" so you'll see a discrepancy in older specs, browser prefixes, etc. Going forward browsers will stick with "fullscreen"

Can I Use fullscreen? Data on support for the fullscreen feature across the major browsers from caniuse.com.