Как работает flex-shrink в CSS. Подробное руководство | by Stas Bagretsov
4 min read·
Jan 19, 2018Flex-shrink
это подсвойство, которое помогает в создании шаблона страницы с помощью Flex-box.
Оно определяет фактор “нарезки” элемента, который указывает на сколько “flex частей” будет уменьшаться элемент относительно других элементов в flex-контейнере, в тех случаях, когда для него недостаточно места в этом самом контейнере.
Когда этот параметр не указан в CSS файле, то он по-дефолту выставлен на 1 и фактор “нарезки” умножается на показатель flex-basis
, когда распределяется отрицательное пространство.
👉Мой Твиттер — там много из мира фронтенда, да и вообще поговорим🖖. Подписывайтесь, будет интересно: ) ✈️
flex-shrink: <число>.flex-item { flex-shrink: 2;}#Демо
Чтобы увидеть, как это всё происходит на наглядном, живом примере, вам нужно самим изменять размер ширины контейнеры. Поэтому зайдите свои параметры на CodePen и поиграйтесь с шириной окна.
Что мы видим в этой демке?
Первый элемент имеет значение flex: 1 1 20em
, что в обычном виде означает flex-grow:1
, flex-shrink:1
, flex-basis: 20em
.
Второй элемент имеется значения flex: 2 2 20em
, что в обычном виде означает flex-grow:2
, flex-shrink: 2
, flex-basis: 20em
.
Оба flex элемента хотят быть по 20em
в ширину. Из-за flex-grow
(первое значение), если сам flex контейнер больше 40em
, второй дочерний элемент получит вдвое больше оставшегося места, чем первый дочерний элемент. Но если родительский элемент меньше, чем 40em
, тогда второй дочерний элемент будет в два раза урезан в отношении первого дочернего элемента, на фоне которого он будет смотреться меньше. Это произойдет из-за второго значения во flex, flex-shrink
. В общем-то все и так понятно, но как и в случае с flex-grow
, не все так просто. Давайте посмотрим как высчитывается flex-shrink
.
Повторим. Если оставшееся место имеет отрицательное значение, то это означает то, что flex контейнер меньше, чем предопределенная ширина всех flex элементов. Им в этом случае придется подтянуть пояса. Назначая значения flex-shrink
мы можем контролировать то, насколько места каждый flex элемент будет ужат в этом случае.
По некоторым причинам, метод работы с flex-shrink
отличается от flex-grow
и немного сложнее.
Как вы уже наверное догадались, flex решает буквально все проблемы раскладки во фронт-энде.
Поэтому, так как вы можете распределить дополнительное место среди всех саб-элементов, при наличии такового свободного места, вы можете также позволить им сократиться таким образом, чтобы они умещалисть в ограниченное пространство при нехватке оного.
В общем, в этом и суть flex-shrink
.
Ещё раз упомянем, что возможно вы думали о том, что flex-shrink
высчитывается также, как и flex-grow
, но тут всё не так то просто.
Свойство flex-shrink
указывает на то, насколько каждый элемент урежется при нехватке свободного места. Его стандартное значение равно 1. Множество статей просто описывают это свойство как «коэффициент сокращения элемента» и всё. Нет ни слова о том, как он высчитывается.
flex-shrink
определяет только важность компонента при его сжатии, если ширина меньше.
Для примера:
Родительский элемент имеет ширину в 500px. Другие три дочерних элемента выставлены на 150px, 200px и 300px.
У flex элементов стоят flex-shrink
значения 1
, 2
и 3
, соответственно.
Давайте сначала посчитаем переполнение элементов в контейнере: 150 + 200 + 300–500 = -150px.
Далее, эти -150px будут компенсированы сокращением на определенное количество для каждого из трех элементов.
Вычисления тут такие: каждый элемент сокращается в соответствии со своим flex-shrink
, умноженным на его ширину.
В общем, общий «вес» получается таким: 1 * 150 + 2 * 200 + 3 * 300 = 1450
Значит, каждый элемент сократится так:
150 * 1(flex-shrink) * 150(width) / 1450 = -15.5
150 * 2(flex-shrink) * 200(width) / 1450 = -41.4
150 * 3(flex-shrink) * 300(width) / 1450 = -93.1
И финальные размеры будут такими:
150–15.5 = 134.5
200–41.4 = 158.6
300–93.1 = 206.9
.flex-container{display: flex; width: 500px;} .flex-item-1{ flex-basis: 150px; flex-shrink: 1;} .flex-item-2{ flex-basis: 200px; flex-shrink: 2;} .flex-item-3{ flex-basis: 300px; flex-shrink: 3;}Не обращайте внимания на мелкие неточности, в виде одних сотых пикселя -это из-за размеров браузера
Примерно также, когда сумма всех flex-shrink
всех элементов меньше 1, вычисления будут другими:
Тут он не будет сокращать всё место, а только обрежет место в соотношении flex-shrink
к значению 1
.
Тот же самый пример, но flex-shrink
значения у каждого элемента будут изменены на 0.1
, 0.2
и 0.3
, соответственно.
Тогда общий «вес» будет 145 (просто в 10 раз меньше, формулу пропускаем).
Все три элемента сокращаются не на 150px, а только на 150px (0.1 + 0.2 + 0.3) / 1 или на 60% всего места: 90px.
Место на которое нарезается каждый элемент:
90 * 0.1(flex-shrink) * 150(width) / 145 = 9.31
90 * 0.2(flex-shrink) * 200(width) / 145 = 24.83
90 * 0.3(flex-shrink) * 300(width) / 145 = 55.86
И конечная ширина элементов:
150–9.31 = 140.69
200–24.83 = 175.17
300–55.86 = 244.14
Конечно же, как и на flex-grow
, min-width
влияет на flex-shrink
.
.flex-container{display: flex; width: 500px;}.flex-item-1{ flex-basis: 150px; flex-shrink: 0. 1;}.flex-item-2{ flex-basis: 200px; flex-shrink: 0.2;}.flex-item-3{ flex-basis: 300px; flex-shrink: 0.3;}Не обращайте внимания на мелкие неточности, в виде одних сотых пикселя -это из-за размеров браузера
CSS flex shrink
HTML5CSS.ruЛУЧШИЙ САЙТ ДЛЯ РАЗРАБОТЧИКОВ
❮ Назад Полный CSS Справочник Дальше ❯
Пример
Пусть второй Flex-Item сократится в три раза больше, чем остальные:
/* Safari 6.1+ */div:nth-of-type(2) {
-webkit-flex-shrink: 3;
}
/* Standard syntax */
div:nth-of-type(2) {
flex-shrink: 3;
}
Определение и использование
Свойство flex-shrink
указывает, как элемент будет сжиматься относительно остальных гибких элементов внутри того же контейнера.
Примечание: Если элемент не является гибким элементом, свойство flex-shrink
не имеет эффекта.
Значение по умолчанию: | 1 |
---|---|
Inherited: | no |
Animatable: | yes. Читайте о animatable |
Version: | CSS3 |
Синтаксис JavaScript: | object.style.flexShrink=»5″ |
Поддержка браузера
Номера в таблице указывают первую версию браузера, которая полностью поддерживает свойство.
Номера followed by -webkit- or -moz- Укажат первую версию, которая работала с префиксом.
Свойство | |||||
---|---|---|---|---|---|
flex-shrink | 29.0 21.0 -webkit- | 11.0 | 28.0 18.0 -moz- | 9.0 6.1 -webkit- | 17.0 |
Синтаксис CSS
flex-shrink: number|initial|inherit;
Значения свойств
Значение | Описание | |
---|---|---|
number | Число, указывающее, сколько будет уменьшаться номенклатура относительно остальных гибких элементов. | |
initial | Присваивает этому свойству значение по умолчанию. (Читайте о initial) | |
inherit | Наследует это свойство из родительского элемента. (Читайте о inherit) |
Похожие страницы
CSS Справочник: CSS Flexible Box
CSS Справка: flex Свойство
CSS Справка: flex-basis Свойство
CSS Справка: flex-direction Свойство
CSS Справка: flex-flow Свойство
CSS Справка: flex-grow Свойство
CSS Справка: flex-wrap Свойство
HTML DOM Справочник: flexShrink Свойство
❮ Назад Полный CSS Справочник Дальше ❯
Популярное CSS
css текст
блоки css
css картинки
как сделать css
цвета css
шрифты css
css стили
елементы css
фон css
кнопки css
таблица css
размер css
ссылки css
изображение css
выравнивание css
внешние отступы css
внутренние отступы css
списки css
css ширина
css при наведении
css формы
Copyright 2018-2020 HTML5CSS. ru
Правила и Условия Политика конфиденциальности О нас Контакты
Свойство CSS flex-shrink
❮ Назад Полное руководство по CSS Далее ❯
Пример
Пусть второй flex-элемент уменьшится в три раза больше, чем остальные:
div:nth-of-type(2) {
flex-shrink: 3;
}
Определение и использование
Свойство flex-shrink
указывает, как элемент будет сжиматься относительно остальных
гибких элементов внутри одного контейнера.
Примечание: Если элемент не является гибким, свойство flex-shrink
не действует.
Значение по умолчанию: | 1 |
---|---|
Унаследовано: | нет |
Анимация: | да. Читать о анимированном Попробуй |
Версия: | CSS3 |
Синтаксис JavaScript: | объект . style.flexShrink=»5″ Попробуй |
Поддержка браузера
Числа в таблице указывают первую версию браузера, которая полностью поддерживает это свойство.
Числа, за которыми следует -webkit- или -moz-, указывают первую версию, которая работала с префиксом.
Собственность | |||||
---|---|---|---|---|---|
гибкий термоусадочный | 29,0 21,0 -вебкит- | 11,0 | 28,0 18,0 -моз- | 9.0 6.1 -вебкит- | 17,0 |
Синтаксис CSS
flex-shrink: number |initial|inherit;
Значения свойств
Значение | Описание | Играй |
---|---|---|
номер | Число, указывающее, насколько элемент будет уменьшаться по сравнению с остальными гибкими элементами. Значение по умолчанию 1 | Играй » |
начальный | Устанавливает для этого свойства значение по умолчанию. Читать про начальный | Играй » |
унаследовать | Наследует это свойство от родительского элемента. Читать о |
Связанные страницы
Учебник по CSS: CSS Flexible Box
Справочник по CSS: свойство flex
Справочник CSS: свойство flex-basis
Справочник CSS: свойство flex-direction
Справочник CSS: свойство flex-flow
Справочник CSS: свойство flex-grow
Справочник CSS: свойство flex-wrap : свойство flexShrink
❮ Предыдущий Полное руководство по CSS Далее ❯
НАБОР ЦВЕТА
Лучшие учебники
Учебное пособие по HTMLУчебное пособие по CSS
Учебное пособие по JavaScript
Учебное пособие
Учебник по SQL
Учебник по Python
Учебник по W3.
Учебник по Bootstrap
Учебник по PHP
Учебник по Java
Учебник по C++
Учебник по jQuery
Лучшие ссылки
HTML ReferenceCSS Reference
JavaScript Reference
SQL Reference
Python Reference
W3.CSS Reference
Bootstrap Reference
PHP Reference
HTML Colors
Java Reference
Angular Reference
jQuery Reference
901 75 лучших примеров Примеры HTML
Примеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3.CSS
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery
ФОРУМ | О
W3Schools оптимизирован для обучения и обучения. Примеры могут быть упрощены для улучшения чтения и обучения. Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания. Используя W3Schools, вы соглашаетесь прочитать и принять наши условия использования, куки-файлы и политика конфиденциальности. Copyright 1999-2023 Refsnes Data. Все права защищены.
Свойство flexShrink в стиле HTML DOM
❮ Предыдущий ❮ Справочник по объектам стиля Далее ❯
Пример
Пусть синий элемент DIV уменьшится в пять раз больше, чем остальные гибкие элементы:
document.getElementById(«myBlueDiv»).style.flexShrink = «5»;
Попробуйте сами »Описание
Свойство flexShrink указывает, как элемент будет уменьшаться относительно остальных гибких элементов внутри одного контейнера.
Примечание: Если элемент не является гибким, свойство flexShrink не действует.
Поддержка браузера
Свойство | |||||
---|---|---|---|---|---|
flexShrink | Да | 11,0 | Да | 9,0 | Да |
Синтаксис
Вернуть свойство flexShrink:
object . style.flexShrink
Установить свойство flexShrink:
object .style.flexShrink = «number |initial|inherit»
Значения свойств 9 0017
Значение | Описание |
---|---|
номер | Число, указывающее, насколько элемент будет уменьшаться по сравнению с остальными гибкими элементами. Значение по умолчанию: 0 | .
начальный | Устанавливает для этого свойства значение по умолчанию. Читать про начальный |
унаследовать | Наследует это свойство от родительского элемента. Читать о унаследовать |
Технические детали
Значение по умолчанию: | 1 |
---|---|
Возвращаемое значение: | Строка, представляющая свойство flex-shrink элемента |
Версия CSS | CSS3 |
Связанные страницы
Ссылка CSS: свойство flex-shrink
Ссылка на СТИЛЬ HTML DOM: свойство flex
Ссылка на СТИЛЬ HTML DOM: свойство flexBasis свойство
СТИЛЬ HTML DOM Ссылка: flexFlow property
HTML DOM STYLE Ссылка: свойство flexGrow
HTML DOM STYLE Reference: свойство flexWrap
❮ Previous ❮ Справочник по объектам стиля Далее ❯
НАБОР ЦВЕТА
Лучшие учебники
Учебник HTMLУчебник CSS
Учебник JavaScript
How To Tutorial
Учебник SQL
Учебник Python
Учебник W3.
Учебник Bootstrap
Учебник PHP
Учебник Java
Учебник C++
Учебник jQuery
9000 3
Основные каталожные номера
Справочник по HTMLСправочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3.CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery
Основные примеры
Примеры HTMLПримеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3.CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery
ФОРУМ | О
W3Schools оптимизирован для обучения и обучения. Примеры могут быть упрощены для улучшения чтения и обучения. Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания.