Какая разница между width:auto и width:fit-content?
Пример с width: auto
.block {
width: 300px;
width: auto;
height: min-content;
background: yellowgreen;
margin: 20px;
font-size: 40px;
}
.parent {
background: yellowgreen;
width: 500px;
}
<div class="parent">
<div class="block">Lorem, ipsum dolor sit amet consectetur adipisicing elit.</div>
</div>
Пример с width: fit-content
.block {
width: 300px;
width: fit-content;
height: min-content;
background: yellowgreen;
margin: 20px;
font-size: 40px;
}
.parent {
background: yellowgreen;
width: 500px;
}
<div class="parent">
<div class="block">Lorem, ipsum dolor sit amet consectetur adipisicing elit.</div>
</div>
Как видно, ведут эти два свойства себя совершенно одинаково
P.S. Также не совсем понятна формула свойства fit-content – min(maximum size, max(minimum size, argument)). Что из себя представляет в данном случае "аргумент"? Формула
Ответы (2 шт):
Источник
fit-content
Наибольшее из
- внутренней минимальной ширины
- меньшей из внутренней предпочтительной ширины и доступной ширины
.fit-content {
background-color: red;
font-size: 20px;
color: white;
display: inline-block;
padding: 20px 0;
min-width: 400px;
width: fit-content;
}
<div class="fit-content">
fit-content
</div>
Если вы хотели это для гридов использовать:
grid-template-columns: fit-content(300px) fit-content(300px) 1fr;
Первый и второй элемент в ряду будут занимать максимум 300px в ширину
#container {
display: grid;
grid-template-columns: fit-content(300px) fit-content(300px) 1fr;
grid-gap: 5px;
box-sizing: border-box;
height: 200px;
width: 100%;
background-color: #8cffa0;
padding: 10px;
}
#container>div {
background-color: #8ca0ff;
padding: 5px;
}
<div id="container">
<div>
Элемент с дополнительным текстом. Поскольку его содержимое превышает максимальную ширину, оно ограничено 300 пикселей.
</div>
<div>
Элемент с дополнительным текстом. Поскольку его содержимое превышает максимальную ширину, оно ограничено 300 пикселей.
</div>
<div>Флексовый элемент</div>
</div>
Это тоже самое, что написать:
#container {
display: grid;
grid-template-columns: auto auto 1fr;
grid-gap: 5px;
box-sizing: border-box;
height: 200px;
width: 100%;
background-color: #8cffa0;
padding: 10px;
}
#container>div {
background-color: #8ca0ff;
padding: 5px;
}
#container>div:nth-child(1),
#container>div:nth-child(2) {
max-width: 300px;
}
<div id="container">
<div>
Элемент с дополнительным текстом. Поскольку его содержимое превышает максимальную ширину, оно ограничено 300 пикселей.
</div>
<div>
Элемент с дополнительным текстом. Поскольку его содержимое превышает максимальную ширину, оно ограничено 300 пикселей.
</div>
<div>Флексовый элемент</div>
</div>
т.е. fit-content в гридах это ограничение максимального размера(не просто ширины или высоты).
В прошлых примерах был пример с рядами, вот с колонками:
#container {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: fit-content(50px) fit-content(50px) 100px;
grid-gap: 5px;
box-sizing: border-box;
width: 100%;
background-color: #8cffa0;
padding: 10px;
}
#container>div {
background-color: #8ca0ff;
padding: 5px;
}
<div id="container">
<div>
lorem lorem lorem
</div>
<div>
lorem lorem lorem
</div>
<div>Флексовый элемент</div>
</div>
Максимальная высота 1 и 2 элемента ограничена, но она очень маленькая, поэтому занимает свою исходную высоту
Когда в диве есть переносы разницы нет, но если контент помещается на одной строке, то с auto ширина дива будет всегда 100%, а с fit-content ширина дива определяется размером контента (как у span).