Смотрите, вы пишете:
я хочу, чтобы внутренний элемент занимал половину ширины блока, но сам блок по ширине равнялся внутреннему.
Это бред.
Нужно определиться кто от кого должен брать размеры.
Инпут от родителя или родитель от инпута.
Если вы зададите размер инпуту в px, то родитель будет ровно как инпут (при ваших остальных стилях).
Либо наоборот, разберитесь с шириной родителя, а инпуту задавайте 100%.
Тогда они будут равны.