I have the following HTML and CSS:
.container {
border: 2px solid black;
width: 1500px;
height: 700px;
margin: 40px auto;
display: flex;
justify-content: center;
}
.sidebar {
background-color: palevioletred;
flex: 100%; /* shorthand for flex: 1 1 100% */
}
p {
background-color: darkseagreen;
margin: 0px;
/* no flex explicitly set, so defaults to flex: 0 1 auto */
}
<body>
<div class="container">
<div class="sidebar">I AM SIDEBAR</div>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Adipisci quis
hic error sint est suscipit, nesciunt, rerum minus exercitationem
consequuntur eligendi, sed voluptates. Cumque obcaecati omnis ratione.
Natus, veniam neque. Officia consequuntur laboriosam nemo commodi
pariatur earum quae. Atque maxime nulla qui, numquam, blanditiis ipsa
soluta ut, totam enim aut ad aliquam reprehenderit? Odit sint, ea
incidunt veniam mollitia voluptatibus? Quo nulla ipsam necessitatibus.
Perspiciatis porro voluptate pariatur, cumque tempora accusamus
suscipit, totam, culpa aliquid dicta atque? Explicabo harum repellat at
doloremque reiciendis a ratione quod odio. Earum, veniam deleniti?
Minima soluta aperiam animi esse. Soluta blanditiis ducimus id omnis?
Unde libero dolorem aspernatur harum cupiditate! Dolorem eum minima
aperiam, vel neque officiis harum voluptatem hic nostrum vero,
perspiciatis id. Provident quae optio incidunt accusantium architecto
recusandae? Nobis veniam consectetur dicta, expedita provident repellat
tempore blanditiis totam rerum quaerat soluta sunt voluptatibus nam
temporibus labore vero doloribus harum quibusdam dolores? Itaque id non,
adipisci corrupti quisquam tempore quod dolore? Eaque quaerat
reprehenderit facilis, libero nulla consequuntur tempore fugit eius
provident inventore laudantium quo maxime necessitatibus doloribus
excepturi itaque nostrum vitae. Quia nulla suscipit ipsa aspernatur
earum possimus unde aliquam corrupti qui, rerum eveniet architecto
accusamus nisi hic laborum optio distinctio cupiditate numquam natus
quaerat porro animi quam. Ratione, veritatis unde. Impedit debitis eos
qui eveniet, nihil corrupti fugiat delectus tempore, tempora dolore
quibusdam voluptatem minus obcaecati nostrum! Officiis, odit. Repellat
corrupti doloremque excepturi accusantium suscipit asperiores
reprehenderit. Aspernatur, modi? Explicabo. Quas eum perspiciatis
incidunt labore repellat tempora quibusdam fuga accusamus esse sapiente
aperiam sunt, necessitatibus saepe architecto voluptatibus eos! Ad
adipisci exercitationem repellat amet ab doloremque nisi nostrum
sapiente et! Fugiat eveniet quisquam beatae sunt non excepturi sequi
repellendus quod maxime, libero provident aliquam quaerat adipisci
necessitatibus expedita neque delectus, nostrum voluptatum dolorum!
Voluptate obcaecati modi recusandae ea totam. Molestias?
</p>
<div class="sidebar">I AM SIDEBAR</div>
</div>
</body>
Since both .sidebar
and p
have flex-shrink: 1
, I expected them to shrink proportionally and end up taking roughly equal space.
However:
.sidebar
ends up taking ~125px<p>
ends up taking ~1250pxAccording to step 9.2.3.D of the flex layout algorithm, the flex-basis of the p element (i.e. "auto") is its max-content, assuming an infinite available width, so the three sections are shrunk proportionally in the ratio 100%:p-element's-max-content:100%.
With the max-content of the p element being much, much larger than 100%, the sidebars are allocated according much less horizontal space than the p element.
If you give the p element just enough content that it would fill one row of text, then the three sections will divide the horizontal space equally.