CSS flex-shrink — як флекс-елемент стискається
Властивість flex-shrink встановлює коефіцієнт стиснення гнучких елементів в контейнері по відношенню до інших гнучких елементів в тому ж контейнері, якщо в ньому залишається вільний простір. Гнучкі елементи автоматично зменшують свою ширину, якщо вона більша за ширину батьківського елементу.
Вказує "коефіцієнт стиснення", який визначає, на скільки елемент зменшиться відносно решти елементів у гнучкому контейнері, якщо в рядку недостатньо місця.
Якщо цей параметр опущений, його значення без задання дорівнює 1, а коефіцієнт стиснення зменшується під-час розподілу негативного місця.
У гнучкому контейнері, нащадки можуть бути розташовані у будь-якому напрямку, і можуть змінювати власні розміри: збільшувати, щоб заповнити батьківський елемент, або зменшувати, щоб не вилізти за його межі.
Приймаються цілі (1, 2, 3, ...) або дробові числа (наприклад: 0.6). Негативні значення ігноруються.
автор: Svitlana
Загальний опис
автор: NagarD
- Нотатка
-
Властивість
автор: Svitlanaflexпрацює тільки зі гнучкими елементами, тобто з тими елементами, у котрих властивістьdisplayвстановлена якflex(display: flex;абоdisplay: inline-flex). - Нотатка
-
Рекомендується застосовувати властивість
flexдля скороченого запису, а неflex-grow,flex-shrinkіflex-basisокремо.Тому що це робить стилі коротшими, зрозумілішими, а також тому, що універсальна властивість правильно скидає значення не заданих властивостей до початкового(без задання).
автор: Svitlana
Синтаксис
flex-shrink: number|initial|inherit;
Властивість flex-shrink може отримувати 3 значень:
-
number -
Коефіцієнт стиснення гнучкого елемента в контейнері. Має бути цілим числом. Від`ємні значення заборонені.
автор: Svitlana -
initial -
Встановлює цю властивість в значення без задання
автор: Svitlana -
inherit -
Успадкує значення властивості від свого батьківського елемента
автор: Svitlana
| Значення без задання: | 1 |
|---|---|
| Наслідує: | Ні |
| Анімується: | Так |
| JavaScript синтаксис: | object.style.flexShrink="5" |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 29 | 20 | 9 | 12.1 | 12 | 10 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 29 | 20 | 9 |
Приклади
+ запропонувати свій приклад у пісочниці
HTML
<p>Цей приклад показує як працює властивість <code>order</code>. Змінюйте значення для властивості нижче, щоб змінити порядок відображення виділеного нащадка в контейнері нижче.</p>
<hr>
<strong>order: </strong>
<input type="number" class="input" id="order" value="2" min="0">
<strong>;</strong><br><br>
<hr>
<div class="box">
<div class="child one">order: 1;</div>
<div class="child hl">order: 2;</div>
<div class="child two">order: 3;</div>
</div>
CSS
* {
box-sizing: border-box;
padding: 0;
}
body {
font-family: system-ui, sans-serif;
}
.child {
padding: 50px 16px 16px 16px;
background-color: gold;
font-size: 80%;
font-family: monospace;
text-align: center;
border: 2px solid #dcdcdc;
}
.child.one {
order: 1;
}
.child.hl {
order: 2;
background-color: #F74C32;
}
.child.two {
order: 3;
}
message {
display: none;
}
.wm {
min-height: 100px;
}
.box {
height: 150px;
background-color: #dcdcdc;
padding: 16px;
display: flex;
}
hr {
margin-bottom: 16px;
}
JS
document.querySelectorAll('.input').forEach((el) => el.addEventListener('change', function () {
var order = document.querySelector('#order').value;
document.querySelectorAll('.child.hl').forEach((n) => n.style.setProperty('order', order));
document.querySelectorAll('.child.hl').forEach((n) => n.innerHTML = 'order: ' + order + ';');
}));
Простий приклад роботи властивості
HTML
<div class="wrapper">
<div class="gold"><code>flex-shrink: <strong>1</strong>;<br>flex-basis: 200px;</code></div>
<div class="red"><code>flex-shrink: <strong>10</strong>;<br>flex-basis: 200px;</code></div>
<div class="blue"><code>flex-shrink: <strong>3</strong>;<br>flex-basis: 200px;</code></div>
</div>
CSS
* {
box-sizing: border-box;
}
.wrapper {
font-family: monospace;
color: #fff;
border: 2px solid #ddd;
display: flex;
height: 250px;
width: 500px;
}
.wrapper > div {
padding: 56px 0;
font-weight: 700;
font-size: 1em;
text-align: center;
flex-basis: 200px;
}
.gold {
background-color: gold;
flex-shrink: 1;
}
.red {
background-color: red;
flex-shrink: 10;
}
.blue {
background-color: steelblue;
flex-shrink: 3;
}
Приклад роботи властивості
HTML
<div class="info">
<p>За допомогою властивості <code>flex-shrink</code> ми можемо визначити на скільки елемент зменшиться відносно решти елементів у гнучкому контейнері, якщо в рядку недостатньо місця.</p>
<p>Нижче, на кожному елементі написаний його коефіціент, щоб Ви побачили різницю.</p>
</div>
<ul class="wrapper">
<li class="one">1</li>
<li class="two">2</li>
<li class="three">2</li>
<li class="four">1</li>
</ul>
CSS
* {
box-sizing: border-box;
}
body {
font-family: monospace;
font-size: 15px;
line-height: 1.45;
}
.info {
padding: 6px;
}
code {
font-weight: 700;
color: #444;
border-bottom: 2px solid #666;
}
.wrapper {
display: flex;
justify-content: space-around;
list-style: none;
padding: 0;
margin: 0;
background-color: #dcdcdc;
height: 75px;
width: 50vw;
}
.wrapper li {
text-align: center;
background-color: gold;
margin-left: 4px;
width: 40vw;
height: 75px;
line-height: 79px;
font-weight: 700;
padding: 0 4px;
}
.wrapper li:first-child {
margin-left: 0;
}
.wrapper li.one {
flex: 1 1 20em;
}
.wrapper li.two {
flex: 1 2 20em;
}
.wrapper li.three {
flex: 1 2 20em;
}
.wrapper li.four {
flex: 1 1 20em;
}
Два однакові рядки з аватаркою й довгою назвою, яку треба обрізати трьома крапками. Угорі текстовий блок не стискається нижче найдовшого слова й виштовхує кнопку; унизу тому самому блоку додано min-width: 0 — і обрізання запрацювало.
HTML
<div class="row">
<span class="ava">ІП</span>
<span class="name">Іван Непередбачуваненко-Довгопрізвищенко</span>
<button>Купити</button>
</div>
<p class="cap">без min-width: 0</p>
<div class="row">
<span class="ava">ІП</span>
<span class="name fix">Іван Непередбачуваненко-Довгопрізвищенко</span>
<button>Купити</button>
</div>
<p class="cap">з min-width: 0</p>
CSS
.row {
display: flex;
align-items: center;
gap: 8px;
width: 320px;
padding: 8px;
border: 2px solid #0172ad;
font: 14px sans-serif;
}
.ava {
flex-shrink: 0;
width: 34px;
height: 34px;
border-radius: 50%;
background: #0172ad;
color: #fff;
font-size: 12px;
line-height: 34px;
text-align: center;
}
.name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.fix {
min-width: 0;
}
button {
flex-shrink: 0;
}
.cap {
margin: 6px 0 20px;
font: 12px monospace;
}
Демонстрація дії різних значень властивості
HTML
<p>Вибери потрібне значення для <code>flex-shrink</code> (для лівої навігації):</p>
<input type="number" min="0" value="1" id="field"></input>
<p id="text"></p>
<hr>
<div class="layout">
<header>
<h4>Simple website</h4>
</header>
<div class="box">
<pre><code>width: 750px;</code></pre>
<main>
<nav id="nav">
<pre><code>flex-shrink: <strong id="newval">1</strong>;<br>flex-basis: 350px;</code></pre>
</nav>
<section id="wrapper">
<pre><code>flex-shrink: 2;<br>flex-basis: 350px;</code>
</section>
</main>
</div>
<footer>
© 2017
</footer>
</div>
CSS
* {
box-sizing: border-box;
padding: 0;
}
body {
text-align: center;
font-family: monospace;
font-size: 15px;
line-height: 1.5;
color: #222;
}
#field {
padding: 8px 16px;
font-size: 19px;
}
header {
line-height: 75px;
text-align: center;
text-transform: uppercase;
background-color: #808080;
color: #f9f9f9;
}
.box {
width: 750px;
border: 4px dashed red;
}
main {
display: flex;
width: 500px;
}
nav {
background-color: yellow;
flex-shrink: 1;
flex-basis: 350px;
}
#wrapper {
background-color: #eee;
flex-shrink: 2;
flex-basis: 350px;
}
footer {
line-height: 50px;
background-color: #000;
color: #f1f1f1;
margin-top: 16px;
}
JS
var nav = document.getElementById('nav');
var newval = document.getElementById('newval');
document.getElementById('field').onchange = function () {
nav.style.flexShrink = this.value;
newval.innerHTML = this.value;
};
//# sourceURL=pen.js
Коментарі
Коментарів ще немає — будьте першим!