GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||
GeezerVison is showing developer.mozilla.org — width CSS property - CSS | MDN
|
| Initial value | auto |
|---|---|
| Applies to | all elements but non-replaced inline elements, table rows, and row groups |
| Inherited | no |
| Percentages | refer to the width of the containing block |
| Computed value | a percentage or auto or the absolute length |
| Animation type | a length, percentage or calc(); |
width =
auto |
<box-size> |
<anchor-size()>
<box-size> =
<length-percentage [0,∞]> |
stretch |
contain |
min-content |
max-content |
fit-content |
stretch( <length-percentage [0,∞]> ) |
fit-content( <length-percentage [0,∞]> ) |
<calc-size()>
<anchor-size()> =
anchor-size( [ <anchor-name> || <anchor-size> ]? , <length-percentage>? )
<length-percentage> =
<length> |
<percentage>
<calc-size()> =
calc-size( <calc-size-basis> , <calc-sum> )
<anchor-name> =
<dashed-ident>
<anchor-size> =
width |
height |
block |
inline |
self-block |
self-inline
<calc-size-basis> =
<size-keyword> |
<calc-sum> |
<calc-size()> |
any
<calc-sum> =
<calc-product> [ [ '+' | '-' ] <calc-product> ]*
<calc-product> =
<calc-value> [ [ '*' | / ] <calc-value> ]*
<calc-value> =
<number> |
<dimension> |
<percentage> |
<calc-keyword> |
( <calc-sum> )
<calc-keyword> =
e |
pi |
infinity |
-infinity |
NaN
This example demonstrates basic usage and the default auto value.
We include two paragraphs; one with a class name.
<p>The MDN community writes really great documentation.</p>
<p class="has-width">The MDN community writes really great documentation.</p>
We make all paragraphs have a gold background, explicitly setting the second paragraph's width to auto.
p {
background: gold;
}
p.has-width {
width: auto;
}
As width defaults to auto, both paragraphs are the same width.
This example demonstrates length width values.
We include two <div> elements with some text.
<div class="px_length">Width measured in px</div>
<div class="em_length">Width measured in em</div>
The px_length element is set to 200px while the em_length element is set to be 20em wide. Both elements also have different background-color, color, and border values to enable differentiating between the two when rendered.
.px_length {
width: 200px;
background-color: red;
color: white;
border: 1px solid black;
}
.em_length {
width: 20em;
background-color: white;
color: red;
border: 1px solid black;
}
The px_length element will always be 200px wide. The rendered width of the em_length element depends on the font size.
This example demonstrates using percentage values.
We include one <div> element with some text.
<div class="percent">Width in percentage</div>
We set the width of the element to be 20% of the width of its parent container.
.percent {
width: 20%;
background-color: silver;
border: 1px solid red;
}
This example compares max-content and min-content, and introduces calc-size.
We include three paragraphs with the same content; just their class names differ.
<p class="max-green">The MDN community writes really great documentation.</p>
<p class="min-blue">The MDN community writes really great documentation.</p>
<p class="min-pink">The MDN community writes really great documentation.</p>
We set one paragraph's width to max-content, the second to min-content, and the third to be twice the size of the min-content by using the calc-size() function. Each is given a different background-color and border-style to enable differentiating between the two.
p.max-green {
width: max-content;
background-color: lightgreen;
border-style: dotted;
}
p.min-blue {
width: min-content;
background-color: lightblue;
border-style: dashed;
}
p.min-pink {
width: calc-size(min-content, size * 2);
background-color: pink;
border-style: solid;
}
@supports not (width: calc-size(min-content, size * 2)) {
body::before {
content: "Your browser doesn't support the calc-size() function yet.";
background-color: wheat;
display: block;
text-align: center;
padding: 1rem 0;
}
}
The max-content example is as wide as the text. The min-content example is as wide as the widest word. The calc-size() example is set to be twice as wide as the min-content.
This example demonstrates the stretch value within a flex container.
We include a parent container with two child elements.
<div class="parent">
<div class="child">text</div>
<div class="child stretch">stretch</div>
</div>
We use the display property to make the parent a flex container, and set the second child's width the stretch.
.parent {
border: solid;
margin: 1rem;
display: flex;
}
.child {
background: #00999999;
margin: 1rem;
}
.stretch {
width: stretch;
}
@supports not (width: stretch) {
body::before {
content: "Your browser doesn't support the stretch value yet.";
background-color: wheat;
display: block;
text-align: center;
padding: 1rem 0;
}
}
By default, flex items are as wide as their content. The stretch value makes the element as wide as the available space allows, with the element's margin box otherwise clamped to the width of its containing block.
This example demonstrates using the anchor-size() function to define the width of an anchor-positioned element; we defined its width as a multiple of its anchor's height.
We specify two <div> elements: one anchor element and one infobox element that we'll position relative to the anchor.
<div class="anchor">⚓︎</div>
<div class="infobox">
<p>Infobox.</p>
</div>
We declare the anchor <div> as an anchor element by giving it an anchor-name. The positioned element has its position property set to absolute, and is associated with the anchor element via its position-anchor property. We also set absolute height and width dimensions on the anchor and define the width of the anchor-positioned element to be the width of the anchor using the anchor-size() function as the value of the width property. As a bonus, we also use the anchor-size() function to define the infobox's left position, making the gap between the anchor and the infobox one quarter of the height of the anchor.
.anchor {
anchor-name: --my-anchor;
width: 120px;
height: 60px;
font-size: 2rem;
background-color: lightpink;
text-align: center;
align-content: center;
outline: 1px solid black;
}
.infobox {
position-anchor: --my-anchor;
position: absolute;
position-area: right;
width: anchor-size(width);
left: calc( anchor-size(height) / 4 )
align-content: center;
color: darkblue;
background-color: azure;
outline: 1px solid #dddddd;
}
body {
padding: 5em;
}
@supports not (width: anchor-size(width)) {
body::before {
content: "Your browser doesn't support the anchor-size() function value.";
background-color: wheat;
display: block;
text-align: center;
padding: 1rem 0;
}
}
Note how the infobox's width is always the same as the anchor element's width.
| Specification |
|---|
| CSS Box Sizing Module Level 3 # propdef-width |
heightbox-sizingmin-width, max-widthblock-size, inline-sizewidth attribute