Units
Style values that carry a unit accept either a bare number, read in the property's default unit, or a string with an explicit unit. Lengths default to logical pixels, angles to degrees and durations to milliseconds. Values are parsed once, when the style crosses to Bevy.
Usage
<node
style={{
width: 240, // logical px
height: "50vh", // half the window's height
padding: "8px 16px", // vertical, horizontal
transform: { rotate: "0.25turn" },
transition: { transform: { duration: "0.3s" } },
}}
/>Lengths
Layout sizes, insets, margins, padding, gaps, transform translation and shadow offsets are lengths:
| Value | Meaning |
|---|---|
16 or "16px" |
Logical pixels |
"50%" |
A percentage of a reference size (see below) |
"10vw", "10vh" |
10% of the viewport's width or height |
"10vmin", "10vmax" |
10% of the viewport's smaller or larger side |
"auto" |
Left to layout, where the property supports it |
- A logical pixel is multiplied by the window's scale factor and Bevy's
UiScaleresource, so the same value looks the same size on every display. - The viewport is the target the UI draws into: the window for your app's
UI, the texture for UI inside a
<surface>. Viewport units follow it when it resizes and ignoreUiScale. "auto"sizes from content onwidth,height, the min and max sizes andflexBasis; means "not set" on the insets; absorbs free space onmargin; and is0onpadding,borderand the gaps.- A numeric string without a unit (
"16") is pixels. Units are lowercase, except that"auto"matches in any case. - Anything else (
"1em","2rem","calc(…)","16pt") becomes0and reports alengthdevtools warning. The rest of the style still applies.
An { animated } binding on a length property is driven in logical pixels,
whatever unit the static value used. See
Animated values.
What percentages are of
| Property | Percentage of |
|---|---|
width, minWidth, maxWidth, left, right |
The parent's width |
height, minHeight, maxHeight, top, bottom |
The parent's height |
margin, padding, border (all four sides) |
The parent's width |
flexBasis |
The parent's size on the flex main axis |
gap, rowGap, columnGap |
The node's own size on that axis |
grid tracks ("25%") |
The grid container's size |
The parent's size here is its content box (for an absolute node, its
padding box, see Positioning). A percentage of a
size that layout hasn't fixed yet, such as the height of an auto-height
parent, behaves as "auto". Other properties, such as transform and
borderRadius, give their own basis on their pages.
Four-sided values
margin, padding, border and borderRadius take a Rect, one length
per side in any of these forms:
| Value | Sides |
|---|---|
8 |
All four |
"8px", "8px 16px", … |
CSS shorthand: 1 to 4 lengths |
{ top: 8, left: "auto" } |
Per side; omitted sides are 0 |
{ horizontal: 16, vertical: 8 } |
left + right, top + bottom |
- The shorthand follows CSS order: one value for all sides, two for vertical and horizontal, three for top, horizontal and bottom, four for top, right, bottom and left.
- If an object mixes the two forms, an explicit side wins over its axis.
- On
borderRadiusthe four slots are the corners, starting top-left and going clockwise (see Borders). - A value always replaces the whole rect.
hoverStyle={{ padding: { left: 20 } }}sets the other three sides to0while hovered, not to the base style's values. - A shorthand token that doesn't parse becomes
0for its sides, more than four values make the whole rect0, and an unknown object key is ignored. Each reports arectdevtools warning.
Angles
Rotations (transform, transform3d) and gradient angles are angles:
| Value | Meaning |
|---|---|
45 |
Degrees |
"45deg" |
Degrees |
"0.785rad" |
Radians |
"0.125turn" |
Turns (1turn = 360°) |
"50grad" |
Gradians (400grad = 360°) |
An invalid angle becomes 0 and reports an angle devtools warning. An
{ animated } binding on an angle is driven in degrees.
Durations
A transition's duration and delay are durations: a bare number is
milliseconds, "300ms" is milliseconds and "0.3s" is seconds. An invalid
duration becomes 0 and reports a time devtools warning. See
Style transitions.
Font sizes
fontSize takes a number (logical pixels), "px", the viewport units, or
"rem": a multiple of Bevy's RemSize resource, 20px by default, which
makes it the knob for scaling all rem text at once. It does not accept
percentages or em. An invalid value becomes 0 and reports a fontSize
devtools warning. See <text>.
Limits
- No
calc(),em, or unit arithmetic. Compute mixed values in JavaScript, for example from the window size (see Window). - Colors are strings of their own; see Colors.
Every style property's accepted type is listed in the style reference.
bevy-react