Если позволяет браузерная поддержка то на флексах проще всего.
например
<label><span>текст</span><input></label>
label {display:flex;}
span {flex: 0 0 auto;}/*не меняет размеров*/
input {flex: 1 1 auto}/*занимает все оставшееся пространство и сжимается*/