Итак, давайте начнем с этого, когда вы используете flexbox, каждый дочерний элемент будет иметь 3 различных элемента:
flex-based
flex-grow
flex-shrink
Где каждый из них несет различную ответственность.
flex- основа
Flex-основа контролирует размер элемента по умолчанию, прежде чем он будет обрабатываться другими свойствами Flexbox. Его можно использовать как свойство ширины или высоты. Давайте посмотрим на приведенный ниже пример:
.flexbox {
display: flex;
}
.red {
background: red;
flex-basis: 100px;
}
.green {
background: green;
flex-basis: 100px;
}
.blue {
background: blue;
flex-basis: 100px;
}
<div class="flexbox">
<div class="red">1</div>
<div class="green">2</div>
<div class="blue">3</div>
</div>
flex-grow
Теперь, когда речь заходит о свойстве flex-grow, по умолчанию используется 0 Это означает, что квадраты не могут расти, чтобы занять место в контейнере. Вы можете увидеть пример ниже для большего разрешения:
.flexbox {
display: flex;
}
.red {
background: red;
flex-grow: 0;
}
.green {
background: green;
flex-grow: 0;
}
.blue {
background: blue;
flex-grow: 0;
}
<div class="flexbox">
<div class="red">1</div>
<div class="green">2</div>
<div class="blue">3</div>
</div>
В чем здесь разница, давайте попробуем увеличить flex-grow до 1 для каждого квадрата:
.flexbox {
display: flex;
}
.red {
background: red;
flex-grow: 1;
}
.green {
background: green;
flex-grow: 1;
}
.blue {
background: blue;
flex-grow: 1;
}
<div class="flexbox">
<div class="red">1</div>
<div class="green">2</div>
<div class="blue">3</div>
</div>
flex-shrink
Flex-shrink является противоположностью flex-grow, определяя, насколько квадрат разрешено сокращаться. Основное назначение - указать, какие элементы вы хотите уменьшить, а какие нет. По умолчанию каждый квадрат имеет значение flex-shrink, равное 1. Чтобы увидеть, как работает сжатие, см. Следующий фрагмент:
.flexbox {
display: flex;
}
.red {
background: red;
flex-grow: 0;
flex-basis: 100px;
flex-shrink: 1;
}
.green {
background: green;
flex-grow: 0;
flex-basis: 100px;
flex-shrink: 0;
}
.blue {
background: blue;
}
<div class="flexbox">
<div class="red">1</div>
<div class="green">2</div>
<div class="blue">3</div>
</div>
ПРИМЕЧАНИЕ: Вы должны изменить размер браузера, чтобы увидеть разницу в приведенных выше квадратах.
Фактический ответ
Итак, ваша проблема заключается здесь в свойстве flex-shrink
, поэтому значение по умолчанию flex-shrink
равно 1, поэтому оно будет выглядеть так:
#desktop_sidemenu {
width: 200px;
flex-shrink: 1; /* default setting of browser */
}
Так вот почему свойство width
само по себе не делает работу за вас, что означает, что ваш первый div будет сокращен, чтобы не допустить выхода из строя ящиков, тогда все, что вам нужно сделать, чтобы заставить его работать, это дать это min-width: 200px
или flex-shrink: 0
.
ПРИМЕЧАНИЕ: есть сокращение для этих трех свойств, называемое flex
, которое можно присвоить этим трем свойствам как одно в следующем порядке:
flex: 0 0 200px; /* flex-grow flex-shrink flex-basis */
Для получения дополнительной информации об этих видах вещей, вы можете следовать MDN здесь .