| CARVIEW |
Geometry Interfaces Module Level 1
W3C Candidate Recommendation Draft,
More details about this document
- This version:
- https://www.w3.org/TR/2025/CRD-geometry-1-20251212/
- Latest published version:
- https://www.w3.org/TR/geometry-1/
- Editor's Draft:
- https://drafts.csswg.org/geometry-1/
- Previous Versions:
- https://www.w3.org/TR/2018/CR-geometry-1-20181204/
- https://www.w3.org/TR/2014/CR-geometry-1-20141125/
- https://www.w3.org/TR/2014/WD-geometry-1-20140918/
- https://www.w3.org/TR/2014/WD-geometry-1-20140626/
- https://www.w3.org/TR/2014/WD-geometry-1-20140522/
- https://www.w3.org/TR/2013/WD-matrix-20130919/
- https://www.w3.org/TR/2014/CR-geometry-1-20141125/
- History:
- https://www.w3.org/standards/history/geometry-1/
- Implementation Report:
- https://wpt.fyi/results/css/geometry
- Test Suites:
- https://test.csswg.org/suites/geometry-1_dev/nightly-unstable/
- https://wpt.fyi/results/css/geometry/
- Feedback:
- CSSWG Issues Repository
- Editors:
- Yehonatan Daniv (Wix.com)
- Sebastian Zartner (Invited Expert)
- Former Editors:
- Dirk Schulze (Adobe Inc.)
- Chris Harrelson (Google)
- Simon Pieters (Opera Software AS)
- Rik Cabanier (Magic Leap)
- Chris Harrelson (Google)
- Suggest an Edit for this Spec:
- GitHub Editor
Copyright © 2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
Abstract
This specification provides basic geometric interfaces to represent points, rectangles, quadrilaterals and transformation matrices that can be used by other modules or specifications.
CSS is a language for describing the rendering of structured documents (such as HTML and XML) on screen, on paper, etc.Status of this document
This section describes the status of this document at the time of its publication. A list of current W3C publications and the latest revision of this technical report can be found in the W3C standards and drafts index.
This document was published by the CSS Working Group as a Candidate Recommendation Draft using the Recommendation track. Publication as a Candidate Recommendation does not imply endorsement by W3C and its Members. A Candidate Recommendation Draft integrates changes from the previous Candidate Recommendation that the Working Group intends to include in a subsequent Candidate Recommendation Snapshot.
This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than a work in progress.
Please send feedback by filing issues in GitHub (preferred), including the spec code “geometry” in the title, like this: “[geometry] …summary of comment…”. All issues and comments are archived. Alternately, feedback can be sent to the (archived) public mailing list www-style@w3.org.
This document is governed by the 18 August 2025 W3C Process Document.
This document was produced by a group operating under the W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent that the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
1. Introduction
This section is non-normative.
This specification describes several geometry interfaces for the representation of points, rectangles, quadrilaterals and transformation matrices with the dimension of 3x2 and 4x4.
The SVG interfaces SVGPoint, SVGRect and SVGMatrix are aliasing the here defined
interfaces in favor for common interfaces used by SVG, Canvas 2D Context and CSS
Transforms. [SVG11] [HTML] [CSS3-TRANSFORMS]
2. The DOMPoint interfaces
A 2D or a 3D point can be represented by the following WebIDL interfaces:
[Exposed =(Window ,Worker ),Serializable ]interface {DOMPointReadOnly constructor (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,z optional unrestricted double = 1); [w NewObject ]static DOMPointReadOnly fromPoint (optional DOMPointInit = {});other readonly attribute unrestricted double x ;readonly attribute unrestricted double y ;readonly attribute unrestricted double z ;readonly attribute unrestricted double w ; [NewObject ]DOMPoint matrixTransform (optional DOMMatrixInit = {}); [matrix Default ]object (); }; [toJSON Exposed =(Window ,Worker ),Serializable ,LegacyWindowAlias =]SVGPoint interface :DOMPoint DOMPointReadOnly {constructor (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,z optional unrestricted double = 1); [w NewObject ]static DOMPoint fromPoint (optional DOMPointInit = {});other inherit attribute unrestricted double x ;inherit attribute unrestricted double y ;inherit attribute unrestricted double z ;inherit attribute unrestricted double w ; };dictionary {DOMPointInit unrestricted double = 0;x unrestricted double = 0;y unrestricted double = 0;z unrestricted double = 1; };w
The following algorithms assume that DOMPointReadOnly objects have the internal member
variables x coordinate, y coordinate, z
coordinate and w perspective.
DOMPointReadOnly as well as the inheriting interface DOMPoint must be able to access and set
the value of these variables.
An interface returning an DOMPointReadOnly object by an attribute or function may be able to
modify internal member variable values. Such an interface must specify this ability explicitly in
prose.
Internal member variables must not be exposed in any way.
The DOMPointReadOnly(x,
y, z, w) and DOMPoint(x, y, z, w)
constructors, when invoked, must run the following steps:
-
Let point be a new
DOMPointReadOnlyorDOMPointobject as appropriate. -
Set point’s variables x coordinate to x, y coordinate to y, z coordinate to z and w perspective to w.
-
Return point.
The fromPoint(other) static method on
DOMPointReadOnly must create a DOMPointReadOnly from the dictionary
other.
The fromPoint(other) static method on
DOMPoint must create a DOMPoint from the dictionary other.
To create a DOMPointReadOnly
from a dictionary other, or to create a DOMPoint from a dictionary other, follow these
steps:
-
Let point be a new
DOMPointReadOnlyorDOMPointas appropriate. -
Set point’s variables x coordinate to other’s
xdictionary member, y coordinate to other’sydictionary member, z coordinate to other’szdictionary member and w perspective to other’swdictionary member. -
Return point.
x attribute, on getting, must return the x
coordinate value. For the DOMPoint interface, setting the
x attribute must set the x coordinate to the new value.
The y attribute, on getting, must return the y
coordinate value. For the DOMPoint interface, setting the
y attribute must set the y coordinate to the new value.
The z attribute, on getting, must return the z
coordinate value. For the DOMPoint interface, setting the
z attribute must set the z coordinate to the new value.
The w attribute, on getting, must return the w
perspective value. For the DOMPoint interface, setting the
w attribute must set the w perspective to the new value.
The matrixTransform(matrix)
method, when invoked, must run the following steps:
-
Let matrixObject be the result of invoking create a
DOMMatrixfrom the dictionary matrix. -
Return the result of invoking transform a point with a matrix, given the current point and matrixObject. The current point does not get modified.
matrixTransform() on a DOMPoint instance is
called with a DOMMatrix instance as argument.
var point = new DOMPoint( 5 , 4 );
var matrix = new DOMMatrix([ 2 , 0 , 0 , 2 , 10 , 10 ]);
var transformedPoint = point. matrixTransform( matrix);
The point variable is set to a new DOMPoint object with x
coordinate initialized to 5 and y coordinate initialized to 4. This new
DOMPoint is now scaled and the translated by matrix. This resulting transformedPoint has the x coordinate 20 and y
coordinate 18.
2.1. Transforming a point with a matrix
To transform a point with a matrix, given point and matrix:
-
Let x be point’s x coordinate.
-
Let y be point’s y coordinate.
-
Let z be point’s z coordinate.
-
Let w be point’s w perspective.
-
Let pointVector be a new column vector with the elements being x, y, z, and w, respectively.
-
Set pointVector to pointVector pre-multiplied by matrix.
-
Let transformedPoint be a new
DOMPointobject. -
Set transformedPoint’s x coordinate to pointVector’s first element.
-
Set transformedPoint’s y coordinate to pointVector’s second element.
-
Set transformedPoint’s z coordinate to pointVector’s third element.
-
Set transformedPoint’s w perspective to pointVector’s fourth element.
-
Return transformedPoint.
Note: If matrix’s is 2D is true, point’s z coordinate is 0 or -0, and point’s w perspective is 1, then this is a 2D transformation. Otherwise this is a 3D transformation.
3. The DOMRect interfaces
Objects implementing the DOMRectReadOnly interface represent a rectangle.
Rectangles have the following properties:
- origin
-
When the rectangle has a non-negative width dimension, the rectangle’s horizontal origin is the left edge; otherwise, it is the right edge. Similarly, when the rectangle has a non-negative height dimension, the rectangle’s vertical origin is the top edge; otherwise, it is the bottom edge.
- x coordinate
-
The horizontal distance between the viewport’s left edge and the rectangle’s origin.
- y coordinate
-
The vertical distance between the viewport’s top edge and the rectangle’s origin.
- width dimension
-
The width of the rectangle. Can be negative.
- height dimension
-
The height of the rectangle. Can be negative.
[Exposed =(Window ,Worker ),Serializable ]interface {DOMRectReadOnly constructor (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,width optional unrestricted double = 0); [height NewObject ]static DOMRectReadOnly fromRect (optional DOMRectInit = {});other readonly attribute unrestricted double ;x readonly attribute unrestricted double ;y readonly attribute unrestricted double ;width readonly attribute unrestricted double ;height readonly attribute unrestricted double ;top readonly attribute unrestricted double ;right readonly attribute unrestricted double ;bottom readonly attribute unrestricted double ; [left Default ]object (); }; [toJSON Exposed =(Window ,Worker ),Serializable ,LegacyWindowAlias =]SVGRect interface :DOMRect DOMRectReadOnly {constructor (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,width optional unrestricted double = 0); [height NewObject ]static DOMRect fromRect (optional DOMRectInit = {});other inherit attribute unrestricted double ;x inherit attribute unrestricted double ;y inherit attribute unrestricted double ;width inherit attribute unrestricted double ; };height dictionary {DOMRectInit unrestricted double = 0;x unrestricted double = 0;y unrestricted double = 0;width unrestricted double = 0; };height
The following algorithms assume that DOMRectReadOnly objects have the internal member
variables x coordinate, y coordinate, width dimension and height dimension. DOMRectReadOnly as
well as the inheriting interface DOMRect must be able to access and set the value of these
variables.
An interface returning an DOMRectReadOnly object by an attribute or function may be able to
modify internal member variable values. Such an interface must specify this ability explicitly in
prose.
Internal member variables must not be exposed in any way.
The DOMRectReadOnly(x,
y, width, height) and DOMRect(x, y, width,
height) constructors, when invoked, must run the following steps:
-
Let rect be a new
DOMRectReadOnlyorDOMRectobject as appropriate. -
Set rect’s variables x coordinate to x, y coordinate to y, width dimension to width and height dimension to height.
-
Return rect.
The fromRect(other) static method on
DOMRectReadOnly must create a DOMRectReadOnly from the dictionary
other.
The fromRect(other) static method on DOMRect
must create a DOMRect from the dictionary other.
To create a DOMRectReadOnly
from a dictionary other, or to create a DOMRect from a dictionary other, follow these
steps:
-
Let rect be a new
DOMRectReadOnlyorDOMRectas appropriate. -
Set rect’s variables x coordinate to other’s
xdictionary member, y coordinate to other’sydictionary member, width dimension to other’swidthdictionary member and height dimension to other’sheightdictionary member. -
Return rect.
x attribute, on getting, must return the x
coordinate value. For the DOMRect interface, setting the
x attribute must set the x coordinate to the new value.
The y attribute, on getting, it must return the y
coordinate value. For the DOMRect interface, setting the
y attribute must set the y coordinate to the new value.
The width attribute, on getting, must return the width
dimension value. For the DOMRect interface, setting the
width attribute must set the width dimension to the new value.
The height attribute, on getting, must return the height dimension value. For the DOMRect interface, setting the
height attribute must set the height dimension value to the new
value.
The top attribute, on getting, must return the NaN-safe minimum of
the y coordinate and the sum of the y coordinate and the
height dimension.
The right attribute, on getting, must return the NaN-safe maximum of
the x coordinate and the sum of the x coordinate and the
width dimension.
The bottom attribute, on getting, must return the NaN-safe maximum
of the y coordinate and the sum of the y coordinate and
the height dimension.
The left attribute, on getting, must return the NaN-safe minimum of
the x coordinate and the sum of the x coordinate and the
width dimension.
Tests
4. The DOMRectList interface
[Exposed =Window ]interface {DOMRectList readonly attribute unsigned long length ;getter DOMRect ?item (unsigned long ); };index
The length attribute must return the total
number of DOMRect objects associated with the object.
The item(index) method, when invoked, must
return null when index is greater than or equal to the number of DOMRect objects
associated with the DOMRectList. Otherwise, the DOMRect object at index must be
returned. Indices are zero-based.
DOMRectList only exists for compatibility with legacy Web content. When specifying a
new API, DOMRectList must not be used. Use sequence<DOMRect> instead. [WEBIDL]
5. The DOMQuad interface
Objects implementing the DOMQuad interface represents a quadrilateral.
[Exposed =(Window ,Worker ),Serializable ]interface {DOMQuad constructor (optional DOMPointInit = {},p1 optional DOMPointInit = {},p2 optional DOMPointInit = {},p3 optional DOMPointInit = {}); [p4 NewObject ]static DOMQuad fromRect (optional DOMRectInit = {}); [other NewObject ]static DOMQuad fromQuad (optional DOMQuadInit = {}); [other SameObject ]readonly attribute DOMPoint p1 ; [SameObject ]readonly attribute DOMPoint p2 ; [SameObject ]readonly attribute DOMPoint p3 ; [SameObject ]readonly attribute DOMPoint p4 ; [NewObject ]DOMRect getBounds (); [Default ]object (); };toJSON dictionary {DOMQuadInit DOMPointInit ;p1 DOMPointInit ;p2 DOMPointInit ;p3 DOMPointInit ; };p4
The following algorithms assume that DOMQuad objects have the internal member variables point 1, point 2, point
3, and point 4, which are
DOMPoint objects. DOMQuad must be able to access and set the value of these variables. The
author can modify these DOMPoint objects, which directly affects the quadrilateral.
An interface returning a DOMQuad object by an attribute or function may be able to modify
internal member variable values. Such an interface must specify this ability explicitly in prose.
Internal member variables must not be exposed in any way.
The DOMQuad(p1, p2,
p3, p4) constructor, when invoked, must run the following steps:
-
Let point1 be a new
DOMPointobject with its attributes set to the values of the namesake dictionary members in p1. -
Let point2 be a new
DOMPointobject with its attributes set to the values of the namesake dictionary members in p2. -
Let point3 be a new
DOMPointobject with its attributes set to the values of the namesake dictionary members in p3. -
Let point4 be a new
DOMPointobject with its attributes set to the values of the namesake dictionary members in p4. -
Return a new
DOMQuadwith point 1 set to point1, point 2 set to point2, point 3 set to point3 and point 4 set to point4.
Note: It is possible to pass DOMPoint/DOMPointReadOnly arguments as well. The passed
arguments will be transformed to the correct object type internally following the WebIDL rules.
[WEBIDL]
The fromRect(other)
static method on DOMQuad must create a DOMQuad from the DOMRectInit
dictionary other.
To create a DOMQuad from
a DOMRectInit dictionary other, follow these steps:
-
Let x, y, width and height be the value of other’s
x,y,widthandheightdictionary members, respectively. -
Let point1 be a new
DOMPointobject with x coordinate set to x, y coordinate set to y, z coordinate set to 0 and w perspective set to 1. -
Let point2 be a new
DOMPointobject with x coordinate set to x + width, y coordinate set to y, z coordinate set to 0 and w perspective set to 1. -
Let point3 be a new
DOMPointobject with x coordinate set to x + width, y coordinate set to y + height, z coordinate set to 0 and w perspective set to 1. -
Let point4 be a new
DOMPointobject with x coordinate set to x, y coordinate set to y + height, z coordinate set to 0 and w perspective set to 1. -
Return a new
DOMQuadwith point 1 set to point1, point 2 set to point2, point 3 set to point3 and point 4 set to point4.
The fromQuad(other)
static method on DOMQuad must create a DOMQuad from the DOMQuadInit
dictionary other.
To create a DOMQuad from
a DOMQuadInit dictionary other, follow these steps:
-
Let point1 be the result of invoking create a
DOMPointfrom the dictionaryp1dictionary member of other, if it exists. -
Let point2 be the result of invoking create a
DOMPointfrom the dictionaryp2dictionary member of other, if it exists. -
Let point3 be the result of invoking create a
DOMPointfrom the dictionaryp3dictionary member of other, if it exists. -
Let point4 be the result of invoking create a
DOMPointfrom the dictionaryp4dictionary member of other, if it exists. -
Return a new
DOMQuadwith point 1 set to point1, point 2 set to point2, point 3 set to point3 and point 4 set to point4.
p1 attribute must return point 1.
The p2 attribute must return point 2.
The p3 attribute must return point 3.
The p4 attribute must return point 4.
The getBounds() method, when invoked, must run the following
algorithm:
-
Let bounds be a
DOMRectobject. -
Let left be the NaN-safe minimum of point 1’s x coordinate, point 2’s x coordinate, point 3’s x coordinate and point 4’s x coordinate.
-
Let top be the NaN-safe minimum of point 1’s y coordinate, point 2’s y coordinate, point 3’s y coordinate and point 4’s y coordinate.
-
Let right be the NaN-safe maximum of point 1’s x coordinate, point 2’s x coordinate, point 3’s x coordinate and point 4’s x coordinate.
-
Let bottom be the NaN-safe maximum of point 1’s y coordinate, point 2’s y coordinate, point 3’s y coordinate and point 4’s y coordinate.
-
Set x coordinate of bounds to left, y coordinate of bounds to top, width dimension of bounds to right - left and height dimension of bounds to bottom - top.
-
Return bounds.
Tests
DOMQuad constructor is called with arguments of type DOMPoint and
DOMPointInit. Both arguments are accepted and can be used.
var point = new DOMPoint( 2 , 0 );
var quad1 = new DOMQuad( point, { x: 12 , y: 0 }, { x: 12 , y: 10 }, { x: 2 , y: 10 });
The attribute values of the resulting DOMQuad quad1 above are also
equivalent to the attribute values of the following DOMQuad quad2:
var rect = new DOMRect( 2 , 0 , 10 , 10 );
var quad2 = DOMQuad. fromRect( rect);
new DOMQuad({ x: 40 , y: 25 }, { x: 180 , y: 8 }, { x: 210 , y: 150 }, { x: 10 , y: 180 });
DOMQuad. The four red colored
circles represent the DOMPoint attributes p1 to p4. The dashed
rectangle represents the bounding rectangle returned by the getBounds() method of the
DOMQuad.6. The DOMMatrix interfaces
The DOMMatrix and DOMMatrixReadOnly interfaces each represent a mathematical matrix with the purpose of describing transformations in a graphical
context. The following sections describe the details of the interface.
In the following sections, terms have the following meaning:
- post-multiply
-
Term A post-multiplied by term B is equal to A · B.
- pre-multiply
-
Term A pre-multiplied by term B is equal to B · A.
- multiply
-
Multiply term A by term B is equal to A · B.
[Exposed =(Window ,Worker ),Serializable ]interface {DOMMatrixReadOnly constructor (optional (DOMString or sequence <unrestricted double >)); [init NewObject ]static DOMMatrixReadOnly fromMatrix (optional DOMMatrixInit = {}); [other NewObject ]static DOMMatrixReadOnly fromFloat32Array (Float32Array ); [array32 NewObject ]static DOMMatrixReadOnly fromFloat64Array (Float64Array ); // These attributes are simple aliases for certain elements of the 4x4 matrixarray64 readonly attribute unrestricted double a ;readonly attribute unrestricted double b ;readonly attribute unrestricted double c ;readonly attribute unrestricted double d ;readonly attribute unrestricted double e ;readonly attribute unrestricted double f ;readonly attribute unrestricted double m11 ;readonly attribute unrestricted double m12 ;readonly attribute unrestricted double m13 ;readonly attribute unrestricted double m14 ;readonly attribute unrestricted double m21 ;readonly attribute unrestricted double m22 ;readonly attribute unrestricted double m23 ;readonly attribute unrestricted double m24 ;readonly attribute unrestricted double m31 ;readonly attribute unrestricted double m32 ;readonly attribute unrestricted double m33 ;readonly attribute unrestricted double m34 ;readonly attribute unrestricted double m41 ;readonly attribute unrestricted double m42 ;readonly attribute unrestricted double m43 ;readonly attribute unrestricted double m44 ;readonly attribute boolean is2D ;readonly attribute boolean isIdentity ; // Immutable transform methods [NewObject ]DOMMatrix translate (optional unrestricted double = 0,tx optional unrestricted double = 0,ty optional unrestricted double = 0); [tz NewObject ]DOMMatrix scale (optional unrestricted double = 1,scaleX optional unrestricted double ,scaleY optional unrestricted double = 1,scaleZ optional unrestricted double = 0,originX optional unrestricted double = 0,originY optional unrestricted double = 0); [originZ NewObject ]DOMMatrix scaleNonUniform (optional unrestricted double = 1,scaleX optional unrestricted double = 1); [scaleY NewObject ]DOMMatrix scale3d (optional unrestricted double = 1,scale optional unrestricted double = 0,originX optional unrestricted double = 0,originY optional unrestricted double = 0); [originZ NewObject ]DOMMatrix rotate (optional unrestricted double = 0,rotX optional unrestricted double ,rotY optional unrestricted double ); [rotZ NewObject ]DOMMatrix rotateFromVector (optional unrestricted double = 0,x optional unrestricted double = 0); [y NewObject ]DOMMatrix rotateAxisAngle (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,z optional unrestricted double = 0); [angle NewObject ]DOMMatrix skewX (optional unrestricted double = 0); [sx NewObject ]DOMMatrix skewY (optional unrestricted double = 0); [sy NewObject ]DOMMatrix multiply (optional DOMMatrixInit = {}); [other NewObject ]DOMMatrix flipX (); [NewObject ]DOMMatrix flipY (); [NewObject ]DOMMatrix inverse (); [NewObject ]DOMPoint transformPoint (optional DOMPointInit = {}); [point NewObject ]Float32Array toFloat32Array (); [NewObject ]Float64Array toFloat64Array (); [Exposed =Window ]stringifier ; [Default ]object (); }; [toJSON Exposed =(Window ,Worker ),Serializable ,LegacyWindowAlias =(,SVGMatrix )]WebKitCSSMatrix interface :DOMMatrix DOMMatrixReadOnly {constructor (optional (DOMString or sequence <unrestricted double >)); [init NewObject ]static DOMMatrix fromMatrix (optional DOMMatrixInit = {}); [other NewObject ]static DOMMatrix fromFloat32Array (Float32Array ); [array32 NewObject ]static DOMMatrix fromFloat64Array (Float64Array ); // These attributes are simple aliases for certain elements of the 4x4 matrixarray64 inherit attribute unrestricted double a ;inherit attribute unrestricted double b ;inherit attribute unrestricted double c ;inherit attribute unrestricted double d ;inherit attribute unrestricted double e ;inherit attribute unrestricted double f ;inherit attribute unrestricted double m11 ;inherit attribute unrestricted double m12 ;inherit attribute unrestricted double m13 ;inherit attribute unrestricted double m14 ;inherit attribute unrestricted double m21 ;inherit attribute unrestricted double m22 ;inherit attribute unrestricted double m23 ;inherit attribute unrestricted double m24 ;inherit attribute unrestricted double m31 ;inherit attribute unrestricted double m32 ;inherit attribute unrestricted double m33 ;inherit attribute unrestricted double m34 ;inherit attribute unrestricted double m41 ;inherit attribute unrestricted double m42 ;inherit attribute unrestricted double m43 ;inherit attribute unrestricted double m44 ; // Mutable transform methodsDOMMatrix multiplySelf (optional DOMMatrixInit = {});other DOMMatrix preMultiplySelf (optional DOMMatrixInit = {});other DOMMatrix translateSelf (optional unrestricted double = 0,tx optional unrestricted double = 0,ty optional unrestricted double = 0);tz DOMMatrix scaleSelf (optional unrestricted double = 1,scaleX optional unrestricted double ,scaleY optional unrestricted double = 1,scaleZ optional unrestricted double = 0,originX optional unrestricted double = 0,originY optional unrestricted double = 0);originZ DOMMatrix scale3dSelf (optional unrestricted double = 1,scale optional unrestricted double = 0,originX optional unrestricted double = 0,originY optional unrestricted double = 0);originZ DOMMatrix rotateSelf (optional unrestricted double = 0,rotX optional unrestricted double ,rotY optional unrestricted double );rotZ DOMMatrix rotateFromVectorSelf (optional unrestricted double = 0,x optional unrestricted double = 0);y DOMMatrix rotateAxisAngleSelf (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,z optional unrestricted double = 0);angle DOMMatrix skewXSelf (optional unrestricted double = 0);sx DOMMatrix skewYSelf (optional unrestricted double = 0);sy DOMMatrix invertSelf (); [Exposed =Window ]DOMMatrix setMatrixValue (DOMString ); };transformList dictionary {DOMMatrix2DInit unrestricted double ;a unrestricted double ;b unrestricted double ;c unrestricted double ;d unrestricted double ;e unrestricted double ;f unrestricted double ;m11 unrestricted double ;m12 unrestricted double ;m21 unrestricted double ;m22 unrestricted double ;m41 unrestricted double ; };m42 dictionary :DOMMatrixInit DOMMatrix2DInit {unrestricted double = 0;m13 unrestricted double = 0;m14 unrestricted double = 0;m23 unrestricted double = 0;m24 unrestricted double = 0;m31 unrestricted double = 0;m32 unrestricted double = 1;m33 unrestricted double = 0;m34 unrestricted double = 0;m43 unrestricted double = 1;m44 boolean ; };is2D
The following algorithms assume that DOMMatrixReadOnly objects have the internal member
variables m11 element, m12 element, m13 element, m14 element, m21
element, m22 element, m23 element, m24 element, m31 element, m32
element, m33 element, m34 element, m41 element, m42 element, m43
element, m44 element and is 2D.
DOMMatrixReadOnly as well as the inheriting interface DOMMatrix must be able to access and
set the value of these variables.
An interface returning an DOMMatrixReadOnly object by an attribute or function may be able to
modify internal member variable values. Such an interface must specify this ability explicitly in
prose.
Internal member variables must not be exposed in any way.
The DOMMatrix and DOMMatrixReadOnly interfaces replace the SVGMatrix
interface from SVG. [SVG11]
6.1. DOMMatrix2DInit and DOMMatrixInit dictionaries
To validate and fixup (2D) a DOMMatrix2DInit or DOMMatrixInit
dictionary dict, run the following steps:
-
If if at least one of the following conditions are true for dict, then throw a
TypeErrorexception and abort these steps.-
aandm11are both present and SameValueZero(a,m11) isfalse. -
bandm12are both present and SameValueZero(b,m12) isfalse. -
candm21are both present and SameValueZero(c,m21) isfalse. -
dandm22are both present and SameValueZero(d,m22) isfalse. -
eandm41are both present and SameValueZero(e,m41) isfalse. -
fandm42are both present and SameValueZero(f,m42) isfalse.
-
-
If
m11is not present then set it to the value of membera, or value 1 ifais also not present. -
If
m12is not present then set it to the value of memberb, or value 0 ifbis also not present. -
If
m21is not present then set it to the value of memberc, or value 0 ifcis also not present. -
If
m22is not present then set it to the value of memberd, or value 1 ifdis also not present. -
If
m41is not present then set it to the value of membere, or value 0 ifeis also not present. -
If
m42is not present then set it to the value of memberf, or value 0 iffis also not present.
Note: The SameValueZero comparison algorithm returns true for two NaN
values, and also for 0 and -0. [ECMA-262]
To validate and fixup a DOMMatrixInit dictionary dict,
run the following steps:
-
Validate and fixup (2D) dict.
-
If
is2Distrueand: at least one ofm13,m14,m23,m24,m31,m32,m34,m43are present with a value other than 0 or -0, or at least one ofm33,m44are present with a value other than 1, then throw aTypeErrorexception and abort these steps. -
If
is2Dis not present and at least one ofm13,m14,m23,m24,m31,m32,m34,m43are present with a value other than 0 or -0, or at least one ofm33,m44are present with a value other than 1, setis2Dtofalse. -
If
is2Dis still not present, set it totrue.
Tests
6.2. Parsing a string into an abstract matrix
To parse a string into an abstract matrix, given a string transformList, means to run the following steps. It will either return a 4x4 abstract matrix and a boolean 2dTransform, or failure.
-
If transformList is the empty string, set it to the string "
matrix(1, 0, 0, 1, 0, 0)". -
Parse transformList into parsedValue given the grammar for the CSS transform property. The result will be a <transform-list>, the keyword none, or failure. If parsedValue is failure, or any <transform-function> has <length> values without absolute length units, or any keyword other than none is used, then return failure. [CSS3-SYNTAX] [CSS3-TRANSFORMS]
-
If parsedValue is none, set parsedValue to a <transform-list> containing a single identity matrix.
-
Let 2dTransform track the 2D/3D dimension status of parsedValue.
- If parsedValue consists of any three-dimensional transform functions
-
Set 2dTransform to
false. - Otherwise
-
Set 2dTransform to
true.
-
Transform all <transform-function>s to 4x4 abstract matrices by following the “Mathematical Description of Transform Functions”. [CSS3-TRANSFORMS]
-
Let matrix be a 4x4 abstract matrix as shown in the initial figure of this section. Post-multiply all matrices from left to right and set matrix to this product.
-
Return matrix and 2dTransform.
6.3. Creating DOMMatrixReadOnly and DOMMatrix objects
To create a 2d matrix of type type being either DOMMatrixReadOnly or
DOMMatrix, with a sequence init of 6 elements, follow these steps:
-
Let matrix be a new instance of type.
-
Set m11 element, m12 element, m21 element, m22 element, m41 element and m42 element to the values of init in order starting with the first value.
-
Set m13 element, m14 element, m23 element, m24 element, m31 element, m32 element, m34 element, and m43 element to 0.
-
Set m33 element and m44 element to 1.
-
Set is 2D to
true. -
Return matrix
To create a 3d matrix with type being either DOMMatrixReadOnly or
DOMMatrix, with a sequence init of 16 elements, follow these steps:
-
Let matrix be a new instance of type.
-
Set m11 element to m44 element to the values of init in column-major order.
-
Set is 2D to
false. -
Return matrix
The DOMMatrixReadOnly(init) and the DOMMatrix(init) constructors
must follow these steps:
- If init is omitted
-
Return the result of invoking create a 2d matrix of type
DOMMatrixReadOnlyorDOMMatrixas appropriate, with the sequence [1, 0, 0, 1, 0, 0]. - If init is a
DOMString -
-
If current global object is not a
Windowobject, then throw aTypeErrorexception. -
Parse init into an abstract matrix, and let matrix and 2dTransform be the result. If the result is failure, then throw a "
SyntaxError"DOMException. -
- If 2dTransform is
true -
Return the result of invoking create a 2d matrix of type
DOMMatrixReadOnlyorDOMMatrixas appropriate, with a sequence of numbers, the values being the elements m11, m12, m21, m22, m41 and m42 of matrix. - Otherwise
-
Return the result of invoking create a 3d matrix of type
DOMMatrixReadOnlyorDOMMatrixas appropriate, with a sequence of numbers, the values being the 16 elements of matrix.
- If 2dTransform is
-
- If init is a sequence with 6 elements
-
Return the result of invoking create a 2d matrix of type
DOMMatrixReadOnlyorDOMMatrixas appropriate, with the sequence init. - If init is a sequence with 16 elements
-
Return the result of invoking create a 3d matrix of type
DOMMatrixReadOnlyorDOMMatrixas appropriate, with the sequence init. - Otherwise
-
Throw a
TypeErrorexception.
The fromMatrix(other) static method on
DOMMatrixReadOnly must create a DOMMatrixReadOnly from the dictionary
other.
The fromMatrix(other) static method on
DOMMatrix must create a DOMMatrix from the dictionary other.
To create a
DOMMatrixReadOnly from a 2D dictionary other or to create a DOMMatrix from a 2D dictionary
other, follow these steps:
-
Validate and fixup (2D) other.
-
Return the result of invoking create a 2d matrix of type
DOMMatrixReadOnlyorDOMMatrixas appropriate, with a sequence of numbers, the values being the 6 elementsm11,m12,m21,m22,m41andm42of other in the given order.
To create a
DOMMatrixReadOnly from a dictionary other or to create a DOMMatrix from a dictionary
other, follow these steps:
-
Validate and fixup other.
-
- If the
is2Ddictionary member of other istrue -
Return the result of invoking create a 2d matrix of type
DOMMatrixReadOnlyorDOMMatrixas appropriate, with a sequence of numbers, the values being the 6 elementsm11,m12,m21,m22,m41andm42of other in the given order. - Otherwise
-
Return the result of invoking create a 3d matrix of type
DOMMatrixReadOnlyorDOMMatrixas appropriate, with a sequence of numbers, the values being the 16 elementsm11,m12,m13, ...,m44of other in the given order.
- If the
The fromFloat32Array(array32)
static method on DOMMatrixReadOnly and the fromFloat32Array(array32) static
method on DOMMatrix must follow these steps:
- If array32 has 6 elements
-
Return the result of invoking create a 2d matrix of type
DOMMatrixReadOnlyorDOMMatrixas appropriate, with a sequence of numbers taking the values from array32 in the provided order. - If array32 has 16 elements
-
Return the result of invoking create a 3d matrix of type
DOMMatrixReadOnlyorDOMMatrixas appropriate, with a sequence of numbers taking the values from array32 in the provided order. - Otherwise
-
Throw a
TypeErrorexception.
The fromFloat64Array(array64)
static method on DOMMatrixReadOnly and the fromFloat64Array(array64) static
method on DOMMatrix must follow these steps:
- If array64 has 6 elements
-
Return the result of invoking create a 2d matrix of type
DOMMatrixReadOnlyorDOMMatrixas appropriate, with a sequence of numbers taking the values from array64 in the provided order. - If array32 has 16 elements
-
Return the result of invoking create a 3d matrix of type
DOMMatrixReadOnlyorDOMMatrixas appropriate, with a sequence of numbers taking the values from array64 in the provided order. - Otherwise
-
Throw a
TypeErrorexception.
6.4. DOMMatrix attributes
The following attributes m11 to m44 correspond to the
16 items of the matrix interfaces.
m11 and a attributes, on getting, must
return the m11 element value. For the DOMMatrix interface, setting the
m11 or the a attribute must set the m11 element to
the new value.
The m12 and b attributes, on getting, must
return the m12 element value. For the DOMMatrix interface, setting the
m12 or the b attribute must set the m12 element to
the new value.
The m13 attribute, on getting, must return the m13
element value. For the DOMMatrix interface, setting the m13 attribute must
set the m13 element to the new value and, if the new value is not 0 or
-0, set is 2D to false.
The m14 attribute, on getting, must return the m14
element value. For the DOMMatrix interface, setting the m14 attribute must
set the m14 element to the new value and, if the new value is not 0 or
-0, set is 2D to false.
The m21 and c attributes, on getting, must
return the m21 element value. For the DOMMatrix interface, setting the
m21 or the c attribute must set the m21 element to
the new value.
The m22 and d attributes, on getting, must
return the m22 element value. For the DOMMatrix interface, setting the
m22 or the d attribute must set the m22 element to
the new value.
The m23 attribute, on getting, must return the m23
element value. For the DOMMatrix interface, setting the m23 attribute must
set the m23 element to the new value and, if the new value is not 0 or
-0, set is 2D to false.
The m24 attribute, on getting, must return the m24
element value. For the DOMMatrix interface, setting the m24 attribute must
set the m24 element to the new value and, if the new value is not 0 or
-0, set is 2D to false.
The m31 attribute, on getting, must return the m31
element value. For the DOMMatrix interface, setting the m31 attribute must
set the m31 element to the new value and, if the new value is not 0 or
-0, set is 2D to false.
The m32 attribute, on getting, must return the m32
element value. For the DOMMatrix interface, setting the m32 attribute must
set the m32 element to the new value and, if the new value is not 0 or
-0, set is 2D to false.
The m33 attribute, on getting, must return the m33
element value. For the DOMMatrix interface, setting the m33 attribute must
set the m33 element to the new value and, if the new value is not 1, set is 2D to false.
The m34 attribute, on getting, must return the m34
element value. For the DOMMatrix interface, setting the m34 attribute must
set the m34 element to the new value and, if the new value is not 0 or
-0, set is 2D to false.
The m41 and e attributes, on getting, must
return the m41 element value. For the DOMMatrix interface, setting the
m41 or the e attribute must set the m41 element to
the new value.
The m42 and f attributes, on getting, must
return the m42 element value. For the DOMMatrix interface, setting the
m42 or the f attribute must set the m42 element to
the new value.
The m43 attribute, on getting, must return the m43
element value. For the DOMMatrix interface, setting the m43 attribute must
set the m43 element to the new value and, if the new value is not 0 or
-0, set is 2D to false.
The m44 attribute, on getting, must return the m44
element value. For the DOMMatrix interface, setting the m44 attribute must
set the m44 element to the new value and, if the new value is not 1, set is 2D to false.
a to f correspond to the 2D
components of the matrix interfaces.
The a attribute is an alias to the m11 attribute.
The b attribute is an alias to the m12 attribute.
The c attribute is an alias to the m21 attribute.
The d attribute is an alias to the m22 attribute.
The following attributes provide status information about DOMMatrixReadOnly.
is2D attribute must return the value of is 2D.
The isIdentity attribute must return true if m12 element, m13 element, m14 element, m21 element, m23 element, m24 element, m31 element, m32 element, m34 element, m41 element, m42 element, m43 element are 0
or -0 and m11 element, m22 element, m33
element, m44 element are 1. Otherwise it must return false.
Every DOMMatrixReadOnly object must be flagged with a boolean is 2D. This flag indicates that:
-
The current matrix was initialized as a 2D matrix. See individual creators for more details.
-
Only 2D transformation operations were applied. Each mutable or immutable transformation method defines if is 2D must be set to
false.
Note: Is 2D can never be set to true when it was set to
false before on a DOMMatrix object with the exception of calling the
setMatrixValue() method.
6.5. Immutable transformation methods
The following methods do not modify the current matrix and return a new DOMMatrix object.
translate(tx, ty, tz)-
-
Let result be the resulting matrix initialized to the values of the current matrix.
-
Perform a
translateSelf()transformation on result with the arguments tx, ty, tz. -
Return result.
The current matrix is not modified.
-
scale(scaleX, scaleY, scaleZ, originX, originY, originZ)-
-
If scaleY is missing, set scaleY to the value of scaleX.
-
Let result be the resulting matrix initialized to the values of the current matrix.
-
Perform a
scaleSelf()transformation on result with the arguments scaleX, scaleY, scaleZ, originX, originY, originZ. -
Return result.
The current matrix is not modified.
-
scaleNonUniform(scaleX, scaleY)-
Note: Supported for legacy reasons to be compatible with
SVGMatrixas defined in SVG 1.1 [SVG11]. Authors are encouraged to usescale()instead.-
Let result be the resulting matrix initialized to the values of the current matrix.
-
Perform a
scaleSelf()transformation on result with the arguments scaleX, scaleY, 1, 0, 0, 0. -
Return result.
The current matrix is not modified.
-
scale3d(scale, originX, originY, originZ)-
-
Let result be the resulting matrix initialized to the values of the current matrix.
-
Perform a
scale3dSelf()transformation on result with the arguments scale, originX, originY, originZ. -
Return result.
The current matrix is not modified.
-
rotate(rotX, rotY, rotZ)-
-
Let result be the resulting matrix initialized to the values of the current matrix.
-
Perform a
rotateSelf()transformation on result with the arguments rotX, rotY, rotZ. -
Return result.
The current matrix is not modified.
-
rotateFromVector(x, y)-
-
Let result be the resulting matrix initialized to the values of the current matrix.
-
Perform a
rotateFromVectorSelf()transformation on result with the arguments x, y. -
Return result.
The current matrix is not modified.
-
rotateAxisAngle(x, y, z, angle)-
-
Let result be the resulting matrix initialized to the values of the current matrix.
-
Perform a
rotateAxisAngleSelf()transformation on result with the arguments x, y, z, angle. -
Return result.
The current matrix is not modified.
-
skewX(sx)-
-
Let result be the resulting matrix initialized to the values of the current matrix.
-
Perform a
skewXSelf()transformation on result with the argument sx. -
Return result.
The current matrix is not modified.
-
skewY(sy)-
-
Let result be the resulting matrix initialized to the values of the current matrix.
-
Perform a
skewYSelf()transformation on result with the argument sy. -
Return result.
The current matrix is not modified.
-
multiply(other)-
-
Let result be the resulting matrix initialized to the values of the current matrix.
-
Perform a
multiplySelf()transformation on result with the argument other. -
Return result.
The current matrix is not modified.
-
flipX()-
-
Let result be the resulting matrix initialized to the values of the current matrix.
-
Post-multiply result with
new DOMMatrix([-1, 0, 0, 1, 0, 0]). -
Return result.
The current matrix is not modified.
-
flipY()-
-
Let result be the resulting matrix initialized to the values of the current matrix.
-
Post-multiply result with
new DOMMatrix([1, 0, 0, -1, 0, 0]). -
Return result.
The current matrix is not modified.
-
inverse()-
-
Let result be the resulting matrix initialized to the values of the current matrix.
-
Perform a
invertSelf()transformation on result. -
Return result.
The current matrix is not modified.
-
The following methods do not modify the current matrix.
transformPoint(point)-
Let pointObject be the result of invoking create a
DOMPointfrom the dictionary point. Return the result of invoking transform a point with a matrix, given pointObject and the current matrix. The passed argument does not get modified. toFloat32Array()-
Returns the serialized 16 elements
m11tom44of the current matrix in column-major order asFloat32Array. toFloat64Array()-
Returns the serialized 16 elements
m11tom44of the current matrix in column-major order asFloat64Array. - stringification behavior
-
-
If one or more of m11 element through m44 element are a non-finite value, then throw an "
InvalidStateError"DOMException.Note: The CSS syntax cannot represent NaN or Infinity values.
-
Let string be the empty string.
-
If is 2D is
true, then:-
Append "
matrix(" to string. -
Append ! ToString(m11 element) to string.
-
Append "
," to string. -
Append ! ToString(m12 element) to string.
-
Append "
," to string. -
Append ! ToString(m21 element) to string.
-
Append "
," to string. -
Append ! ToString(m22 element) to string.
-
Append "
," to string. -
Append ! ToString(m41 element) to string.
-
Append "
," to string. -
Append ! ToString(m42 element) to string.
-
Append "
)" to string.
Note: The string will be in the form of a a CSS Transforms <matrix()> function. [CSS3-TRANSFORMS]
-
-
Otherwise:
-
Append "
matrix3d(" to string. -
Append ! ToString(m11 element) to string.
-
Append "
," to string. -
Append ! ToString(m12 element) to string.
-
Append "
," to string. -
Append ! ToString(m13 element) to string.
-
Append "
," to string. -
Append ! ToString(m14 element) to string.
-
Append "
," to string. -
Append ! ToString(m21 element) to string.
-
Append "
," to string. -
Append ! ToString(m22 element) to string.
-
Append "
," to string. -
Append ! ToString(m23 element) to string.
-
Append "
," to string. -
Append ! ToString(m24 element) to string.
-
Append "
," to string. -
Append ! ToString(m41 element) to string.
-
Append "
," to string. -
Append ! ToString(m42 element) to string.
-
Append "
," to string. -
Append ! ToString(m43 element) to string.
-
Append "
," to string. -
Append ! ToString(m44 element) to string.
-
Append "
)" to string.
Note: The string will be in the form of a a CSS Transforms <matrix3d()> function. [CSS3-TRANSFORMS]
-
-
Return string.
-
var matrix = new DOMMatrix();
matrix. scaleSelf( 2 );
matrix. translateSelf( 20 , 20 );
console. assert( matrix. toString() ===
"matrix(2, 0, 0, 2, 40, 40)" );
var matrix = new DOMMatrix();
matrix. scale3dSelf( 2 );
console. assert( matrix. toString() ===
"matrix3d(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1)" );
For 3D operations, the stringifier returns a string representing a 3D matrix.
var matrix = new DOMMatrix([ NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN ]);
var string = matrix + " Batman!" ;
6.6. Mutable transformation methods
The following methods modify the current matrix, so that each method returns the matrix where it was invoked on. The primary benefit of this is allowing content creators to chain method calls.
var matrix = new DOMMatrix();
matrix. translateSelf( 20 , 20 );
matrix. scaleSelf( 2 );
matrix. translateSelf( - 20 , - 20 );
is equivalent to:
var matrix = new DOMMatrix();
matrix. translateSelf( 20 , 20 ). scaleSelf( 2 ). translateSelf( - 20 , - 20 );
Note: Authors who use chained method calls are advised to use mutable transformation methods
to avoid unnecessary memory allocations due to creation of intermediate DOMMatrix objects in
user agents.
multiplySelf(other)-
-
Let otherObject be the result of invoking create a
DOMMatrixfrom the dictionary other. -
The otherObject matrix gets post-multiplied to the current matrix.
-
If is 2D of otherObject is
false, set is 2D of the current matrix tofalse. -
Return the current matrix.
-
preMultiplySelf(other)-
-
Let otherObject be the result of invoking create a
DOMMatrixfrom the dictionary other. -
The otherObject matrix gets pre-multiplied to the current matrix.
-
If is 2D of otherObject is
false, set is 2D of the current matrix tofalse. -
Return the current matrix.
-
translateSelf(tx, ty, tz)-
-
Post-multiply a translation transformation on the current matrix. The 3D translation matrix is described in CSS Transforms. [CSS3-TRANSFORMS]
-
If tz is specified and not 0 or -0, set is 2D of the current matrix to
false. -
Return the current matrix.
-
scaleSelf(scaleX, scaleY, scaleZ, originX, originY, originZ)-
-
Perform a
translateSelf()transformation on the current matrix with the arguments originX, originY, originZ. -
If scaleY is missing, set scaleY to the value of scaleX.
-
Post-multiply a non-uniform scale transformation on the current matrix. The 3D scale matrix is described in CSS Transforms with sx = scaleX, sy = scaleY and sz = scaleZ. [CSS3-TRANSFORMS]
-
Negate originX, originY and originZ.
-
Perform a
translateSelf()transformation on the current matrix with the arguments originX, originY, originZ. -
If scaleZ is not 1, set is 2D of the current matrix to
false. -
Return the current matrix.
-
scale3dSelf(scale, originX, originY, originZ)-
-
Apply a
translateSelf()transformation to the current matrix with the arguments originX, originY, originZ. -
Post-multiply a uniform 3D scale transformation (
m11=m22=m33= scale) on the current matrix. The 3D scale matrix is described in CSS Transforms with sx = sy = sz = scale. [CSS3-TRANSFORMS] -
Apply a
translateSelf()transformation to the current matrix with the arguments -originX, -originY, -originZ. -
If scale is not 1, set is 2D of the current matrix to
false. -
Return the current matrix.
-
rotateSelf(rotX, rotY, rotZ)-
-
If rotY and rotZ are both missing, set rotZ to the value of rotX and set rotX and rotY to 0.
-
If rotY is still missing, set rotY to 0.
-
If rotZ is still missing, set rotZ to 0.
-
If rotX or rotY are not 0 or -0, set is 2D of the current matrix to
false. -
Post-multiply a rotation transformation on the current matrix around the vector 0, 0, 1 by the specified rotation rotZ in degrees. The 3D rotation matrix is described in CSS Transforms with alpha = rotZ in degrees. [CSS3-TRANSFORMS]
-
Post-multiply a rotation transformation on the current matrix around the vector 0, 1, 0 by the specified rotation rotY in degrees. The 3D rotation matrix is described in CSS Transforms with alpha = rotY in degrees. [CSS3-TRANSFORMS]
-
Post-multiply a rotation transformation on the current matrix around the vector 1, 0, 0 by the specified rotation rotX in degrees. The 3D rotation matrix is described in CSS Transforms with alpha = rotX in degrees. [CSS3-TRANSFORMS]
-
Return the current matrix.
-
rotateFromVectorSelf(x, y)-
-
Post-multiply a rotation transformation on the current matrix. The rotation angle is determined by the angle between the vector (1,0)T and (x,y)T in the clockwise direction. If x and y should both be 0 or -0, the angle is specified as 0. The 2D rotation matrix is described in CSS Transforms where
alphais the angle between the vector (1,0)T and (x,y)T in degrees. [CSS3-TRANSFORMS] -
Return the current matrix.
-
rotateAxisAngleSelf(x, y, z, angle)-
-
Post-multiply a rotation transformation on the current matrix around the specified vector x, y, z by the specified rotation angle in degrees. The 3D rotation matrix is described in CSS Transforms with alpha = angle in degrees. [CSS3-TRANSFORMS]
-
If x or y are not 0 or -0, set is 2D of the current matrix to
false. -
Return the current matrix.
-
skewXSelf(sx)-
-
Post-multiply a skewX transformation on the current matrix by the specified angle sx in degrees. The 2D skewX matrix is described in CSS Transforms with alpha = sx in degrees. [CSS3-TRANSFORMS]
-
Return the current matrix.
-
skewYSelf(sy)-
-
Post-multiply a skewX transformation on the current matrix by the specified angle sy in degrees. The 2D skewY matrix is described in CSS Transforms with beta = sy in degrees. [CSS3-TRANSFORMS]
-
Return the current matrix.
-
invertSelf()setMatrixValue(transformList)-
-
Parse transformList into an abstract matrix, and let matrix and 2dTransform be the result. If the result is failure, then throw a "
SyntaxError"DOMException. -
Set is 2D to the value of 2dTransform.
-
Set m11 element through m44 element to the element values of matrix in column-major order.
-
Return the current matrix.
-
7. Structured serialization
DOMPointReadOnly, DOMPoint, DOMRectReadOnly, DOMRect, DOMQuad,
DOMMatrixReadOnly, and DOMMatrix objects are serializable objects. [HTML]
The serialization steps for DOMPointReadOnly and DOMPoint, given value and
serialized, are:
-
Set serialized.[[X]] to value’s x coordinate.
-
Set serialized.[[Y]] to value’s y coordinate.
-
Set serialized.[[Z]] to value’s z coordinate.
-
Set serialized.[[W]] to value’s w perspective.
Their deserialization steps, given serialized and value, are:
-
Set value’s x coordinate to serialized.[[X]].
-
Set value’s y coordinate to serialized.[[Y]].
-
Set value’s z coordinate to serialized.[[Z]].
-
Set value’s w perspective to serialized.[[W]].
The serialization steps for DOMRectReadOnly and DOMRect, given value and
serialized, are:
-
Set serialized.[[X]] to value’s x coordinate.
-
Set serialized.[[Y]] to value’s y coordinate.
-
Set serialized.[[Width]] to value’s width dimension.
-
Set serialized.[[Height]] to value’s height dimension.
Their deserialization steps, given serialized and value, are:
-
Set value’s x coordinate to serialized.[[X]].
-
Set value’s y coordinate to serialized.[[Y]].
-
Set value’s width dimension to serialized.[[Width]].
-
Set value’s height dimension to serialized.[[Height]].
The serialization steps for DOMQuad, given value and serialized, are:
-
Set serialized.[[P1]] to the sub-serialization of value’s point 1.
-
Set serialized.[[P2]] to the sub-serialization of value’s point 2.
-
Set serialized.[[P3]] to the sub-serialization of value’s point 3.
-
Set serialized.[[P4]] to the sub-serialization of value’s point 4.
Their deserialization steps, given serialized and value, are:
-
Set value’s point 1 to the sub-deserialization of serialized.[[P1]].
-
Set value’s point 2 to the sub-deserialization of serialized.[[P2]].
-
Set value’s point 3 to the sub-deserialization of serialized.[[P3]].
-
Set value’s point 4 to the sub-deserialization of serialized.[[P4]].
The serialization steps for DOMMatrixReadOnly and DOMMatrix, given value and
serialized, are:
-
If value’s is 2D is
true:-
Set serialized.[[M11]] to value’s m11 element.
-
Set serialized.[[M12]] to value’s m12 element.
-
Set serialized.[[M21]] to value’s m21 element.
-
Set serialized.[[M22]] to value’s m22 element.
-
Set serialized.[[M41]] to value’s m41 element.
-
Set serialized.[[M42]] to value’s m42 element.
-
Set serialized.[[Is2D]] to
true.
Note: It is possible for a 2D
DOMMatrixorDOMMatrixReadOnlyto have -0 for some of the other elements, e.g., the m13 element, which will not be roundtripped by this algorithm. -
-
Otherwise:
-
Set serialized.[[M11]] to value’s m11 element.
-
Set serialized.[[M12]] to value’s m12 element.
-
Set serialized.[[M13]] to value’s m13 element.
-
Set serialized.[[M14]] to value’s m14 element.
-
Set serialized.[[M21]] to value’s m21 element.
-
Set serialized.[[M22]] to value’s m22 element.
-
Set serialized.[[M23]] to value’s m23 element.
-
Set serialized.[[M24]] to value’s m24 element.
-
Set serialized.[[M31]] to value’s m31 element.
-
Set serialized.[[M32]] to value’s m32 element.
-
Set serialized.[[M33]] to value’s m33 element.
-
Set serialized.[[M34]] to value’s m34 element.
-
Set serialized.[[M41]] to value’s m41 element.
-
Set serialized.[[M42]] to value’s m42 element.
-
Set serialized.[[M43]] to value’s m43 element.
-
Set serialized.[[M44]] to value’s m44 element.
-
Set serialized.[[Is2D]] to
false.
Their deserialization steps, given serialized and value, are:
-
If serialized.[[Is2D]] is
true:-
Set value’s m11 element to serialized.[[M11]].
-
Set value’s m12 element to serialized.[[M12]].
-
Set value’s m13 element to 0.
-
Set value’s m14 element to 0.
-
Set value’s m21 element to serialized.[[M21]].
-
Set value’s m22 element to serialized.[[M22]].
-
Set value’s m23 element to 0.
-
Set value’s m24 element to 0.
-
Set value’s m31 element to 0.
-
Set value’s m32 element to 0.
-
Set value’s m33 element to 1.
-
Set value’s m34 element to 0.
-
Set value’s m41 element to serialized.[[M41]].
-
Set value’s m42 element to serialized.[[M42]].
-
Set value’s m43 element to 0.
-
Set value’s m44 element to 1.
-
Set value’s is 2D to
true.
-
-
Otherwise:
-
Set value’s m11 element to serialized.[[M11]].
-
Set value’s m12 element to serialized.[[M12]].
-
Set value’s m13 element to serialized.[[M13]].
-
Set value’s m14 element to serialized.[[M14]].
-
Set value’s m21 element to serialized.[[M21]].
-
Set value’s m22 element to serialized.[[M22]].
-
Set value’s m23 element to serialized.[[M23]].
-
Set value’s m24 element to serialized.[[M24]].
-
Set value’s m31 element to serialized.[[M31]].
-
Set value’s m32 element to serialized.[[M32]].
-
Set value’s m33 element to serialized.[[M33]].
-
Set value’s m34 element to serialized.[[M34]].
-
Set value’s m41 element to serialized.[[M41]].
-
Set value’s m42 element to serialized.[[M42]].
-
Set value’s m43 element to serialized.[[M43]].
-
Set value’s m44 element to serialized.[[M44]].
-
Set value’s is 2D to
false.
-
-
8. Security Considerations
The DOMMatrix and DOMMatrixReadOnly interfaces have entry-points to parsing a string with
CSS syntax. Therefore the
security considerations of the CSS Syntax specification apply. [CSS3-SYNTAX]
There are no other known security or privacy impacts of the interfaces defined in this specification. However, other specifications that have APIs that use the interfaces defined in this specification could potentially introduce security or privacy issues.
9. Privacy Considerations
getBoundingClientRect() API defined in CSSOM View returns a
DOMRect that could be used to measure the size of an inline element containing some text of a
particular font, which exposes information about whether the user has that font installed. That
information, if used to test many common fonts, can then be personally-identifiable information.
[CSSOM-VIEW]
10. Historical
This section is non-normative.
The interfaces in this specification are intended to replace earlier similar interfaces found in various specifications as well as proprietary interfaces found in some user agents. This section attempts to enumerate these interfaces.
10.1. CSSOM View
Earlier revisions of CSSOM View defined a ClientRect interface, which is replaced by
DOMRect. Implementations conforming to this specification will not support
ClientRect. [CSSOM-VIEW]
10.2. SVG
Earlier revisions of SVG defined SVGPoint, SVGRect, SVGMatrix, which are defined in
this specifications as aliases to DOMPoint, DOMRect, DOMMatrix, respectively. [SVG11]
10.3. Non-standard
Some user agents supported a WebKitPoint interface. Implementations conforming to
this specification will not support WebKitPoint.
Several user agents supported a WebKitCSSMatrix interface, which is also widely used on the
Web. It is defined in this specification as an alias to DOMMatrix.
Some user agents supported a MSCSSMatrix interface. Implementations conforming to
this specification will not support MSCSSMatrix.
Document conventions
The NaN-safe minimum of a non-empty list of unrestricted double values is NaN if any
member of the list is NaN, or the minimum of the list otherwise.
Analogously, the NaN-safe maximum of a non-empty list of unrestricted double values
is NaN if any member of the list is NaN, or the maximum of the list otherwise.
Changes since last publication
This section is non-normative.
The following changes were made since the 4 December 2018 Candidate Recommendation.
-
Clarified that column vectors are pre-multiplied by matrices #294, #359
-
Defined minimum and maximum as preferring NaN #222
-
Used new WebIDL constructor definition
-
Added default dictionary value
-
Added [NewObject] to matrixTransform, to align with prose description
-
Removed redundant originZ check #350
-
Added explicit [Exposed] to DOMRectList
-
Added Web Platform Tests coverage
The following changes were made since the 25 November 2014 Candidate Recommendation.
-
Changed the interfaces to generally use specific static operations for construction instead of using overloaded constructors, and made the interfaces more consistent. However,
DOMMatrixstill uses an overloaded constructor for compatibility withWebKitCSSMatrix. -
Introduced the
DOMMatrixInitdictionary. -
Added JSON serializers for the interfaces.
-
Changed
DOMMatrixReadOnlyandDOMMatrixto be compatible withWebKitCSSMatrix:-
Changed
rotate()androtateSelf()arguments from(angle, originX, originY)to(rotX, rotY, rotZ). -
Changed the
scale()andscaleSelf()methods to be more like the previousscaleNonUniform()/scaleNonUniformSelf()methods, and dropped thescaleNonUniformSelf()method. Keep support forscaleNonUniform()for legacy reasons. -
Made all arguments optional for
DOMMatrix/DOMMatrixReadOnlymethods, except forsetMatrixValue(). -
Added no-argument constructor.
-
Defined
WebKitCSSMatrixto be a legacy window alias forDOMMatrix.
-
-
In workers,
DOMMatrixandDOMMatrixReadOnlydo not support parsing or stringifying with CSS syntax. -
Defined structured serialization of the interfaces.
-
The live
boundsattribute onDOMQuadwas replaced with a non-livegetBounds()method. The "associated bounding rectangle" concept was also removed. -
Changed the string parser for
DOMMatrixandDOMMatrixReadOnlyto use CSS rules instead of SVG rules. -
The stringifier for
DOMMatrixandDOMMatrixReadOnlynow throws if there are non-finite values, and otherwise uses the ToString algorithm. [ECMA-262] -
Made comparisons treat 0 and -0 as equal throughout.
-
Added § 9 Privacy Considerations and § 10 Historical sections.
The following changes were made since the 18 September 2014 Working Draft.
-
Exposed
DOMPointReadOnly,DOMPoint,DOMRectReadOnly,DOMRect,DOMQuad,DOMMatrixReadOnlyandDOMMatrixtoWindowandWorker. Defined cloning of the interface.
The following changes were made since the 26 June 2014 Last Call Public Working Draft.
-
DOMPointReadOnlygot a constructor taking 4 arguments. -
DOMRectReadOnlygot a constructor taking 4 arguments. -
DOMMatrixReadOnlygot a constructor taking a sequence of numbers as argument. -
DOMRectListturned to an ArrayClass. The interfaces can just be used for legacy interfaces. -
Put
DOMRectListon at-Risk awaiting browser feedback. -
All interfaces are described in the sense of internal elements to describe the read-only/writable and inheriting behavior.
-
Replace
IndexSizeErrorexception withTypeError.
The following changes were made since the 22 May 2014 First Public Working Draft.
-
Renamed mutable transformation methods *By to *Self. (E.g.
translateBy()got renamed totranslateSelf().) -
Renamed
invert()toinvertSelf(). -
Added
setMatrixValue()which takes a transformation list asDOMString. -
is2DandisIdentityare read-only attributes now. -
DOMMatrixReadOnlygets flagged to track 3D transformation and attribute settings foris2D. -
invertSelf()andinverse()do not throw exceptions anymore.
Acknowledgments
The editors would like to thank Robert O’Callahan for contributing to this specification. Many thanks to Dean Jackson for his initial proposal of DOMMatrix. Thanks to Adenilson Cavalcanti, Benoit Jacob, Boris Zbarsky, Brian Birtles, Cameron McCormack, Domenic Denicola, Kari Pihkala, Max Vujovic, Mike Taylor, Peter Hall, Philip Jägenstedt, Simon Fraser, and Timothy Loh for their careful reviews, comments, and corrections.
Conformance
Document conventions
Conformance requirements are expressed with a combination of descriptive assertions and RFC 2119 terminology. The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in the normative parts of this document are to be interpreted as described in RFC 2119. However, for readability, these words do not appear in all uppercase letters in this specification.
All of the text of this specification is normative except sections explicitly marked as non-normative, examples, and notes. [RFC2119]
Examples in this specification are introduced with the words “for example”
or are set apart from the normative text with class="example",
like this:
Informative notes begin with the word “Note” and are set apart from the
normative text with class="note", like this:
Note, this is an informative note.
Advisements are normative sections styled to evoke special attention and are
set apart from other normative text with <strong class="advisement">, like
this:
UAs MUST provide an accessible alternative.
Tests
Tests relating to the content of this specification may be documented in “Tests” blocks like this one. Any such block is non-normative.
Conformance classes
Conformance to this specification is defined for three conformance classes:
- style sheet
- A CSS style sheet.
- renderer
- A UA that interprets the semantics of a style sheet and renders documents that use them.
- authoring tool
- A UA that writes a style sheet.
A style sheet is conformant to this specification if all of its statements that use syntax defined in this module are valid according to the generic CSS grammar and the individual grammars of each feature defined in this module.
A renderer is conformant to this specification if, in addition to interpreting the style sheet as defined by the appropriate specifications, it supports all the features defined by this specification by parsing them correctly and rendering the document accordingly. However, the inability of a UA to correctly render a document due to limitations of the device does not make the UA non-conformant. (For example, a UA is not required to render color on a monochrome monitor.)
An authoring tool is conformant to this specification if it writes style sheets that are syntactically correct according to the generic CSS grammar and the individual grammars of each feature in this module, and meet all other conformance requirements of style sheets as described in this module.
Partial implementations
So that authors can exploit the forward-compatible parsing rules to assign fallback values, CSS renderers must treat as invalid (and ignore as appropriate) any at-rules, properties, property values, keywords, and other syntactic constructs for which they have no usable level of support. In particular, user agents must not selectively ignore unsupported component values and honor supported values in a single multi-value property declaration: if any value is considered invalid (as unsupported values must be), CSS requires that the entire declaration be ignored.
Implementations of Unstable and Proprietary Features
To avoid clashes with future stable CSS features, the CSSWG recommends following best practices for the implementation of unstable features and proprietary extensions to CSS.
Non-experimental implementations
Once a specification reaches the Candidate Recommendation stage, non-experimental implementations are possible, and implementors should release an unprefixed implementation of any CR-level feature they can demonstrate to be correctly implemented according to spec.
To establish and maintain the interoperability of CSS across implementations, the CSS Working Group requests that non-experimental CSS renderers submit an implementation report (and, if necessary, the testcases used for that implementation report) to the W3C before releasing an unprefixed implementation of any CSS features. Testcases submitted to W3C are subject to review and correction by the CSS Working Group.
Further information on submitting testcases and implementation reports can be found from on the CSS Working Group’s website at https://www.w3.org/Style/CSS/Test/. Questions should be directed to the public-css-testsuite@w3.org mailing list.
CR exit criteria
For this specification to be advanced to Proposed Recommendation, there must be at least two independent, interoperable implementations of each feature. Each feature may be implemented by a different set of products, there is no requirement that all features be implemented by a single product. For the purposes of this criterion, we define the following terms:
- independent
- each implementation must be developed by a different party and cannot share, reuse, or derive from code used by another qualifying implementation. Sections of code that have no bearing on the implementation of this specification are exempt from this requirement.
- interoperable
- passing the respective test case(s) in the official CSS test suite, or, if the implementation is not a Web browser, an equivalent test. Every relevant test in the test suite should have an equivalent test created if such a user agent (UA) is to be used to claim interoperability. In addition if such a UA is to be used to claim interoperability, then there must one or more additional UAs which can also pass those equivalent tests in the same way for the purpose of interoperability. The equivalent tests must be made publicly available for the purposes of peer review.
- implementation
-
a user agent which:
- implements the specification.
- is available to the general public. The implementation may be a shipping product or other publicly available version (i.e., beta version, preview release, or "nightly build"). Non-shipping product releases must have implemented the feature(s) for a period of at least one month in order to demonstrate stability.
- is not experimental (i.e., a version specifically designed to pass the test suite and is not intended for normal usage going forward).
The specification will remain Candidate Recommendation for at least six months.
Index
Terms defined by this specification
- 4x4 abstract matrix, in § 6
-
a
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrix2DInit, in § 6
-
b
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrix2DInit, in § 6
-
bottom
- attribute for DOMRectReadOnly, in § 3
- attribute for DOMRectReadOnly DOMRect, in § 3
-
c
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrix2DInit, in § 6
-
constructor()
- constructor for DOMMatrix, in § 6.3
- constructor for DOMMatrixReadOnly, in § 6.3
- constructor for DOMPoint, in § 2
- constructor for DOMPointReadOnly, in § 2
- constructor for DOMQuad, in § 5
- constructor for DOMRect, in § 3
- constructor for DOMRectReadOnly, in § 3
-
constructor(init)
- constructor for DOMMatrix, in § 6.3
- constructor for DOMMatrixReadOnly, in § 6.3
- constructor(p1), in § 5
- constructor(p1, p2), in § 5
- constructor(p1, p2, p3), in § 5
- constructor(p1, p2, p3, p4), in § 5
-
constructor(x)
- constructor for DOMPoint, in § 2
- constructor for DOMPointReadOnly, in § 2
- constructor for DOMRect, in § 3
- constructor for DOMRectReadOnly, in § 3
-
constructor(x, y)
- constructor for DOMPoint, in § 2
- constructor for DOMPointReadOnly, in § 2
- constructor for DOMRect, in § 3
- constructor for DOMRectReadOnly, in § 3
-
constructor(x, y, width)
- constructor for DOMRect, in § 3
- constructor for DOMRectReadOnly, in § 3
-
constructor(x, y, width, height)
- constructor for DOMRect, in § 3
- constructor for DOMRectReadOnly, in § 3
-
constructor(x, y, z)
- constructor for DOMPoint, in § 2
- constructor for DOMPointReadOnly, in § 2
-
constructor(x, y, z, w)
- constructor for DOMPoint, in § 2
- constructor for DOMPointReadOnly, in § 2
- create a 2d matrix, in § 6.3
- create a 3d matrix, in § 6.3
- create a DOMMatrix from the 2D dictionary, in § 6.3
- create a DOMMatrix from the dictionary, in § 6.3
- create a DOMMatrixReadOnly from the 2D dictionary, in § 6.3
- create a DOMMatrixReadOnly from the dictionary, in § 6.3
- create a DOMPoint from the dictionary, in § 2
- create a DOMPointReadOnly from the dictionary, in § 2
- create a DOMQuad from the DOMQuadInit dictionary, in § 5
- create a DOMQuad from the DOMRectInit dictionary, in § 5
- create a DOMRect from the dictionary, in § 3
- create a DOMRectReadOnly from the dictionary, in § 3
-
d
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrix2DInit, in § 6
- DOMMatrix, in § 6
- DOMMatrix(), in § 6.3
- DOMMatrix2DInit, in § 6
- DOMMatrix(init), in § 6.3
- DOMMatrixInit, in § 6
- DOMMatrixReadOnly, in § 6
- DOMMatrixReadOnly(), in § 6.3
- DOMMatrixReadOnly(init), in § 6.3
- DOMPoint, in § 2
- DOMPoint(), in § 2
- DOMPointInit, in § 2
- DOMPointReadOnly, in § 2
- DOMPointReadOnly(), in § 2
- DOMPointReadOnly(x), in § 2
- DOMPointReadOnly(x, y), in § 2
- DOMPointReadOnly(x, y, z), in § 2
- DOMPointReadOnly(x, y, z, w), in § 2
- DOMPoint(x), in § 2
- DOMPoint(x, y), in § 2
- DOMPoint(x, y, z), in § 2
- DOMPoint(x, y, z, w), in § 2
- DOMQuad, in § 5
- DOMQuad(), in § 5
- DOMQuadInit, in § 5
- DOMQuad(p1), in § 5
- DOMQuad(p1, p2), in § 5
- DOMQuad(p1, p2, p3), in § 5
- DOMQuad(p1, p2, p3, p4), in § 5
- DOMRect, in § 3
- DOMRect(), in § 3
- DOMRectInit, in § 3
- DOMRectList, in § 4
- DOMRectReadOnly, in § 3
- DOMRectReadOnly(), in § 3
- DOMRectReadOnly(x), in § 3
- DOMRectReadOnly(x, y), in § 3
- DOMRectReadOnly(x, y, width), in § 3
- DOMRectReadOnly(x, y, width, height), in § 3
- DOMRect(x), in § 3
- DOMRect(x, y), in § 3
- DOMRect(x, y, width), in § 3
- DOMRect(x, y, width, height), in § 3
-
e
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrix2DInit, in § 6
-
f
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrix2DInit, in § 6
- flipX(), in § 6.5
- flipY(), in § 6.5
-
fromFloat32Array(array32)
- method for DOMMatrix, in § 6.3
- method for DOMMatrixReadOnly, in § 6.3
-
fromFloat64Array(array64)
- method for DOMMatrix, in § 6.3
- method for DOMMatrixReadOnly, in § 6.3
-
fromMatrix()
- method for DOMMatrix, in § 6.3
- method for DOMMatrixReadOnly, in § 6.3
-
fromMatrix(other)
- method for DOMMatrix, in § 6.3
- method for DOMMatrixReadOnly, in § 6.3
-
fromPoint()
- method for DOMPoint, in § 2
- method for DOMPointReadOnly, in § 2
-
fromPoint(other)
- method for DOMPoint, in § 2
- method for DOMPointReadOnly, in § 2
- fromQuad(), in § 5
- fromQuad(other), in § 5
-
fromRect()
- method for DOMQuad, in § 5
- method for DOMRect, in § 3
- method for DOMRectReadOnly, in § 3
-
fromRect(other)
- method for DOMQuad, in § 5
- method for DOMRect, in § 3
- method for DOMRectReadOnly, in § 3
- getBounds(), in § 5
-
height
- attribute for DOMRect, in § 3
- attribute for DOMRectReadOnly, in § 3
- attribute for DOMRectReadOnly DOMRect, in § 3
- dict-member for DOMRectInit, in § 3
- height dimension, in § 3
- inverse(), in § 6.5
- invertSelf(), in § 6.6
- is 2D, in § 6.4
-
is2D
- attribute for DOMMatrixReadOnly, in § 6.4
- dict-member for DOMMatrixInit, in § 6
- isIdentity, in § 6.4
- item(index), in § 4
-
left
- attribute for DOMRectReadOnly, in § 3
- attribute for DOMRectReadOnly DOMRect, in § 3
- length, in § 4
-
m11
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrix2DInit, in § 6
- m11 element, in § 6
-
m12
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrix2DInit, in § 6
- m12 element, in § 6
-
m13
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrixInit, in § 6
- m13 element, in § 6
-
m14
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrixInit, in § 6
- m14 element, in § 6
-
m21
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrix2DInit, in § 6
- m21 element, in § 6
-
m22
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrix2DInit, in § 6
- m22 element, in § 6
-
m23
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrixInit, in § 6
- m23 element, in § 6
-
m24
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrixInit, in § 6
- m24 element, in § 6
-
m31
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrixInit, in § 6
- m31 element, in § 6
-
m32
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrixInit, in § 6
- m32 element, in § 6
-
m33
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrixInit, in § 6
- m33 element, in § 6
-
m34
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrixInit, in § 6
- m34 element, in § 6
-
m41
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrix2DInit, in § 6
- m41 element, in § 6
-
m42
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrix2DInit, in § 6
- m42 element, in § 6
-
m43
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrixInit, in § 6
- m43 element, in § 6
-
m44
- attribute for DOMMatrixReadOnly, DOMMatrix, in § 6.4
- dict-member for DOMMatrixInit, in § 6
- m44 element, in § 6
- matrix, in § 6
- matrixTransform(), in § 2
- matrixTransform(matrix), in § 2
- multiply, in § 6
- multiply(), in § 6.5
- multiply(other), in § 6.5
- multiplySelf(), in § 6.6
- multiplySelf(other), in § 6.6
- NaN-safe maximum, in § Unnumbered section
- NaN-safe minimum, in § Unnumbered section
- origin, in § 3
-
p1
- attribute for DOMQuad, in § 5
- dict-member for DOMQuadInit, in § 5
-
p2
- attribute for DOMQuad, in § 5
- dict-member for DOMQuadInit, in § 5
-
p3
- attribute for DOMQuad, in § 5
- dict-member for DOMQuadInit, in § 5
-
p4
- attribute for DOMQuad, in § 5
- dict-member for DOMQuadInit, in § 5
- parse a string into an abstract matrix, in § 6.2
- point, in § 2
- point 1, in § 5
- point 2, in § 5
- point 3, in § 5
- point 4, in § 5
- post-multiply, in § 6
- pre-multiply, in § 6
- preMultiplySelf(), in § 6.6
- preMultiplySelf(other), in § 6.6
- quadrilateral, in § 5
- rectangle, in § 3
-
right
- attribute for DOMRectReadOnly, in § 3
- attribute for DOMRectReadOnly DOMRect, in § 3
- rotate(), in § 6.5
- rotateAxisAngle(), in § 6.5
- rotateAxisAngleSelf(), in § 6.6
- rotateAxisAngleSelf(x), in § 6.6
- rotateAxisAngleSelf(x, y), in § 6.6
- rotateAxisAngleSelf(x, y, z), in § 6.6
- rotateAxisAngleSelf(x, y, z, angle), in § 6.6
- rotateAxisAngle(x), in § 6.5
- rotateAxisAngle(x, y), in § 6.5
- rotateAxisAngle(x, y, z), in § 6.5
- rotateAxisAngle(x, y, z, angle), in § 6.5
- rotateFromVector(), in § 6.5
- rotateFromVectorSelf(), in § 6.6
- rotateFromVectorSelf(x), in § 6.6
- rotateFromVectorSelf(x, y), in § 6.6
- rotateFromVector(x), in § 6.5
- rotateFromVector(x, y), in § 6.5
- rotate(rotX), in § 6.5
- rotate(rotX, rotY), in § 6.5
- rotate(rotX, rotY, rotZ), in § 6.5
- rotateSelf(), in § 6.6
- rotateSelf(rotX), in § 6.6
- rotateSelf(rotX, rotY), in § 6.6
- rotateSelf(rotX, rotY, rotZ), in § 6.6
- scale(), in § 6.5
- scale3d(), in § 6.5
- scale3d(scale), in § 6.5
- scale3d(scale, originX), in § 6.5
- scale3d(scale, originX, originY), in § 6.5
- scale3d(scale, originX, originY, originZ), in § 6.5
- scale3dSelf(), in § 6.6
- scale3dSelf(scale), in § 6.6
- scale3dSelf(scale, originX), in § 6.6
- scale3dSelf(scale, originX, originY), in § 6.6
- scale3dSelf(scale, originX, originY, originZ), in § 6.6
- scaleNonUniform(), in § 6.5
- scaleNonUniform(scaleX), in § 6.5
- scaleNonUniform(scaleX, scaleY), in § 6.5
- scale(scaleX), in § 6.5
- scale(scaleX, scaleY), in § 6.5
- scale(scaleX, scaleY, scaleZ), in § 6.5
- scale(scaleX, scaleY, scaleZ, originX), in § 6.5
- scale(scaleX, scaleY, scaleZ, originX, originY), in § 6.5
- scale(scaleX, scaleY, scaleZ, originX, originY, originZ), in § 6.5
- scaleSelf(), in § 6.6
- scaleSelf(scaleX), in § 6.6
- scaleSelf(scaleX, scaleY), in § 6.6
- scaleSelf(scaleX, scaleY, scaleZ), in § 6.6
- scaleSelf(scaleX, scaleY, scaleZ, originX), in § 6.6
- scaleSelf(scaleX, scaleY, scaleZ, originX, originY), in § 6.6
- scaleSelf(scaleX, scaleY, scaleZ, originX, originY, originZ), in § 6.6
- setMatrixValue(transformList), in § 6.6
- skewX(), in § 6.5
- skewXSelf(), in § 6.6
- skewXSelf(sx), in § 6.6
- skewX(sx), in § 6.5
- skewY(), in § 6.5
- skewYSelf(), in § 6.6
- skewYSelf(sy), in § 6.6
- skewY(sy), in § 6.5
- stringificationbehavior, in § 6.5
- SVGMatrix, in § 6
- SVGPoint, in § 2
- SVGRect, in § 3
- toFloat32Array(), in § 6.5
- toFloat64Array(), in § 6.5
-
toJSON()
- method for DOMMatrixReadOnly, in § 6
- method for DOMPointReadOnly, in § 2
- method for DOMQuad, in § 5
- method for DOMRectReadOnly, in § 3
-
top
- attribute for DOMRectReadOnly, in § 3
- attribute for DOMRectReadOnly DOMRect, in § 3
- transform a point with a matrix, in § 2.1
- transformPoint(), in § 6.5
- transformPoint(point), in § 6.5
- translate(), in § 6.5
- translateSelf(), in § 6.6
- translateSelf(tx), in § 6.6
- translateSelf(tx, ty), in § 6.6
- translateSelf(tx, ty, tz), in § 6.6
- translate(tx), in § 6.5
- translate(tx, ty), in § 6.5
- translate(tx, ty, tz), in § 6.5
- validate and fixup, in § 6.1
- validate and fixup (2D), in § 6.1
-
w
- attribute for DOMPointReadOnly, DOMPoint, in § 2
- dict-member for DOMPointInit, in § 2
- WebKitCSSMatrix, in § 6
-
width
- attribute for DOMRect, in § 3
- attribute for DOMRectReadOnly, in § 3
- attribute for DOMRectReadOnly DOMRect, in § 3
- dict-member for DOMRectInit, in § 3
- width dimension, in § 3
- w perspective, in § 2
-
x
- attribute for DOMPointReadOnly, DOMPoint, in § 2
- attribute for DOMRect, in § 3
- attribute for DOMRectReadOnly, in § 3
- attribute for DOMRectReadOnly DOMRect, in § 3
- dict-member for DOMPointInit, in § 2
- dict-member for DOMRectInit, in § 3
-
x coordinate
- dfn for point, in § 2
- dfn for rectangle, in § 3
-
y
- attribute for DOMPointReadOnly, DOMPoint, in § 2
- attribute for DOMRect, in § 3
- attribute for DOMRectReadOnly, in § 3
- attribute for DOMRectReadOnly DOMRect, in § 3
- dict-member for DOMPointInit, in § 2
- dict-member for DOMRectInit, in § 3
-
y coordinate
- dfn for point, in § 2
- dfn for rectangle, in § 3
-
z
- attribute for DOMPointReadOnly, DOMPoint, in § 2
- dict-member for DOMPointInit, in § 2
- z coordinate, in § 2
Terms defined by reference
-
[CSS-TRANSFORMS-2] defines the following terms:
- <transform-function>
- matrix3d()
-
[CSS-VALUES-4] defines the following terms:
- <length>
- absolute length
- infinity
- NaN
-
[CSS3-SYNTAX] defines the following terms:
- parse
-
[CSS3-TRANSFORMS] defines the following terms:
- <transform-list>
- matrix()
- transform
-
[CSSOM-VIEW] defines the following terms:
- getBoundingClientRect()
-
[ECMA-262] defines the following terms:
- !
- SameValueZero
- ToString
-
[HTML] defines the following terms:
- Serializable
- Window
- Worker
- current global object
- deserialization steps
- serializable object
- serialization steps
- sub-deserialization
- sub-serialization
-
[WEBIDL] defines the following terms:
- DOMException
- DOMString
- Default
- Exposed
- Float32Array
- Float64Array
- IndexSizeError
- InvalidStateError
- LegacyWindowAlias
- NewObject
- SameObject
- SyntaxError
- TypeError
- boolean
- object
- sequence
- unrestricted double
- unsigned long
References
Normative References
- [CSS-TRANSFORMS-2]
- Tab Atkins Jr.; et al. CSS Transforms Module Level 2. 9 November 2021. WD. URL: https://www.w3.org/TR/css-transforms-2/
- [CSS-VALUES-4]
- Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 12 March 2024. WD. URL: https://www.w3.org/TR/css-values-4/
- [CSS3-SYNTAX]
- Tab Atkins Jr.; Simon Sapin. CSS Syntax Module Level 3. 24 December 2021. CRD. URL: https://www.w3.org/TR/css-syntax-3/
- [CSS3-TRANSFORMS]
- Simon Fraser; et al. CSS Transforms Module Level 1. 14 February 2019. CR. URL: https://www.w3.org/TR/css-transforms-1/
- [ECMA-262]
- ECMAScript Language Specification. URL: https://tc39.es/ecma262/multipage/
- [HTML]
- Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
- [RFC2119]
- S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
- [WEBIDL]
- Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/
Informative References
- [CSSOM-VIEW]
- Simon Fraser; Emilio Cobos Álvarez. CSSOM View Module. 16 September 2025. WD. URL: https://www.w3.org/TR/cssom-view-1/
- [SVG11]
- Erik Dahlström; et al. Scalable Vector Graphics (SVG) 1.1 (Second Edition). 16 August 2011. REC. URL: https://www.w3.org/TR/SVG11/
IDL Index
[Exposed =(Window ,Worker ),Serializable ]interface {DOMPointReadOnly constructor (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,z optional unrestricted double = 1); [w NewObject ]static DOMPointReadOnly fromPoint (optional DOMPointInit = {});other readonly attribute unrestricted double x ;readonly attribute unrestricted double y ;readonly attribute unrestricted double z ;readonly attribute unrestricted double w ; [NewObject ]DOMPoint matrixTransform (optional DOMMatrixInit = {}); [matrix Default ]object (); }; [toJSON Exposed =(Window ,Worker ),Serializable ,LegacyWindowAlias =]SVGPoint interface :DOMPoint DOMPointReadOnly {constructor (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,z optional unrestricted double = 1); [w NewObject ]static DOMPoint fromPoint (optional DOMPointInit = {});other inherit attribute unrestricted double x ;inherit attribute unrestricted double y ;inherit attribute unrestricted double z ;inherit attribute unrestricted double w ; };dictionary {DOMPointInit unrestricted double = 0;x unrestricted double = 0;y unrestricted double = 0;z unrestricted double = 1; }; [w Exposed =(Window ,Worker ),Serializable ]interface {DOMRectReadOnly constructor (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,width optional unrestricted double = 0); [height NewObject ]static DOMRectReadOnly fromRect (optional DOMRectInit = {});other readonly attribute unrestricted double ;x readonly attribute unrestricted double ;y readonly attribute unrestricted double ;width readonly attribute unrestricted double ;height readonly attribute unrestricted double ;top readonly attribute unrestricted double ;right readonly attribute unrestricted double ;bottom readonly attribute unrestricted double ; [left Default ]object (); }; [toJSON Exposed =(Window ,Worker ),Serializable ,LegacyWindowAlias =]SVGRect interface :DOMRect DOMRectReadOnly {constructor (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,width optional unrestricted double = 0); [height NewObject ]static DOMRect fromRect (optional DOMRectInit = {});other inherit attribute unrestricted double ;x inherit attribute unrestricted double ;y inherit attribute unrestricted double ;width inherit attribute unrestricted double ; };height dictionary {DOMRectInit unrestricted double = 0;x unrestricted double = 0;y unrestricted double = 0;width unrestricted double = 0; }; [height Exposed =Window ]interface {DOMRectList readonly attribute unsigned long length ;getter DOMRect ?item (unsigned long ); }; [index Exposed =(Window ,Worker ),Serializable ]interface {DOMQuad constructor (optional DOMPointInit = {},p1 optional DOMPointInit = {},p2 optional DOMPointInit = {},p3 optional DOMPointInit = {}); [p4 NewObject ]static DOMQuad fromRect (optional DOMRectInit = {}); [other NewObject ]static DOMQuad fromQuad (optional DOMQuadInit = {}); [other SameObject ]readonly attribute DOMPoint p1 ; [SameObject ]readonly attribute DOMPoint p2 ; [SameObject ]readonly attribute DOMPoint p3 ; [SameObject ]readonly attribute DOMPoint p4 ; [NewObject ]DOMRect getBounds (); [Default ]object (); };toJSON dictionary {DOMQuadInit DOMPointInit ;p1 DOMPointInit ;p2 DOMPointInit ;p3 DOMPointInit ; }; [p4 Exposed =(Window ,Worker ),Serializable ]interface {DOMMatrixReadOnly constructor (optional (DOMString or sequence <unrestricted double >)); [init NewObject ]static DOMMatrixReadOnly fromMatrix (optional DOMMatrixInit = {}); [other NewObject ]static DOMMatrixReadOnly fromFloat32Array (Float32Array ); [array32 NewObject ]static DOMMatrixReadOnly fromFloat64Array (Float64Array ); // These attributes are simple aliases for certain elements of the 4x4 matrixarray64 readonly attribute unrestricted double a ;readonly attribute unrestricted double b ;readonly attribute unrestricted double c ;readonly attribute unrestricted double d ;readonly attribute unrestricted double e ;readonly attribute unrestricted double f ;readonly attribute unrestricted double m11 ;readonly attribute unrestricted double m12 ;readonly attribute unrestricted double m13 ;readonly attribute unrestricted double m14 ;readonly attribute unrestricted double m21 ;readonly attribute unrestricted double m22 ;readonly attribute unrestricted double m23 ;readonly attribute unrestricted double m24 ;readonly attribute unrestricted double m31 ;readonly attribute unrestricted double m32 ;readonly attribute unrestricted double m33 ;readonly attribute unrestricted double m34 ;readonly attribute unrestricted double m41 ;readonly attribute unrestricted double m42 ;readonly attribute unrestricted double m43 ;readonly attribute unrestricted double m44 ;readonly attribute boolean is2D ;readonly attribute boolean isIdentity ; // Immutable transform methods [NewObject ]DOMMatrix translate (optional unrestricted double = 0,tx optional unrestricted double = 0,ty optional unrestricted double = 0); [tz NewObject ]DOMMatrix scale (optional unrestricted double = 1,scaleX optional unrestricted double ,scaleY optional unrestricted double = 1,scaleZ optional unrestricted double = 0,originX optional unrestricted double = 0,originY optional unrestricted double = 0); [originZ NewObject ]DOMMatrix scaleNonUniform (optional unrestricted double = 1,scaleX optional unrestricted double = 1); [scaleY NewObject ]DOMMatrix scale3d (optional unrestricted double = 1,scale optional unrestricted double = 0,originX optional unrestricted double = 0,originY optional unrestricted double = 0); [originZ NewObject ]DOMMatrix rotate (optional unrestricted double = 0,rotX optional unrestricted double ,rotY optional unrestricted double ); [rotZ NewObject ]DOMMatrix rotateFromVector (optional unrestricted double = 0,x optional unrestricted double = 0); [y NewObject ]DOMMatrix rotateAxisAngle (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,z optional unrestricted double = 0); [angle NewObject ]DOMMatrix skewX (optional unrestricted double = 0); [sx NewObject ]DOMMatrix skewY (optional unrestricted double = 0); [sy NewObject ]DOMMatrix multiply (optional DOMMatrixInit = {}); [other NewObject ]DOMMatrix flipX (); [NewObject ]DOMMatrix flipY (); [NewObject ]DOMMatrix inverse (); [NewObject ]DOMPoint transformPoint (optional DOMPointInit = {}); [point NewObject ]Float32Array toFloat32Array (); [NewObject ]Float64Array toFloat64Array (); [Exposed =Window ]stringifier ; [Default ]object (); }; [toJSON Exposed =(Window ,Worker ),Serializable ,LegacyWindowAlias =(,SVGMatrix )]WebKitCSSMatrix interface :DOMMatrix DOMMatrixReadOnly {constructor (optional (DOMString or sequence <unrestricted double >)); [init NewObject ]static DOMMatrix fromMatrix (optional DOMMatrixInit = {}); [other NewObject ]static DOMMatrix fromFloat32Array (Float32Array ); [array32 NewObject ]static DOMMatrix fromFloat64Array (Float64Array ); // These attributes are simple aliases for certain elements of the 4x4 matrixarray64 inherit attribute unrestricted double a ;inherit attribute unrestricted double b ;inherit attribute unrestricted double c ;inherit attribute unrestricted double d ;inherit attribute unrestricted double e ;inherit attribute unrestricted double f ;inherit attribute unrestricted double m11 ;inherit attribute unrestricted double m12 ;inherit attribute unrestricted double m13 ;inherit attribute unrestricted double m14 ;inherit attribute unrestricted double m21 ;inherit attribute unrestricted double m22 ;inherit attribute unrestricted double m23 ;inherit attribute unrestricted double m24 ;inherit attribute unrestricted double m31 ;inherit attribute unrestricted double m32 ;inherit attribute unrestricted double m33 ;inherit attribute unrestricted double m34 ;inherit attribute unrestricted double m41 ;inherit attribute unrestricted double m42 ;inherit attribute unrestricted double m43 ;inherit attribute unrestricted double m44 ; // Mutable transform methodsDOMMatrix multiplySelf (optional DOMMatrixInit = {});other DOMMatrix preMultiplySelf (optional DOMMatrixInit = {});other DOMMatrix translateSelf (optional unrestricted double = 0,tx optional unrestricted double = 0,ty optional unrestricted double = 0);tz DOMMatrix scaleSelf (optional unrestricted double = 1,scaleX optional unrestricted double ,scaleY optional unrestricted double = 1,scaleZ optional unrestricted double = 0,originX optional unrestricted double = 0,originY optional unrestricted double = 0);originZ DOMMatrix scale3dSelf (optional unrestricted double = 1,scale optional unrestricted double = 0,originX optional unrestricted double = 0,originY optional unrestricted double = 0);originZ DOMMatrix rotateSelf (optional unrestricted double = 0,rotX optional unrestricted double ,rotY optional unrestricted double );rotZ DOMMatrix rotateFromVectorSelf (optional unrestricted double = 0,x optional unrestricted double = 0);y DOMMatrix rotateAxisAngleSelf (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,z optional unrestricted double = 0);angle DOMMatrix skewXSelf (optional unrestricted double = 0);sx DOMMatrix skewYSelf (optional unrestricted double = 0);sy DOMMatrix invertSelf (); [Exposed =Window ]DOMMatrix setMatrixValue (DOMString ); };transformList dictionary {DOMMatrix2DInit unrestricted double ;a unrestricted double ;b unrestricted double ;c unrestricted double ;d unrestricted double ;e unrestricted double ;f unrestricted double ;m11 unrestricted double ;m12 unrestricted double ;m21 unrestricted double ;m22 unrestricted double ;m41 unrestricted double ; };m42 dictionary :DOMMatrixInit DOMMatrix2DInit {unrestricted double = 0;m13 unrestricted double = 0;m14 unrestricted double = 0;m23 unrestricted double = 0;m24 unrestricted double = 0;m31 unrestricted double = 0;m32 unrestricted double = 1;m33 unrestricted double = 0;m34 unrestricted double = 0;m43 unrestricted double = 1;m44 boolean ; };is2D
CanIUse
Support:Android Browser (limited)4+Baidu Browser (limited)13.52+Blackberry Browser (limited)10+Chrome (limited)8+Chrome for Android (limited)143+Edge (limited)12+Firefox (limited)33+Firefox for Android (limited)146+IE (limited)10+IE Mobile (limited)10+KaiOS Browser (limited)2.5+Opera (limited)15+Opera MiniNoneOpera Mobile (limited)80+QQ Browser (limited)14.9+Safari (limited)5+Safari on iOS (limited)5.0+Samsung Internet (limited)4+UC Browser for Android (limited)15.5+
Source: caniuse.com as of 2025-12-19