Как установить ширину input в зависимости от количества свободного места

255
19 марта 2017, 03:23

Есть контейнер:

<div style="width:100%">
 <div style="float:left; margin-right:10px;">Текст разной длины</div>
 <input style="float:left;"/>
</div>

Мне необходимо установить ширину input по такой формуле: 100% - ширину левого блока - 10пикс. отступ. Так как ширина левого блока всегда разная в зависимости от текста, я не понимаю, как можно отследить ширину.

П.С. ясное дело что можно с помощью js, но меня этот вариант не устроит. Интересует решение на чистом css.

Answer 1

.divMain:after { 
  content: ''; 
  display: block; 
  clear: both; 
} 
.divA { 
  float: left; 
  width: 240px; 
  background: #000; 
  color: #fff; 
} 
.divB { 
  overflow: hidden; 
} 
.divB input { 
  width: 100%; 
 
  /* Reset CSS */ 
  box-sizing: border-box; 
  margin: 0; 
  /* End Reset CSS */ 
}
<div class="divMain"> 
  <div class="divA"> 
    Какой-то важный контент. 
  </div> 
  <div class="divB"> 
    <input type="text" placeholder=""> 
  </div> 
</div>

.divA не должен быть пустым, а если предполагается, что он может не иметь контента - дополните его свойством min-height: 1;

Answer 2

.divMain { 
  display: flex; 
} 
.divA { 
  background: #000; 
  color: #fff; 
} 
.divB { 
  flex: 1; 
} 
.divB input { 
  width: 100%; 
}
<div class="divMain"> 
  <div class="divA"> 
    Какой-то важный контент. 
  </div> 
  <div class="divB"> 
    <input type="text" placeholder=""> 
  </div> 
</div>

Answer 3

Можно использовать flex(Вводите HTML в поля ввода):

document.querySelectorAll('.row>.field') 
  .forEach(el => 
    el.addEventListener('keyup', e => e.target.parentNode.querySelector('label').innerHTML = e.target.value));
.row{ 
  display: flex; 
 
  border: 2px solid lightblue; 
  padding: 2px; 
} 
.row>label {  
  display: block; 
  flex: auto; 
  margin-right:10px; 
  white-space: nowrap; 
} 
.row>.field{     
  width: 100%;         
}
<div class="row"> 
 <label>Текст1</label> 
 <input type="text" class="field" value="Текст1" /> 
</div> 
 
<div class="row"> 
 <label>Многострочный текст<hr/> 
разной длины</label> 
 <textarea class="field">Многострочный текст<hr/> 
разной длины</textarea> 
</div>

READ ALSO
Мульти-размерная иконка в проекте

Мульти-размерная иконка в проекте

Есть иконка (файлico), с мульти-размерностью

273
Пытаюсь соединиться в Google Drive

Пытаюсь соединиться в Google Drive

Создал Google Drive открыл папку для общего пользованияСоздал ключ клиента вот тут подгрузил нужные библиотеки

265
Запись значении нескольких combobox в файл

Запись значении нескольких combobox в файл

Добрый деньПробую написать программу, которая бы сохраняла данные из двух combobox и одного textbox в один файл

380
C# таблица EXCEL добавить данные с html

C# таблица EXCEL добавить данные с html

Добрый день дорогие друзья! Есть задачка не большой сложности, хотелось бы реализовать красиво) Хочу узнать, сталкивался ли кто нибудь с подобным...

338