Logical Properties and Values specification
contains logical mappings for the physical values of
float
and
clear
, and also for the positioning properties used with
positioned layout
. This guide takes a look at how to use these.
The table below details the properties and values discussed in this guide along with their physical mappings. They assume a horizontal
writing-mode
, with a left-to-right direction.
| Logical property or value | Physical property or value |
|---|---|
float
: inline-start
|
float
: left
|
float
: inline-end
|
float
: right
|
clear
: inline-start
|
clear
: left
|
clear
: inline-end
|
clear
: right
|
inset-inline-start
|
left
|
inset-inline-end
|
right
|
inset-block-start
|
top
|
inset-block-end
|
bottom
|
text-align
: start
|
text-align
: left
|
text-align
: end
|
text-align
: right
|
In addition to these mapped properties there are some additional shorthand properties made possible by being able to address block and inline dimensions. These have no mapping to physical properties, aside from the
inset
特性。
| Logical property | 目的 |
|---|---|
inset-inline
|
Sets both of the above inset values for the inline dimension simultaneously. |
inset-block
|
Sets both of the above inset values for the block dimension simultaneously. |
inset
|
Sets all four inset values simultaneously with physical mapping of multi-value. |
The physical values used with the
float
and
clear
properties are
left
,
right
and
both
. The Logical Properties specification defines the values
inline-start
and
inline-end
as mappings for
left
and
right
.
In the example below I have two boxes — the first has the box floated with
float: left
, the second with
float: inline-start
. If you change the
writing-mode
to
vertical-rl
或
direction
to
rtl
you will see that the left-floated box always sticks to the left, whereas the
inline-start
-floated item follows the
direction
and
writing-mode
.
Positioning generally allows us to position an element in a manner relative to its containing block — we essentially inset the item relative to where it would fall based on normal flow. To do this we have historically used the physical properties
top
,
right
,
bottom
and
left
.
These properties take a length or a percentage as a value, and relate to the user's screen dimensions.
New properties have been created in the Logical Properties specification for when you want the positioning to relate to the flow of text in your writing mode. These are as follows:
inset-block-start
,
inset-block-end
,
inset-inline-start
and
inset-inline-end
.
In the below example I have used the
inset-block-start
and
inset-inline-end
properties to position the blue box using absolute positioning inside the area with the grey dotted border, which has
position: relative
. Change the
writing-mode
property to
vertical-rl
, or add
direction: rtl
, and see how the flow relative box stays with the text direction.
As with other properties in the specification we have some new shorthand properties, which give the ability to set two or four values at once.
inset
— sets all four sides together with physical mapping.
inset-inline
— sets both logical inline insets.
inset-block
— sets both logical block insets.
注意 : The browsers that have implemented the Logical Properties specification have so far implemented the direct mappings and not the new shorthands. Look to the browser compatibility data section on each property page reference for more details.
text-align
property has logical values that relate to text direction — rather than using
left
and
right
we can use
start
and
end
. In the below example I have set
text-align: right
in the first block and
text-align: end
in the second.
If you change the value of
direction
to
rtl
you will see that the alignment stays to the right for the first block, but goes to the logical end on the left in the second.
This works in a more consistent way when using box alignment that uses start and end rather than physical directions for alignment.
block-size
border-block
border-block-color
border-block-end
border-block-end-color
border-block-end-style
border-block-end-width
border-block-start
border-block-start-color
border-block-start-style
border-block-start-width
border-block-style
border-block-width
border-end-end-radius
border-end-start-radius
border-inline
border-inline-color
border-inline-end
border-inline-end-color
border-inline-end-style
border-inline-end-width
border-inline-start
border-inline-start-color
border-inline-start-style
border-inline-start-width
border-inline-style
border-inline-width
border-start-end-radius
border-start-start-radius
inline-size
inset
inset-block
inset-block-end
inset-block-start
inset-inline
inset-inline-end
inset-inline-start
margin-block
margin-block-end
margin-block-start
margin-inline
margin-inline-end
margin-inline-start
max-block-size
max-inline-size
min-block-size
min-inline-size
padding-block
padding-block-end
padding-block-start
padding-inline
padding-inline-end
padding-inline-start