CSS Box Sizing Module Level 3
CSS Box Sizing Module Level 3
Editor’s Draft
15 February 2026
More details about this document
This version:
Latest published version:
Previous Versions:
Feedback:
CSSWG Issues Repository
CSSWG GitHub
Inline In Spec
Editors:
Tab Atkins
Google
Elika J. Etemad / fantasai
Apple
Suggest an Edit for this Spec:
GitHub Editor
Test Suite:
World Wide Web Consortium
W3C
liability
trademark
and
permissive document license
rules apply.
Abstract
This module extends the CSS sizing properties with keywords that represent content-based "intrinsic" sizes and context-based "extrinsic" sizes, allowing CSS to more easily describe boxes that fit their content or fit into a particular layout context.
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-sizing” in the title, like this:
“[css-sizing]
…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
The following features are at-risk, and may be dropped during the CR period:
Additions to
column-width
“At-risk” is a W3C Process term-of-art, and does not necessarily imply that the feature is in danger of being dropped or delayed. It means that the WG believes the feature may have difficulty being interoperably implemented in a timely manner, and marking it as such allows the WG to drop the feature if necessary when transitioning to the Proposed Rec stage, without having to publish a new Candidate Rec without the feature first.
1.
Introduction
This section is not normative.
CSS layout has several different concepts of automatic sizing that are used in various layout calculations.
This section defines some more precise terminology
to help connect the layout behaviors of this spec to the calculations used in other modules,
and some new keywords for the
width
and
height
properties
to allow authors to assign elements the dimensions resulting from these size calculations.
Tests
General sizing tests
dynamic-available-size-iframe.html
(live test)
(source)
dynamic-change-inline-size-001.html
(live test)
(source)
dynamic-change-inline-size-002.html
(live test)
(source)
dynamic-change-inline-size-003.html
(live test)
(source)
dynamic-change-inline-size-004.html
(live test)
(source)
frameset-intrinsic-crash.html
(live test)
(source)
inheritance-001.html
(live test)
(source)
inheritance-002.html
(live test)
(source)
min-width-max-width-precedence.html
(live test)
(source)
min-width-max-width-precedence.html
(live test)
(source)
replaced-max-size-saturation.html
(live test)
(source)
responsive-iframe-no-match-element.html
(live test)
(source)
textarea-large-padding-crash.html
(live test)
(source)
This spec needs illustrations! See
issue
1.1.
Module interactions
This module extends the
width
height
min-width
min-height
max-width
max-height
, and
column-width
features defined in
[CSS2]
chapter 10 and in
[CSS3COL]
The definition of the
box-sizing
property in this module supersedes the one in
[CSS-UI-3]
1.2.
Value Definitions
This specification follows the
CSS property definition conventions
from
[CSS2]
using the
value definition syntax
from
[CSS-VALUES-3]
Value types not defined in this specification are defined in CSS Values & Units
[CSS-VALUES-3]
Combination with other CSS modules may expand the definitions of these value types.
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.
2.
Terminology
Some key terminology related to coordinate axises and dimensions
is defined in
CSS Writing Modes 3
§ 6 Abstract Box Terminology
size
A one- or two-dimensional measurement:
block size
and/or
inline size
alternatively a
width
and/or
height
Whether the
width
or
height
corresponds
to an
inline size
or
block size
depends on the
writing mode
inner size
The
content-box
size
of a
box
Inner size
outer size
The
margin-box
size
of a
box
Outer size
definite size
A size that can be determined without performing layout;
that is, a
a measure of text (without consideration of line-wrapping),
a size of the
initial containing block
or a
or other formula
(such the
“stretch-fit” sizing of non-replaced blocks
[CSS2]
that is resolved solely against
definite
sizes.
Additionally, the size of the
containing block
of an absolutely positioned element is always
definite
with respect to that element.
indefinite size
A size that is not
definite
Indefinite
available space
is essentially infinite.
Note:
intrinsic sizing
keywords such as
max-content
are indefinite,
even if they can be determined without laying out the children
e.g. due to
size containment
or lack of children.
available space
A size representing the space into which a box is laid out,
as determined by
the rules of the formatting context in which it participates.
The space available to a box is usually
either a measurement of its
containing block
(if that is
definite
or an infinite size (when it is
indefinite
).
Available space
can alternatively be either a
min-content constraint
or
max-content constraint
which forces boxes laid into it to be laid out under that constraint.
Tests
available-height-for-replaced-content-001.html
(live test)
(source)
table-percentage-max-width-beside-float.html
(live test)
(source)
table-percentage-min-width-below-float.html
(live test)
(source)
table-percentage-min-width-beside-float.html
(live test)
(source)
stretch fit
The
stretch fit
into a given size
is that size,
minus the box’s computed margins (not collapsed, treating
auto
as zero),
border, and padding in the given dimension
(such that the outer size is a perfect fit),
and flooring at zero
(so that the inner size is not negative).
Note: This is the formula used to calculate the
auto
widths
of non-replaced blocks in normal flow in
CSS2.1§10.3.3
fallback size
Some sizing algorithms do not work well with an infinite size.
In these cases, the
fallback size
is used instead.
Unless otherwise specified,
this is the size of the
initial containing block
2.1.
Auto Box Sizes
There are four types of automatically-determined sizes in CSS
(sizes resulting from
auto
sizing rules, depending on context):
stretch-fit size
stretch-fit inline size
stretch-fit block size
The
size
a box would take
if its
outer size
filled the
available space
in the given axis;
in other words, the
stretch fit
into the
available space
if that is
definite
Undefined if the
available space
is
indefinite
Note:
For the
inline axis
, this is called the “available width” in
CSS2.1§10.3.5
and computed by the rules in
CSS2.1§10.3.3
Note:
Calculations involving this size need to specify a fallback behavior
for when the
available space
is
indefinite
if that happens to be possible.
max-content size
A box’s “ideal”
size
in a given axis when given infinite available space.
Usually this is the smallest
size
the box could take in that axis
while still fitting around its contents,
i.e. minimizing unfilled space while avoiding overflow.
max-content inline size
The box’s “ideal”
size
in the
inline axis
Usually the narrowest
inline size
it could take while fitting around its contents
if
none
of the soft wrap opportunities within the box were taken.
(See
§ 5 Intrinsic Size Determination
.)
Note:
This is called the “preferred width” in
CSS2.1§10.3.5
and the “maximum cell width” in
CSS2.1§17.5.2.2
max-content block size
The box’s “ideal”
size
in the
block axis
Usually the
block size
of the content after layout.
min-content size
Nominally, the smallest
size
a box could take
that doesn’t lead to overflow
that could be avoided by choosing a larger
size
Formally, the size of the box when sized under a
min-content constraint
see
§ 5 Intrinsic Size Determination
min-content inline size
The
min-content size
in the
inline axis
Typically, the
inline size
that would fit around its contents
if
all
soft wrap opportunities within the box were taken.
Note:
This is called the “preferred minimum width” in
CSS2.1§10.3.5
and the “minimum content width” in
CSS2.1§17.5.2.2
min-content block size
The
min-content size
in the
block axis
For
block containers
, tables, and
inline boxes
this is equivalent to the
max-content block size
fit-content size
fit-content inline size
fit-content block size
If the
available space
in a given axis is
definite
equal to
clamp(
min-content size
stretch-fit size
max-content size
(i.e.
max(
min-content size
, min(
max-content size
stretch-fit size
))
).
When sizing under a
min-content constraint
equal to the
min-content size
Otherwise, equal to the
max-content size
in that axis.
Note:
This is called the “shrink-to-fit” width in
CSS2.1§10.3.5
and
CSS Multi-column Layout § 3.4
intrinsic size
max-content size
or
min-content size
i.e. a size arising primarily from the size of the content.
(Some uses of this term may refer also to sizes
derived primarily from one of these two sizes.)
Replaced elements
frequently derive their
intrinsic size
from their
natural dimensions
2.2.
Intrinsic Size Contributions
max-content contribution
The size that a box contributes to its
containing block
’s
max-content size
min-content contribution
The size that a box contributes to its
containing block
’s
min-content size
intrinsic size contribution
max-content contribution
min-content contribution
or similarly-calculated content-based size contribution.
Intrinsic size contributions are based on the
outer size
of the box;
for this purpose
auto
margins are treated as zero.
2.3.
Intrinsic Size Constraints
max-content constraint
A sizing constraint imposed by the box’s
containing block
that causes it to produce its
max-content contribution
min-content constraint
A sizing constraint imposed by the box’s
containing block
that causes it to produce its
min-content contribution
preferred aspect ratio
A width:height ratio inherent to a box,
which biases various sizing algorithms
to produce a size consistent with that aspect ratio
insofar as possible while honoring other sizing inputs.
Unless otherwise specified,
a box’s
preferred aspect ratio
is its
natural aspect ratio
if it has one
and is applied to its
content box
Most boxes do not have a
preferred aspect ratio
Tests
replaced-fractional-height-from-aspect-ratio.html
(live test)
(source)
3.
Specifying Box Sizes
3.1.
Sizing Properties
This section defines the
sizing properties
width
height
min-width
min-height
max-width
, and
max-height
Their potential values are defined in the next section,
§ 3.2 Sizing Values: the
Note:
Additional
flow-relative
aliases to these properties are defined in
[CSS-LOGICAL-1]
We would like to define shorthands for each pair of sizing properties
(e.g.
width
and
height
but there is a naming conflict with the
@page
size
descriptor
[CSS-PAGE-3]
so this has been deferred to Level 4.
Suggestions on how to resolve this problem are welcome,
see
discussion
3.1.1.
Preferred Size Properties: the
width
and
height
properties
Name:
width
height
Value:
auto
min-content
max-content
fit-content(
Initial:
auto
Applies to:
all elements except
non-replaced
inlines
Inherited:
no
Percentages:
relative to width/height of
containing block
Computed value:
as specified, with
values computed
Canonical order:
per grammar
Animation type:
by computed value type, recursing into
fit-content()
Logical property group:
size
Tests
height-composition.html
(live test)
(source)
height-interpolation.html
(live test)
(source)
height-no-interpolation.html
(live test)
(source)
width-composition.html
(live test)
(source)
width-interpolation.html
(live test)
(source)
percentage-height-replaced-content-in-auto-cb.html
(live test)
(source)
height-invalid.html
(live test)
(source)
height-valid.html
(live test)
(source)
width-invalid.html
(live test)
(source)
width-valid.html
(live test)
(source)
The
width
and
height
physical
) properties specify
the
preferred
width
and
height
of the box, respectively.
3.1.2.
Minimum Size Properties: the
min-width
and
min-height
properties
Name:
min-width
min-height
Value:
auto
min-content
max-content
fit-content(
Initial:
auto
Applies to:
all elements that accept
width
or
height
Inherited:
no
Percentages:
relative to width/height of
containing block
Computed value:
as specified, with
values computed
Canonical order:
per grammar
Animation type:
by computed value, recursing into
fit-content()
Logical property group:
min-size
Tests
min-height-composition.html
(live test)
(source)
min-height-interpolation.html
(live test)
(source)
min-width-composition.html
(live test)
(source)
min-width-interpolation.html
(live test)
(source)
button-min-width.html
(live test)
(source)
grid-item-image-percentage-min-height-computes-as-0.html
(live test)
(source)
min-height-computed.html
(live test)
(source)
min-height-invalid.html
(live test)
(source)
min-height-valid.html
(live test)
(source)
min-width-computed.html
(live test)
(source)
min-width-invalid.html
(live test)
(source)
min-width-valid.html
(live test)
(source)
The
min-width
and
min-height
properties specify
the
minimum width
(or “min width”)
and
minimum height
(or “min height”)
of the box, respectively.
Note:
The initial value of
auto
is new;
in
[CSS2]
the initial value was zero.
3.1.3.
Maximum Size Properties: the
max-width
and
max-height
properties
Name:
max-width
max-height
Value:
none
min-content
max-content
fit-content(
Initial:
none
Applies to:
all elements that accept
width
or
height
Inherited:
no
Percentages:
relative to width/height of
containing block
Computed value:
as specified, with
values computed
Canonical order:
per grammar
Animation type:
by computed value, recursing into
fit-content()
Logical property group:
max-size
Tests
max-height-composition.html
(live test)
(source)
max-height-interpolation.html
(live test)
(source)
max-width-composition.html
(live test)
(source)
max-width-interpolation.html
(live test)
(source)
block-image-percentage-max-height-inside-inline.html
(live test)
(source)
image-percentage-max-height-in-anonymous-block.html
(live test)
(source)
nested-flexbox-image-percentage-max-height-computes-as-none.html
(live test)
(source)
max-height-computed.html
(live test)
(source)
max-height-invalid.html
(live test)
(source)
max-height-valid.html
(live test)
(source)
max-width-computed.html
(live test)
(source)
max-width-invalid.html
(live test)
(source)
max-width-valid.html
(live test)
(source)
The
max-width
and
max-height
properties specify
the
maximum width
(or “max width”)
and
maximum height
(or “max height”)
of the box, respectively.
3.2.
Sizing Values: the
auto
none
min-content
max-content
, and
fit-content()
values
Specifies the size of the box using
and/or
The
box-sizing
property indicates whether the
content box
or
border box
is measured.
Percentages are resolved against the width/height, as appropriate,
of the box’s
containing block
If, in a particular axis,
the
containing block’s
size depends on the box’s size,
see the relevant layout module
for special rules on how to resolve percentages.
Negative values are invalid.
Tests
thin-element-render.html
(live test)
(source)
auto
For
width
height
, specifies an
automatic size
automatic
block size
automatic
inline size
).
See the relevant layout module for how to calculate this.
For
min-width
min-height
specifies an
automatic minimum size
Unless otherwise defined by the relevant layout module,
however,
it resolves to a used value of
For backwards-compatibility,
the
resolved value
of this keyword is zero
for boxes of all
[CSS2]
display types
block and inline boxes,
inline blocks,
and all the table layout boxes.
It also resolves to zero
when no box is generated.
none
No limit on the size of the box.
min-content
Use the
min-content size
in the relevant axis;
for a box’s
block size
unless otherwise specified,
this is equivalent to its
automatic size
Tests
clone-intrinsic-size.html
(live test)
(source)
clone-nowrap-intrinsic-size-bidi.html
(live test)
(source)
clone-nowrap-intrinsic-size.html
(live test)
(source)
min-content-negative-margin-crash.html
(live test)
(source)
replaced-max-height-min-content.html
(live test)
(source)
replaced-max-size-saturation.html
(live test)
(source)
replaced-max-width-min-content.html
(live test)
(source)
replaced-min-height-min-content.html
(live test)
(source)
replaced-min-width-min-content.html
(live test)
(source)
shrink-to-fit-sizing-max-width-min-content.html
(live test)
(source)
slice-intrinsic-size.html
(live test)
(source)
slice-nowrap-intrinsic-size-bidi.html
(live test)
(source)
slice-nowrap-intrinsic-size.html
(live test)
(source)
svg-no-ar-max-height-min-content.html
(live test)
(source)
svg-no-ar-min-height-min-content.html
(live test)
(source)
max-content
Use the
max-content size
in the relevant axis;
for a box’s
block size
unless otherwise specified,
this is equivalent to its
automatic size
fit-content(
Use the fit-content formula
with the
available space
replaced by the specified argument,
i.e.
min(
max-content
, max(
min-content
))
where the
argument is resolved
exactly as for
values standing alone.
Negative
values are invalid.
Tests
auto-scrollbar-inside-stf-abspos.html
(live test)
(source)
block-fit-content-as-initial.html
(live test)
(source)
fit-content-length-percentage-001.html
(live test)
(source)
fit-content-length-percentage-002.html
(live test)
(source)
fit-content-length-percentage-003.html
(live test)
(source)
fit-content-length-percentage-004.html
(live test)
(source)
fit-content-length-percentage-005.html
(live test)
(source)
fit-content-length-percentage-006.html
(live test)
(source)
fit-content-length-percentage-007.html
(live test)
(source)
fit-content-length-percentage-008.html
(live test)
(source)
fit-content-length-percentage-009.html
(live test)
(source)
fit-content-length-percentage-010.html
(live test)
(source)
fit-content-length-percentage-011.html
(live test)
(source)
fit-content-length-percentage-012.html
(live test)
(source)
fit-content-length-percentage-013.html
(live test)
(source)
fit-content-length-percentage-014.html
(live test)
(source)
fit-content-length-percentage-015.html
(live test)
(source)
fit-content-length-percentage-016.html
(live test)
(source)
calc-size()
See
Note:
The
none
keyword is
not usable within
calc-size()
Tests
block-size-with-min-or-max-content-1a.html
(live test)
(source)
block-size-with-min-or-max-content-1b.html
(live test)
(source)
block-size-with-min-or-max-content-2.html
(live test)
(source)
block-size-with-min-or-max-content-3.html
(live test)
(source)
block-size-with-min-or-max-content-4.html
(live test)
(source)
block-size-with-min-or-max-content-5.html
(live test)
(source)
block-size-with-min-or-max-content-6.html
(live test)
(source)
block-size-with-min-or-max-content-7.html
(live test)
(source)
block-size-with-min-or-max-content-table-1a.html
(live test)
(source)
block-size-with-min-or-max-content-table-1b.html
(live test)
(source)
hori-block-size-small-or-larger-than-container-with-min-or-max-content-1.html
(live test)
(source)
hori-block-size-small-or-larger-than-container-with-min-or-max-content-2a.html
(live test)
(source)
hori-block-size-small-or-larger-than-container-with-min-or-max-content-2b.html
(live test)
(source)
image-min-max-content-intrinsic-size-change-001.html
(live test)
(source)
image-min-max-content-intrinsic-size-change-002.html
(live test)
(source)
image-min-max-content-intrinsic-size-change-003.html
(live test)
(source)
image-min-max-content-intrinsic-size-change-004.html
(live test)
(source)
image-min-max-content-intrinsic-size-change-005.html
(live test)
(source)
image-min-max-content-intrinsic-size-change-006.html
(live test)
(source)
image-min-max-content-intrinsic-size-change-007.html
(live test)
(source)
image-min-max-content-intrinsic-size-change-008.html
(live test)
(source)
keyword-sizes-for-intrinsic-contributions.html
(live test)
(source)
keyword-sizes-for-intrinsic-contributions-002.html
(live test)
(source)
keyword-sizes-on-abspos.html
(live test)
(source)
keyword-sizes-on-flex-item-001.html
(live test)
(source)
keyword-sizes-on-flex-item-002.html
(live test)
(source)
keyword-sizes-on-floated-element.html
(live test)
(source)
keyword-sizes-on-inline-block.html
(live test)
(source)
keyword-sizes-on-replaced-element.html
(live test)
(source)
min-content-min-width-000.html
(live test)
(source)
percentage-min-width.html
(live test)
(source)
vert-block-size-small-or-larger-than-container-with-min-or-max-content-1.html
(live test)
(source)
vert-block-size-small-or-larger-than-container-with-min-or-max-content-2a.html
(live test)
(source)
vert-block-size-small-or-larger-than-container-with-min-or-max-content-2b.html
(live test)
(source)
In all cases,
the used value is floored to preserve a non-negative
inner size
Note:
The
min-content
max-content
, and
fit-content()
values
are new in Level 3.
Note:
The
flex-basis
property hereby also gains these new keywords,
as its values are defined by reference to <
width
>.
Note:
This section previously defined
stretch
and
fit-content
as keywords representing the
stretch-fit size
and
fit-content size
respectively.
These keywords have been deferred to Level 4
(along with an additional
contain
keyword that
behaves similarly to
stretch
but preserves the
preferred aspect ratio
, if any)
to better work out the implications in situations with
indefinite
available space
3.2.1.
“Behaving as
auto
To have a common term for both when
width
height
computes to
auto
and when it is defined to behave as if
auto
were specified
(as in the case of
block percentage heights
resolving against an
indefinite
size,
see
CSS2§10.5
),
the property is said to
behave as auto
in both of these cases.
Note:
Legacy spec prose defining layout behavior, particularly in
[CSS2]
might explicitly refer to
width
height
having a computed value of
auto
as a condition;
some of these cases should be interpreted as meaning
behaves as auto
and reported to the CSSWG for updating.
Tests
margin-collapse-with-indefinite-block-size-001.html
(live test)
(source)
margin-collapse-with-indefinite-block-size-002.html
(live test)
(source)
margin-collapse-with-indefinite-block-size-003.html
(live test)
(source)
margin-collapse-with-indefinite-block-size-004.html
(live test)
(source)
margin-collapse-with-indefinite-block-size-005.html
(live test)
(source)
Replace this section with references to the new term
automatic size
3.2.2.
Containing or Excluding Floats
This section is non-normative.
Although
block box
boundaries are typically pervious to floats,
sometimes an author needs them to contain their own (descendant) floats
or to exclude floats from outside.
For Block layout,
specifying
display: flow-root
will make the box a
formatting context
root,
which has this behavior.
Note:
Boxes participating in Flex, Grid, or Table layout will automatically have this behavior.
3.3.
Box Edges for Sizing: the
box-sizing
property
Name:
box-sizing
Value:
content-box
border-box
Initial:
content-box
Applies to:
all elements that accept
width
or
height
Inherited:
no
Percentages:
N/A
Computed value:
specified keyword
Canonical order:
per grammar
Animation type:
discrete
Tests
box-sizing-replaced-001.xht
(live test)
(source)
box-sizing-replaced-002.xht
(live test)
(source)
box-sizing-replaced-003.xht
(live test)
(source)
box-sizing-computed.html
(live test)
(source)
box-sizing-invalid.html
(live test)
(source)
box-sizing-valid.html
(live test)
(source)
The
box-sizing
property defines whether
fixed sizes (such as
s and
s)
are assigned to the
content box
or to the
border box
It affects the interpretation of all
sizing properties
including
flex-basis
Values have the following meanings:
content-box
Sizes specified on
sizing properties
as
represent the box’s
inner sizes
excluding the margins/border/padding:
they are applied to the
content box
The padding and border of the box
are laid out and drawn
outside
the specified
width
and
height
Note:
This is the behavior of width and height as specified by CSS2.1,
and is thus the default.
Tests
box-sizing-content-box-001.xht
(live test)
(source)
box-sizing-content-box-002.xht
(live test)
(source)
box-sizing-content-box-003.xht
(live test)
(source)
border-box
Sizes specified on
sizing properties
as
represent the box’s visually-apparent sizes,
including the borders/padding (but not margin):
they are applied to the
border box
The padding and border of the box
are laid out and drawn
inside
the specified
width
and
height
with the
content box
sized to fill the remaining space,
floored at zero.
The content width and height are calculated
by subtracting the border and padding widths of the respective sides
from the specified
As the content width and height
cannot be negative
this computation is floored at zero.
Used values, as exposed for instance through
getComputedStyle()
also refer to the border box.
Tests
border-box-and-max-content-001.html
(live test)
(source)
border-box-and-max-content-002.html
(live test)
(source)
border-box-and-max-content-003.html
(live test)
(source)
box-sizing-border-box-001.xht
(live test)
(source)
box-sizing-border-box-002.xht
(live test)
(source)
box-sizing-border-box-003.xht
(live test)
(source)
box-sizing-border-box-004.xht
(live test)
(source)
table-child-percentage-height-with-border-box.html
(live test)
(source)
Values affected by
box-sizing
include
both raw
values
and those used in functional notations such as
fit-content()
In contrast,
non-quantitative values such as
auto
and
min-content
are not influenced by the
box-sizing
property
(unless otherwise specified).
For example, the following properties set
the content-box size of the box to
100px
with the border-box size calculating to
120px
.box
box-sizing
content-box
/* default */
width:
100
px
padding-left
10
px
border-left
10
px
solid
On the other hand, by changing to
border-box
the border-box is set to
100px
with the content-box size calculating to
80px
.box
box-sizing
border-box
width
100
px
padding-left
10
px
border-left
10
px
solid
The
inner size
can’t be less than zero,
so if the
padding
border
is greater than the specified border-box size,
the box will end up larger than specified.
In this case, the content-box size will floor at
0px
so the border-box size ends up at
120px
even though
width: 100px
is specified for the border box:
.box
box-sizing
border-box
width
100
px
padding-left
60
px
border-left
60
px
solid
/* padding + border = 120px */
This example uses box-sizing to evenly horizontally split
two divs with fixed size borders inside a div container,
which would otherwise require additional markup.
sample CSS:
div.container
width
38
em
border
em
solid black
div.split
box-sizing
border-box
width
50
border
em
silver ridge
float
left
sample HTML fragment:
div
class
"container"
div
class
"split"
This div occupies the left half.
div
div
class
"split"
This div occupies the right half.
div
div
demonstration of sample CSS and HTML:
This div should occupy the left half.
This div should occupy the right half.
The two divs above should appear side by side, each (including borders) 50% of the content width of their container. If instead they are stacked one on top of the other then your browser does not support
box-sizing
Note:
Certain HTML elements,
such as
button
default to
border-box
behavior.
See HTML for details on which elements have this behavior.
In legacy CSS specifications,
the terms
width
height
minimum (min) width
minimum (min) height
maximum (max) width
, and
maximum (max) height
generally refer to the
inner
size
content-box
size)
of a
box
unless otherwise indicated.
Refer to
CSS User Interface 3
§ 3.1 Changing the Box Model: the box-sizing property
for an explicit disambiguation of these terms
for the
Visual formatting model details
section of
[CSS2]
To avoid ambiguities,
specification authors should avoid ambiguous uses of terms such as width or height without further qualification,
and should explicitly refer and link to
the
inner
size,
the
outer
size,
the size of the
border-box
the
computed value
of the
sizing properties
etc,
as appropriate for each case.
3.4.
New Column Sizing Values: the
min-content
max-content
, and
fit-content()
values
Name:
column-width
New values:
min-content
max-content
fit-content(
Computed value:
as specified, with
values computed
Animation type:
by computed value type
When used as values for
column-width
the new keywords specify the optimal column width:
min-content
Specifies the optimal column width as the
min-content inline size
of the multi-column container’s contents.
max-content
Specifies the optimal column width as the
max-content inline size
of the multi-column container’s contents.
fit-content(
Specifies the optimal column width as
min(
max-content size
, max(
min-content size
))
Note:
The column width never varies by column.
When the column width is informed by the multi-column container’s contents
(as in the keywords above),
all of its contents are taken under consideration
and the calculated width is shared by all the columns.
4.
Extrinsic Size Determination
Extrinsic sizing
determines sizes based on the context of an element,
without regard for its contents.
4.1.
Percentage Sizing
Percentages specify sizing of a box with respect to the box’s
containing block
For example, in the following markup:
article
style
"height: 60em"
figure
style
"height: 50%;"
img
style
"height: 50%;"
figure
article
the
would be
30em
tall
= 50% of the
definite
60em
height of the
the
would be
15em
tall
= 50% of the
’s height
(which is itself
definite
because it’s a percentage resolved against a
definite
length)
See
§ 5.2.1 Intrinsic Contributions of Percentage-Sized Boxes
for details on how to resolve percentages
when the size of the
containing block
depends
on the size of its content.
Tests
percentage-height-in-flexbox.html
(live test)
(source)
range-percent-intrinsic-size-1.html
(live test)
(source)
range-percent-intrinsic-size-2.html
(live test)
(source)
range-percent-intrinsic-size-2a.html
(live test)
(source)
5.
Intrinsic Size Determination
Intrinsic sizing
determines sizes based on the contents of an element,
without regard for its context.
Tests
canvas-intrinsic-dynamic.html
(live test)
(source)
intrinsic-percent-replaced-dynamic-001.html
(live test)
(source)
intrinsic-percent-replaced-dynamic-002.html
(live test)
(source)
intrinsic-percent-replaced-dynamic-003.html
(live test)
(source)
intrinsic-percent-replaced-dynamic-004.html
(live test)
(source)
intrinsic-percent-replaced-dynamic-005.html
(live test)
(source)
intrinsic-percent-replaced-dynamic-006.html
(live test)
(source)
intrinsic-percent-replaced-dynamic-007.html
(live test)
(source)
intrinsic-percent-replaced-dynamic-008.html
(live test)
(source)
intrinsic-percent-replaced-dynamic-009.html
(live test)
(source)
intrinsic-percent-replaced-dynamic-010.html
(live test)
(source)
intrinsic-percent-replaced-dynamic-011.html
(live test)
(source)
intrinsic-percent-replaced-dynamic-012.html
(live test)
(source)
intrinsic-ratio-replaced-box-sizing.html
(live test)
(source)
intrinsic-size-fallback-replaced.html
(live test)
(source)
5.1.
Intrinsic Sizes
The
min-content size
of a box in each axis
is the size it would have if it was
a float given an
auto
preferred size
in that axis
(and no
minimum
or
maximum size
in that axis)
and if its containing block was
zero
-sized in that axis.
(In other words, the minimum size it has when sized as “shrink-to-fit”.)
The
max-content size
of a box in each axis
is the size it would have if it was
a float given an
auto
preferred size
in that axis
(and no
minimum
or
maximum size
in that axis),
and if its containing block was
infinitely
-sized in that axis.
(In other words, the maximum size it has when sized as “shrink-to-fit”.)
The
min-content size
and
max-content size
are collectively referred to
as the
intrinsic sizes
Note:
When the box has a
preferred aspect ratio
size constraints in the opposite dimension will transfer through
and can affect the
auto
size in the considered one.
See
CSS2§10
This specification does not define how to determine the sizes of floats.
Please refer to
[CSS2]
However, the
intrinsic sizes
of
replaced elements
without
natural sizes
are defined below:
If it has a
preferred aspect ratio
For the
min-content size
, use zero.
For the
max-content size
If the
available space
is
definite
in the
inline axis
use the
stretch fit
into that size for the inline size
and calculate the block size using the aspect ratio.
Otherwise
if the box has a
as its
computed value
for
min-width
or
min-height
use that size and calculate the other dimension using the aspect ratio;
if both dimensions have a
minimum,
choose the one that results in the larger overall size.
Note:
This case was previous calculated from a 300x150 default size,
rather than the box’s min size.
This is believed to be a better behavior,
and likely to be Web-compatible,
but please send feedback to the CSSWG if there are any problems.
Tests
replaced-fractional-height-from-aspect-ratio-2.html
(live test)
(source)
Otherwise
use an
inline size
matching
the corresponding dimension of the
initial containing block
and calculate the other dimension using the aspect ratio.
If it has no
preferred aspect ratio
For both the
min-content size
and
max-content size
If the box has a
as its
computed
minimum size
min-width
min-height
) in that dimension,
use that size.
Note:
This author-controllable behavior is made possible
by the new
auto
value for the
min size properties
This is believed to be a better behavior,
but it is not yet clear if it is Web-compatible,
so please send feedback to the CSSWG if there are any problems.
Otherwise,
use
300px
for the width
and/or
150px
for the height
as needed.
Since a block-level or inline-level replaced element
whose
height
or
width
behaves as auto
is effectively defined to use its
max-content size
CSS2§10.3.2
),
this specification applies the rules above
to the undefined case of a replaced element
whose
height
and
width
both
behave as auto
Note:
This specification does not define how to determine
the size of a float.
Please refer to
[CSS2]
the relevant CSS specification for that display type,
and/or existing implementations
for further details.
A future specification will define this in detail,
replacing the CSS2 “definition”,
such as it is.
Although the
auto
size of text input controls
such as HTML’s
and
US