This standard describes a collection of web platform features that web browsers need to support for compatibility with the de facto web.
There exists an increasingly large corpus of web content that depends on web browsers supporting a
number of specific vendor CSS properties and DOM APIs for functionality or layout.
This holds especially true for mobile-optimized web content, which is highly dependent on
-webkit--prefixed properties.
This specification aims to describe the minimal set of -webkit--prefixed CSS properties
and DOM APIs that user agents are required to support for web compatibility, which aren’t
specified elsewhere.
The HTTP User-Agent header field as found in major browsers today is also described.
The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. For readability, these words do not appear in all uppercase letters in this specification. [RFC2119]
Requirements phrased in the imperative as part of algorithms (such as "strip any leading space characters" or "return false and terminate these steps") are to be interpreted with the meaning of the keyword ("must", "should", "may", etc.) used in introducing the algorithm.
Conformance requirements phrased as algorithms or specific steps may be implemented in any manner, so long as the end result is equivalent. (In particular, the algorithms defined in this specification are intended to be easy to follow, and not intended to be performant.)
The following -webkit- vendor prefixed at-rules must be supported as aliases
of the corresponding unprefixed at-rules:
-webkit- prefixed at-rule alias
@-webkit-keyframes
@keyframes
-webkit-device-pixel-ratio
-webkit-device-pixel-ratio must be treated as an alias of the
resolution range type media feature, with its value interpreted as a
dppx unit.
The min- or max- prefixes on range features must not apply to
-webkit-device-pixel-ratio, instead the following aliases must be used:
-webkit- prefixed range media feature alias
-webkit-min-device-pixel-ratio
min-resolution
-webkit-max-device-pixel-ratio
max-resolution
-webkit-transform-3d
The -webkit-transform-3d media feature is used to query whether the
user agent supports CSS 3D transforms. [css-transforms-1]
If the user agent supports 3D transforms, the value will be 1. Otherwise the value is 0.
-webkit-linear-gradient()
The -webkit-linear-gradient() gradient function must be treated
as an alias of linear-gradient as defined in [css3-images-20110217].
-webkit-radial-gradient()
The -webkit-radial-gradient() gradient function must be treated
as an alias of radial-gradient as defined in [css3-images-20110217].
-webkit-repeating-linear-gradient()
The -webkit-repeating-linear-gradient() gradient function must be
treated as an alias of repeating-linear-gradient as defined in [css3-images-20110217].
-webkit-repeating-radial-gradient()
The -webkit-repeating-radial-gradient() gradient function must be
treated as an alias of repeating-radial-gradient as defined in [css3-images-20110217].
The following -webkit- vendor prefixed properties must be supported as
legacy name aliases of the corresponding unprefixed property:
-webkit- prefixed property alias
-webkit-align-items
align-items
-webkit-align-content
align-content
-webkit-align-self
align-self
-webkit-animation-name
animation-name
-webkit-animation-duration
animation-duration
-webkit-animation-timing-function
animation-timing-function
-webkit-animation-iteration-count
animation-iteration-count
-webkit-animation-direction
animation-direction
-webkit-animation-play-state
animation-play-state
-webkit-animation-delay
animation-delay
-webkit-animation-fill-mode
animation-fill-mode
-webkit-animation
animation
-webkit-backface-visibility
backface-visibility
-webkit-background-clip
background-clip
-webkit-background-origin
background-origin
-webkit-background-size
Not really a legacy name alias. See issue #28.
background-size
-webkit-border-bottom-left-radius
border-bottom-left-radius
-webkit-border-bottom-right-radius
border-bottom-right-radius
-webkit-border-top-left-radius
border-top-left-radius
-webkit-border-top-right-radius
border-top-right-radius
-webkit-border-radius
border-radius
-webkit-box-shadow
box-shadow
-webkit-box-sizing
box-sizing
-webkit-flex
flex
-webkit-flex-basis
flex-basis
-webkit-flex-direction
flex-direction
-webkit-flex-flow
flex-flow
-webkit-flex-grow
flex-grow
-webkit-flex-shrink
flex-shrink
-webkit-flex-wrap
flex-wrap
-webkit-filter
filter
-webkit-justify-content
justify-content
-webkit-mask
mask
-webkit-mask-box-image
mask-border
-webkit-mask-box-image-outset
mask-border-outset
-webkit-mask-box-image-repeat
mask-border-repeat
-webkit-mask-box-image-slice
mask-border-slice
-webkit-mask-box-image-source
mask-border-source
-webkit-mask-box-image-width
mask-border-width
-webkit-mask-clip
mask-clip
-webkit-mask-composite
mask-composite
-webkit-mask-image
mask-image
-webkit-mask-origin
mask-origin
-webkit-mask-position
mask-position
-webkit-mask-repeat
mask-repeat
-webkit-mask-size
mask-size
-webkit-order
order
-webkit-perspective
perspective
-webkit-perspective-origin
perspective-origin
-webkit-transform-origin
transform-origin
-webkit-transform-style
transform-style
-webkit-transform
transform
-webkit-transition-delay
transition-delay
-webkit-transition-duration
transition-duration
-webkit-transition-property
transition-property
-webkit-transition-timing-function
transition-timing-function
-webkit-transition
transition
The following -webkit- vendor prefixed properties must be supported as
legacy name aliases of the corresponding unprefixed properties. If the
user agent does not ship the unprefixed equivalent, the -webkit- prefixed property must
be treated as an alias of the user agent’s own vendor prefixed property.
-webkit- prefixed property alias
-webkit-text-size-adjust
(-prefix-)text-size-adjust
Note: As soon as each property is unprefixable it can be defined as a legacy name alias.
Note: This section used to specify the -webkit-appearance property. This is now defined in CSS Basic User Interface Module.
The following -webkit- vendor prefixed properties must be supported as mappings
to the corresponding unprefixed property:
-webkit- prefixed property
-webkit-box-align
align-items
-webkit-box-flex
flex-grow
-webkit-box-ordinal-group
order
-webkit-box-orient
flex-direction
-webkit-box-pack
justify-content
These definitions of -webkit-box-* are known to not be web compatible. [Issue #87]
The following -webkit- vendor prefixed keywords must be supported as mappings to
the corresponding unprefixed keyword:
-webkit- prefixed keyword
-webkit-box
flex
-webkit-flex
flex
-webkit-inline-box
inline-flex
-webkit-inline-flex
inline-flex
This definition of -webkit-box is known to not be web compatible. [Issue #87]
-webkit-text-fill-color propertyThe -webkit-text-fill-color property defines the foreground fill color of an element’s text content.
-webkit-text-fill-color will always determine the
foreground fill color of an element’s text.
.one{ color : blue; /* the following can be omitted because it's the initial value: -webkit-text-fill-color: currentcolor; */ } .two{ color : red; -webkit-text-fill-color : blue; }
Elements with the one or two classes will have blue text.
-webkit-text-stroke-color propertyThe -webkit-text-stroke-color property specifies a stroke color for an element’s text.
-webkit-text-stroke-width propertyThe -webkit-text-stroke-width property specifies the width of the stroke drawn at the edge of each glyph of an element’s text. A zero value results in no stroke being painted. A negative value is invalid.
-webkit-text-stroke propertyThe -webkit-text-stroke property is a shorthand property for the -webkit-text-stroke-width and -webkit-text-stroke-color properties, for setting the stroke width and stroke color of an element’s text.
-webkit-text-stroke properties to achieve white text with a black stroked text
effect.
.stroked-text-longhand{ color : #fff; -webkit-text-stroke-color : #000; -webkit-text-stroke-width : 1 px ; } .stroked-text-shorthand{ -webkit-text-fill-color : #fff; -webkit-text-stroke : thin #000; }
The element
<p class="stroked-text-longhand">Serious typography</p>would be rendered as follows:

touch-action valuesThis section augments the
definition of touch-action from [pointerevents2] to
add the pinch-zoom value.
When specified, the pinch-zoom token enables multi-finger panning and zooming of the
page. For zooming to occur, all fingers must start on an element that has the pinch-zoom behavior
enabled (via one of the pinch-zoom, manipulation, or auto
values on itself or an ancestor).
touch-action: pan-y pinch-zoom"
to avoid disabling zooming unnecessarily.manipulation is an alias for "pan-x pan-y pinch-zoom".
Note: WebKitCSSMatrix is now defined by the DOM Geometry specification. [geometry-1].
window.orientation API
partial interface Window {readonly attribute short orientation ;attribute EventHandler ; };onorientationchange partial interface HTMLBodyElement {attribute EventHandler ; };onorientationchange
When getting the orientation attribute, the user agent must run
the following steps:
Let document be this’s relevant global object’s associated Document.
Return document’s current window.orientation angle.
Whenever the viewport is drawn at a different angle compared to the device’s natural orientation, the user agent must run the following steps:
Fire an event named
orientationchange at the
Window object of the active document.
User agents implementing the window.orientation
attribute and its associated orientationchange event must not expose them on non-Mobile
platforms.
orientationchange event on the
body element, but other implementations do not, suggesting it’s not necessary for
compatibility with the web.window.orientation angle
The possible integer values for the window.orientation
angle are: -90, 0, 90, 180. User agents must
support the -90, 0 and 90 values and may optionally support
180.
0 represents the natural orientation. -90 represents a
rotation 90 degrees clockwise from the natural orientation. 90 represents a rotation
90 degrees counterclockwise from the natural orientation. 180 represents a rotation
180 degrees from the natural orientation.
In order to determine the current window.orientation
angle, the user agent must run the following steps:
Window objects and body elementsThe following are the event handlers and their corresponding event handler event types that must be
supported on all Window objects and elements as attributes:body
onorientationchange
orientationchange
The User-Agent header field syntax is formally defined by [HTTP-SEMANTICS] and
provides SHOULD-level guidance on its value. This section describes the
User-Agent patterns found in the so-called major web browsers, but much of it will
apply to other browsers with a shared heritage (i.e., forks and embedders) as well as any
user agent in the more general sense that send a User-Agent header.
A User-Agent token is a string that represents an abstraction over a semantic unit in the
User-Agent string. This document formalizes a token as a string that
begins with an opening bracket "<" and ends with a closing ">" bracket, e.g.,
<version>. A token may also contain other tokens.
A User-Agent constant is a string whose value does not change.
When a token’s value is made up from one or more tokens, and optionally constants, it is said to decompose to those tokens and constants.
This is a non-exhaustive list of common User-Agent tokens.
<deviceCompat>
Mobile ", or
just the empty string, for Desktop or non-mobile devices. Some browsers have also sent token
values such as "Tablet", "TV", "Mobile VR", etc., or
included build information as well.
<majorVersion>
<minorVersion>
<oscpu>
<platform>
The User-Agent strings that follow share the common meta structure:
"Mozilla/5.0 (a) b"
Where a is one or more tokens representing device information and b is
one or more tokens representing browser information.
"Mozilla/5.0 (<unifiedPlatform>)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<majorVersion>.0.0.0
<deviceCompat>Safari/537.36"
Mozilla/5.0 (Macintosh;
Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/110.0.0.0 Safari/537.36"
Mobile: "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/110.0.0.0 Mobile
Safari/537.36"
<unifiedPlatform>
"Linux; Android 10; K"
"Windows NT 10.0; Win64; x64"
"Macintosh; Intel Mac OS X 10_15_7"
"X11; Linux x86_64"
"X11; CrOS x86_64 14541.0.0"
"Fuchsia"
"Mozilla/5.0 (<firefoxPlatform>; rv: <firefoxVersion>) Gecko/<geckoVersion>
Firefox/<firefoxVersion>"
Mozilla/5.0 (Windows NT 10.0;
Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0"
Mobile: "Mozilla/5.0 (Android 10; Mobile;
rv:100.0) Gecko/100.0 Firefox/100.0"
<firefoxVersion> decomposes to the following:
"<majorVersion>.0"
In Firefox on desktop platforms (Windows, macOS, Linux, etc.),
<geckoVersion> is the frozen build
date "20100101". In Firefox for Android, <geckoVersion> is the
same value as <firefoxVersion>.
<firefoxPlatform> decomposes to the following:
On desktop platforms, "<platform>; <oscpu>".
On Firefox for Android, "<platform>; <deviceCompat>".
<deviceCompat>
Mobile", without any leading or trailing spaces.
"Mozilla/5.0 (<safariPlatform>) AppleWebKit/605.1.15 (KHTML, like Gecko)
Version/<safariVersion> <deviceCompat> Safari/<webkitVersion>"
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15
(KHTML, like Gecko) Version/15.6 Safari/605.1.15"
Mobile: "Mozilla/5.0 (iPhone; CPU iPhone OS
15_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko)
Version/15.6 Mobile/15E148 Safari/604.1"
<safariVersion> decomposes to the following:
"<majorVersion>.<minorVersion>", where
<minorVersion> is a single digit.
<safariPlatform> decomposes to the following:
On desktop and larger iPad form factors, the constant
"Macintosh; Intel Mac OS X 10_15_7".
On mobile platforms, including smaller iPad form factors
"<appleProduct>; CPU <mobileOSName> <iOSVersion> like Mac OS X".
<appleProduct>
iPad", "iPhone", and "iPod".
<iOSVersion>
<mobileOSName>
OS" (for iPad-like devices) or
"iPhone OS" (non-iPad-like devices).
<webkitVersion>
605.1.15" (for larger devices,
including non-mini iPad) or "604.1" (for smaller mobile devices, including iPad
mini).
Thanks to Mounir Lamouri and Marcos Cáceres for defining the ScreenOrientation interface.
[screen-orientation]
Special thanks to Apple and the WebKit.org blog authors for providing initial descriptions of much of the content defined in this specification.
This standard is written by Mike Taylor (Google, miketaylr@google.com).
Copyright © WHATWG (Apple, Google, Mozilla, Microsoft). This work is licensed under a Creative Commons Attribution 4.0 International License. To the extent portions of it are incorporated into source code, such portions in the source code are licensed under the BSD 3-Clause License instead.
This is the Living Standard. Those interested in the patent-review version should view the Living Standard Review Draft.
partial interface Window {readonly attribute short orientation ;attribute EventHandler ; };onorientationchange partial interface HTMLBodyElement {attribute EventHandler ; };onorientationchange
@media/-webkit-device-pixel-ratio
In all current engines.
@media/-webkit-device-pixel-ratio
In all current engines.
@media/-webkit-device-pixel-ratio
In all current engines.
In all current engines.
In all current engines.
In all current engines.
In all current engines.
In all current engines.
In all current engines.