Чтобы добиться желаемого поведения элементов внутри флекс-контейнера, вам нужно использовать комбинацию свойств CSS, таких как `flex` и `flex-grow`, а также правильно настроить ширину и поведение элементов при обертывании. Вот как вы можете это сделать:
### HTML структура
```html
<div class="container">
<button class="button">Кнопка</button>
<input type="text" class="input" placeholder="Поле ввода">
</div>
```
### CSS стили
```css
.container {
display: flex;
flex-wrap: wrap; /* Позволяет элементам оборачиваться, если недостаточно места */
}
.button {
flex: 0 1 auto; /* Кнопка занимает столько места, сколько нужно для контента */
/* Или просто flex: none; */
}
.input {
flex: 1 1 auto; /* Поле заполняет оставшееся пространство */
}
@media (max-width: 500px) {
.button {
flex: 1 1 auto; /* При ширине меньше 500px кнопка растет */
}
.input {
flex: 1 1 auto; /* Поле ввода также растет */
}
}
```
### Объяснение:
1. **`flex: 0 1 auto` для кнопки**: Это означает, что кнопка будет занимать ширину, соответствующую её контенту (первый `0` говорит о том, что она не будет расти), но при этом она позволит уменьшаться до размера контента. Вы можете также использовать `flex: none`.
2. **`flex: 1 1 auto` для поля ввода**: Это означает, что поле ввода будет занимать всё оставшееся пространство (первый `1` говорит о том, что оно может расти, второй `1` позволяет уменьшаться).
3. **Медиа-запросы**: Когда ширина окна становится меньше 500px, оба элемента (кнопка и поле) будут расти, чтобы занять всё доступное пространство (изменяя `flex` и убирая значение `none` у кнопки).
Таким образом, вы получите желаемое поведение без необходимости использования больших значений `flex-grow`, что делает код более оптимальным и понятным.