Web platform features explorer

📃 December 2023 release notes

Newly available

The following features are newly available:

  • Canvas reset(): The reset() method clears a canvas to its initial state.
  • cap unit: The CSS cap unit corresponds to the height of Latin capital letters.
  • counter-set: The counter-set CSS property creates (and optionally sets a value for) a counter, the numbers for a series of headings or ordered list items.
  • :dir(): The :dir() CSS functional pseudo-class matches elements by text direction, either right to left (rtl) or left to right (ltr).
  • pow(), sqrt(), hypot(), log(), and exp(): The pow(), sqrt(), hypot(), log(), and exp() CSS functions compute various exponential functions.
  • :has(): The :has() CSS functional pseudo-class matches an element if any of the selectors passed as parameters would match at least one element.
  • linear() easing: The linear() easing function for animations and transitions interpolates linearly between the control points, and can be used to approximate complex easing functions, such as a bounce effect.
  • Lazy-loading images and iframes: The loading="lazy" attribute for <img> and <iframe> elements blocks loading the external resource until the user scrolls to that element's part of the page.
  • Masks: The mask CSS property (and several longhand properties) partially or completely hides an element according to the shape and depth of an image.
  • Nesting: CSS nesting allows for shorter selectors, easier reading, and more modularity by nesting rules inside others.
  • Preloading responsive images: The imagesrcset and imagesizes attributes with the rel="preload" attribute for the <link> HTML element starts fetching responsive images before they're found in the body of the document.
  • preservesPitch: The preservesPitch property for <audio> or <video> adjusts the pitch of audio to sound more natural when the playback rate is faster or slower than the default.
  • scripting media query: The scripting CSS media query sets styles based on whether scripting such as JavaScript is available. Values are enabled if scripting is available, initial-only if scripting is only available on page load (for example, printed content), or none.
  • Storage access: The document.requestStorageAccess() method allows content in iframes to request storing and reading cookies and other site data, while the document.hasStorageAccess() method checks if such access is granted.
  • URL.canParse(): The URL.canParse() static method checks whether a URL can be parsed into a valid URL object. It's an alternative to calling new URL() in a try … catch statement.

New in Chrome

The following features are now available in Chrome:

  • background-clip: text: The background-clip: text CSS declaration draws the background underneath only the text in the element.
  • Mutually exclusive <details> elements: Multiple <details> elements which use the same name attribute are mutually exclusive. When one member of the group is opened, all other members are closed.
  • <fencedframe>: The <fencedframe> element embeds another HTML page into the current page in a more secure and privacy-preserving way than <iframe> elements.
  • Virtual sensors: The CreateVirtualSensor WebDriver command creates a virtual sensor for testing applications that use sensor APIs, without the need for real device sensors.
  • Multi-memory (WebAssembly): A single module in WebAssembly can have multiple memories.

New in Chrome Android

The following features are now available in Chrome Android:

  • background-clip: text: The background-clip: text CSS declaration draws the background underneath only the text in the element.
  • Mutually exclusive <details> elements: Multiple <details> elements which use the same name attribute are mutually exclusive. When one member of the group is opened, all other members are closed.
  • <fencedframe>: The <fencedframe> element embeds another HTML page into the current page in a more secure and privacy-preserving way than <iframe> elements.
  • Virtual sensors: The CreateVirtualSensor WebDriver command creates a virtual sensor for testing applications that use sensor APIs, without the need for real device sensors.
  • Multi-memory (WebAssembly): A single module in WebAssembly can have multiple memories.

New in Edge

The following features are now available in Edge:

  • background-clip: text: The background-clip: text CSS declaration draws the background underneath only the text in the element.
  • Mutually exclusive <details> elements: Multiple <details> elements which use the same name attribute are mutually exclusive. When one member of the group is opened, all other members are closed.
  • <fencedframe>: The <fencedframe> element embeds another HTML page into the current page in a more secure and privacy-preserving way than <iframe> elements.
  • Virtual sensors: The CreateVirtualSensor WebDriver command creates a virtual sensor for testing applications that use sensor APIs, without the need for real device sensors.
  • Multi-memory (WebAssembly): A single module in WebAssembly can have multiple memories.

New in Firefox

The following features are now available in Firefox:

  • Promise.withResolvers(): The Promise.withResolvers() static method is an alternative to the Promise() constructor that returns both the promise and resolution functions. You can use this to access resolve and reject outside the scope of the executor function.
  • text-indent: each-line: The text-indent: each-line CSS declaration indents text after forced breaks as well as to the first line of a block.
  • text-indent: hanging: The text-indent: hanging CSS declaration indents all lines except the first.
  • text-wrap: balance: The text-wrap: balance CSS declaration balances the length of each line when text is broken into multiple lines. Also known as headline balancing.
  • text-wrap: stable: The text-wrap: stable CSS declaration wraps text using the default algorithm, but does not change wrapping on earlier lines while the text is being edited.
  • Tail call optimization (WebAssembly): Tail call optimization discards a caller frame and replaces the call with a jump instruction.

New in Firefox for Android

The following features are now available in Firefox for Android:

  • Promise.withResolvers(): The Promise.withResolvers() static method is an alternative to the Promise() constructor that returns both the promise and resolution functions. You can use this to access resolve and reject outside the scope of the executor function.
  • text-indent: each-line: The text-indent: each-line CSS declaration indents text after forced breaks as well as to the first line of a block.
  • text-indent: hanging: The text-indent: hanging CSS declaration indents all lines except the first.
  • text-wrap: balance: The text-wrap: balance CSS declaration balances the length of each line when text is broken into multiple lines. Also known as headline balancing.
  • text-wrap: stable: The text-wrap: stable CSS declaration wraps text using the default algorithm, but does not change wrapping on earlier lines while the text is being edited.
  • Tail call optimization (WebAssembly): Tail call optimization discards a caller frame and replaces the call with a jump instruction.

New in Safari

The following features are now available in Safari:

  • createImageBitmap: The createImageBitmap() global method creates an ImageBitmap object from a source such as an image, SVG, blob, or canvas. An ImageBitmap object represents pixel data that can be drawn to a canvas with lower latency than other types, such as ImageData.
  • Mutually exclusive <details> elements: Multiple <details> elements which use the same name attribute are mutually exclusive. When one member of the group is opened, all other members are closed.
  • Fetch priority: The fetch() priority option and the fetchPriority HTML attribute give hints to the browser about which requests to do before other requests of the same type.
  • Custom highlights: Custom highlights style arbitrary text ranges, without adding extra elements to the DOM.
  • JSON import attributes: Module import … with { type: "json" } statements load JSON data. Also known as JSON module scripts and formerly known as import assertions.
  • mask-border: The mask-border CSS property sets how the edges of an element are masked. It is a shorthand for mask-border-outset, mask-border-repeat, mask-border-slice, mask-border-source, and mask-border-width.
  • Numeric factory functions: The numeric factory functions, such as CSS.px() or CSS.kHz(), return a CSSUnitValue representing a CSS number value (as in 12px or 440kHz).
  • rcap unit: The rcap CSS length unit is a font-relative length equal to the value of the cap unit on the root element. Cap-height is approximately equal to the height of a capital Latin letter.
  • rch unit: The rch CSS length unit is a font-relative length equal to the value of the ch unit on the root element. ch length is based on the width of the zero (0) character.
  • rex unit: The rex CSS length unit is a font-relative length that is equal to the x-height of the root element.
  • ric unit: The ric CSS length unit, or root international character, is a font-relative length equal to the width of CJK character relative to the root element.

New in Safari on iOS

The following features are now available in Safari on iOS:

  • createImageBitmap: The createImageBitmap() global method creates an ImageBitmap object from a source such as an image, SVG, blob, or canvas. An ImageBitmap object represents pixel data that can be drawn to a canvas with lower latency than other types, such as ImageData.
  • Mutually exclusive <details> elements: Multiple <details> elements which use the same name attribute are mutually exclusive. When one member of the group is opened, all other members are closed.
  • Fetch priority: The fetch() priority option and the fetchPriority HTML attribute give hints to the browser about which requests to do before other requests of the same type.
  • Custom highlights: Custom highlights style arbitrary text ranges, without adding extra elements to the DOM.
  • JSON import attributes: Module import … with { type: "json" } statements load JSON data. Also known as JSON module scripts and formerly known as import assertions.
  • Numeric factory functions: The numeric factory functions, such as CSS.px() or CSS.kHz(), return a CSSUnitValue representing a CSS number value (as in 12px or 440kHz).
  • rcap unit: The rcap CSS length unit is a font-relative length equal to the value of the cap unit on the root element. Cap-height is approximately equal to the height of a capital Latin letter.
  • rch unit: The rch CSS length unit is a font-relative length equal to the value of the ch unit on the root element. ch length is based on the width of the zero (0) character.
  • rex unit: The rex CSS length unit is a font-relative length that is equal to the x-height of the root element.
  • ric unit: The ric CSS length unit, or root international character, is a font-relative length equal to the width of CJK character relative to the root element.