@sarcus
Учусь

Почему flex-контейнер с input элементами расширяет границы основного блока?

Основной блок содержит 2 блока
1-й с некоторым текстом
2-й flex блок с input элементами

2-й блок как будто не видит ширины основного блока, которую задает 1-й блок (sometext)
и расширяет основной.

Подскажите как решить данную проблему ?

Пример : https://jsfiddle.net/sarcus/1vmaf3wo/14/
<style>
.cont { 
            position: absolute;
            top : 200px; left: 30px;
            border: 1px solid #ccc;
        }
        .ctrl {  
            display: flex; 
            width: 100%;
            flex-direction: row;
            border: 1px solid#ccc; 
        }
        .btn { 
            flex: 0 0 auto;
            
        }
        .inp {
            flex: 1 1 auto;
            width: 100%;
        }
</style>
<div class="cont">
            <div class="sometext">555 5555 5555 5555 5556</div>
            <div class="ctrl">
                    <input type="button" class="btn"  value="<<" />
                    <input class="inp" type="text" />
                    <input type="button" class="btn" value=">>" />
            </div>
            
        </div>
  • Вопрос задан
  • 1554 просмотра
Решения вопроса 1
delphinpro
@delphinpro Куратор тега CSS
frontend developer
У инпута есть своя дефолтная ширина.

2-й блок как будто не видит ширины основного блока, которую задает 1-й блок (sometext)


А вот почему вы решили, что именно первый блок должен задавать ширину?
Второй блок имеет на это ровно такое же право. И он этим пользуется.

Исходя из того, что инпут имеет дефолтно заданную ширину (в инспекторе не видно, не ищите), мы можем тупо обнулить ее:

.inp {
  flex: 1 1 auto;
  width: 0;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@historydev
Острая аллергия на анимешников
У вас кнопки стоят по бокам input, а как он может быть 100% ширины если часть этих 100% уже забрали кнопки?
Ответ написан
Комментировать
@sarcus Автор вопроса
Учусь
Но если вместо input (class='inp') вставить div то все приходит в норму:
https://jsfiddle.net/1vmaf3wo/83/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы