This module introduces logical properties and values that provide the author with the ability to control layout through logical, rather than physical, direction and dimension mappings. The module defines logical properties and values for the features defined in [CSS2]. These properties are writing-mode relative equivalents of their corresponding physical properties.
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 is a public copy of the editors’ draft.
It is provided for discussion only and may change at any moment.
Its publication here does not imply endorsement of its contents by W3C.
Don’t cite this document other than as work in progress.
Please send feedback
by filing issues in GitHub (preferred),
including the spec code “css-logical” in the title, like this:
“[css-logical] …summary of comment…”.
All issues and comments are archived.
Alternately, feedback can be sent to the (archived) public mailing list
www-style@w3.org.
Note: See [css-writing-modes-4] for a proper introduction to writing modes;
this module assumes familiarity with its terminology.
Because different writing systems are written in different directions,
a variety of writing modes exist:
left to right, top to bottom;
right to left, top to bottom;
bottom to top, right to left;
etc.
logical concepts like the “start” of a page or line
map differently to physical concepts like the “top” of a line or “left edge” of a paragraph.
Some aspects of a layout are actually relative to the writing directions,
and thus will vary when the page is translated to a different system;
others are inherently relative to the page’s physical orientation.
For example,
lists, headings, and paragraphs are typically left-aligned in English;
but actually they are start-aligned, because in Arabic the same constructs are right-aligned,
and a multilingual document will need to accommodate both writing systems accordingly.
The following code exemplifies how using logical syntax can help you write code
that works across different writing systems:
Rendering of the below code in a compatible browser
<blockquotedir="auto">Quotation in English</blockquote><blockquotedir="auto">اقتباس في العربية</blockquote>
blockquote {text-align: start;/* left in latin, right in arabic */
margin-inline-start: 0px;/* margin-left in latin, margin-right in arabic */
border-inline-start: 5px solid gray;/* border-left in latin, border-right in arabic */
padding-inline-start: 5px;/* padding-left in latin, padding-right in arabic */}
Documents might need both logical and physical properties. For instance
the drop shadows on buttons on a page must remain consistent throughout,
so their offset will be chosen based on visual considerations and physical directions,
and not vary by writing system.
Since CSS was originally designed with only physical coordinates in its controls,
this module introduces text-flow–relative equivalents
so that declarations in a CSS style sheet can be expressed
in flow-relative terms.
It defines the mapping and cascading of equivalent properties,
some new properties and values equivalent to those in CSS2.1,
and the principles used to derive their syntaxes.
Future CSS specifications are expected to incorporate both sets of coordinates
in their property and value definitions,
so this module will not track the introduction of flow-relative variants
of newer CSS features.
Correspondence of physical and flow-relative terms in typical English text layout
Correspondence of physical and flow-relative terms in vertical Chinese text layout
The logical keyword on shorthands,
because the name of the keyword may change or it may be replaced by some other syntactic marker.
(This feature will be deferred from this level for further development
if there is no clearly satisfactory mechanism proposed,
see Issue 1282.)
Whether flow-relative longhands inherit from their namesake on the parent,
or are mapped to a physical property and inherit from that property.
(See Issue 3029.)
Whether shorthands like margin expand to both sets of longhands,
or only the ones that were set.
(See Issue 3030.)
Comments, suggestions, and use cases are welcome on these issues.
Please file them in GitHub, tweet them to @csswg, or send them to www-style@w3.org.
In addition to the property-specific values listed in their definitions,
all properties defined in this specification
also accept the CSS-wide keywords as their property value.
For readability they have not been repeated explicitly.
Many CSS properties have historically accepted directional keyword values
that are physical
(top, bottom, left, right).
This specification introduces directional keyword values that are flow-relative:
block-start, block-end, inline-start, inline-end.
A property’s effect can be either 1-dimensional or 2-dimensional.
When contextually constrained to one dimension,
the flow-relative keywords are abbreviated
(to start and end).
CSS Level 2 properties are here redefined to also accept
flow-relative directional keywords.
Such values can be used in place of the corresponding physical values.
For properties that take multiple keywords,
combinations of flow-relative and physical values are not allowed
(unless otherwise specified in a future specification).
Note: Newer CSS specifications are expected in most cases to define
flow-relative or line-relative values
instead of or in addition to any physical ones.
In general, the mapping of such relative values are expected to use
the writing mode of the containing block when affecting the box itself,
and that of the box itself when affecting its contents.
Regardless, which writing modes is used for the mapping
needs to be explicitly defined.
These two values are added only for implementations that support
left and right values for caption-side.
The left and right values themselves
are defined to be line-relative.
The existing top and bottom values are idiosyncratically redefined
as assigning to the block-start and block-end sides of the table, respectively.
Note: These properties are 1-dimensional in CSS2,
but are planned to be expanded to two dimensions,
and therefore are given unabbreviated flow-relative keywords.
2.3.
Flow-Relative Values for the text-align Property
These values are normatively defined in [css-text-3].
3.
Flow-Relative Page Classifications
In CSS, all pages are classified by user agents as either left pages or right pages. [CSS2]
Which page is first in a spread, however,
depends on whether the page progression is left-to-right or right-to-left.
To allow control of page breaking to the page
that is on the earlier or later side of a spread,
rather than to the left or right side of a spread,
this module introduces the following additional keywords
for the page-break-after and page-break-before properties [CSS2]:
recto
Equivalent to right in left-to-right page progressions
and left in right-to-left page progressions.
verso
Equivalent to left in left-to-right page progressions
and right in right-to-left page progressions.
These values are computed as specified
and are further defined in [css-break-3].
Although authors typically place page numbers using physical placements,
the contents of headers often follows conventions depending
on which page in the spread is earlier.
Therefore the following flow-relative page selectors
are also added to support flow-relative page selection:
:recto
Equivalent to ':right' in left-to-right page progressions
and ':left' in right-to-left page progressions.
:verso
Equivalent to ':left' in left-to-right page progressions
and ':right' in right-to-left page progressions.
The flow-relative page selectors have specificity equal to
the ':left' and ':right' page selectors.
4.
Flow-Relative Box Model Properties
For many formatting effects,
the axis or direction affected is encoded in the property name
rather than in its value.
The type of directional or axis mapping
(flow-relative or physical)
of each such property
is called its mapping logic.
Historically, all properties have been encoded in physical terms;
this specification introduces new CSS properties
that are flow-relative equivalents
of CSS2’s physical box model properties.
Note: Newer CSS specifications are expected in most cases to define
flow-relative or line-relative properties
instead of or in addition to any physical ones.
Each set of parallel
flow-relative properties and physical properties
(ignoring shorthand properties)
related by setting equivalent styles on the various sides or dimensions of a box,
forms a logical property group.
For example, the padding-* properties
form a single logical property group,
the margin-* properties
form a separate logical property group,
the border-*-style properties
form another logical property group,
etc.
(Each longhand property can belong to at most one logical property group.)
Within each logical property group,
corresponding flow-relative and physical properties
are paired using the element’s own
computedwriting mode.
Although the specified value of each property remains distinct,
paired properties share a computed value.
This shared value is determined by cascading
the declarations of both properties together as one;
in other words, the computed value of both properties in the pair
is derived from the specified value of the property declared with
higher priority in the CSS cascade. [CSS-CASCADE-3]
Note that this requires implementations to maintain
relative order of declarations within a CSS declaration block,
which was not previously required for CSS cascading.
It also requires that writing-mode, direction, and text-orientation
be computed as a prerequisite for cascading together
the flow-relative and physical declarations
of a logical property group
to find their computed values.
For example, given the following rule:
p {margin-inline-start:1px;margin-left:2px;margin-inline-end:3px;}
In a paragraph with computed writing-mode being horizontal-tb
and computed direction being ltr,
the computed value of margin-left is 2px,
since for that writing-mode and direction,
margin-inline-start and margin-left share a computed value,
and the declaration of margin-left
is after the declaration of margin-inline-start.
However, if the computed direction were instead rtl,
the computed value of margin-left is 3px,
since margin-inline-end and margin-left share a computed value,
and the declaration of margin-inline-end
is after the declaration of margin-left.
[CSSOM] APIs that return computed values
(such as getComputedStyle())
must return the same value for each individual property
in such a pair.
Note: Depending on the element’s own writing mode
for mapping every flow-relative property
to its physical equivalent
simplifies the cascading calculations
and gives a straightforward model for authors to reason about.
However, it is problematic in many cases,
see for example this discussion.
Authors may need to use nested elements
to get the correct mapping behavior
when changing an element’s writing mode from its parent.
Inheritance of each property is from its corresponding property on the parent.
For example, although the inline-start margin of anrtl box is its right margin,
margin-inline-start on this box will inherit
the margin-inline-start of an ltr parent
even though that happens to be the parent’s left margin.
Unless otherwise specified,
shorthand properties that encompass both logical and physical longhands
(such as the all shorthand)
set their physical longhands last.
For example, all: inherit will set all of the margin properties to inherit,
but since the physical longhands are set last,
the child’s margins will inherit from their physical counterparts in the parent.
The shorthand properties for margin, padding, and border
set values for physical properties by default.
But authors can specify
the logical keyword
at the beginning of the property value
to indicate that the values map to the flow-relative properties instead of the physical ones.
The proposed syntax for this feature is under discussion
and is almost guaranteed to change from what is described here.
This section remains in the draft to promote discussion of alternatives,
to document the affected properties,
and to specify the expected impact on the interpretation
of whatever syntactic switch is ultimately chosen.
The following [CSS2] shorthand properties
accept the logical keyword:
Referred to physical margin, border, and padding properties in the elements they apply to, so ruby base containers and ruby annotation containers are excluded.
Made margin and padding properties refer to *-top properties for consistency.
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:
This is an example of an informative example.
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
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.
The logical keyword on shorthands,
because the name of the keyword may change or it may be replaced by some other syntactic marker.
(This feature will be deferred from this level for further development
if there is no clearly satisfactory mechanism proposed,
see Issue 1282.)
Whether flow-relative longhands inherit from their namesake on the parent,
or are mapped to a physical property and inherit from that property.
(See Issue 3029.)
Whether shorthands like margin expand to both sets of longhands,
or only the ones that were set.
(See Issue 3030.)
Comments, suggestions, and use cases are welcome on these issues.
Please file them in GitHub, tweet them to @csswg, or send them to www-style@w3.org.
↵
The proposed syntax for this feature is under discussion
and is almost guaranteed to change from what is described here.
This section remains in the draft to promote discussion of alternatives,
to document the affected properties,
and to specify the expected impact on the interpretation
of whatever syntactic switch is ultimately chosen.
↵
Firefox19+Safari13.1+Chrome2+Opera6+Edge79+Edge (Legacy)12+IE8+Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile?
Firefox1+Safari1.2+Chrome1+Opera7+Edge79+Edge (Legacy)12+IE4+Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile?
Firefox1+Safari1.2+Chrome1+Opera7+Edge79+Edge (Legacy)12+IE4+Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome57+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet5.0+Opera Mobile?
Firefox41+Safari12.1+Chrome57+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet5.0+Opera Mobile?
Firefox66+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox66+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox66+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox66+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox1+Safari1+Chrome1+Opera3.5+Edge79+Edge (Legacy)12+IE4+Firefox for Android?iOS Safari?Chrome for Android?Android WebView4+Samsung Internet?Opera Mobile10.1+
Firefox66+Safari15+Chrome89+Opera?Edge89+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox66+Safari15+Chrome89+Opera?Edge89+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox66+Safari15+Chrome89+Opera?Edge89+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox66+Safari15+Chrome89+Opera?Edge89+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox66+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox66+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox66+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox66+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox1+Safari1+Chrome1+Opera4+Edge79+Edge (Legacy)12+IE8+Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile?
Firefox1+Safari1+Chrome1+Opera3.5+Edge79+Edge (Legacy)12+IE4+Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
Firefox1+Safari1+Chrome1+Opera7+Edge79+Edge (Legacy)12+IE4+Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
Firefox63+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox63+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox63+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox63+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox63+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox63+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox66+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari12.2+Chrome for Android?Android WebView87+Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari12.2+Chrome for Android?Android WebView87+Samsung Internet?Opera Mobile?
Firefox66+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox66+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome57+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet5.0+Opera Mobile?
Firefox41+Safari12.1+Chrome57+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome57+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome57+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari12.2+Chrome for Android?Android WebView87+Samsung Internet?Opera Mobile?
Firefox41+Safari12.1+Chrome69+Opera?Edge79+Edge (Legacy)?IENoneFirefox for Android?iOS Safari12.2+Chrome for Android?Android WebView87+Samsung Internet?Opera Mobile?
Firefox66+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox66+Safari14.1+Chrome87+Opera?Edge87+Edge (Legacy)?IENoneFirefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Firefox1+Safari1+Chrome1+Opera3.5+Edge79+Edge (Legacy)12+IE3+Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+