Petr Gazarov published a pretty rad little design pattern in his article Text input highlight, TripAdvisor style.
It's a trick! You can't really make an
<input /> stretch like that, so Petr makes a
<span></span> to sync the value too, which acts as the border itself. The whole thing is a React component.
If you're willing to use a
<span contenteditable></span> instead, you could do the whole thing in CSS!