JSFiddle - React, Tailwind, and code Playground

HTML

<form action="" method="">
    <p>
        <input name="title" type="text" maxlength="256" value="daniel">
        <input name="description" type="text" maxlength="512" value="awesome">
    </p>
</form>

CSS

input {
    display:block;
    font: normal 12px Helvetica, sans-serif;
}

.input-test {
    display: inline;
    font: normal 12px Helvetica, sans-serif;
    position: absolute;
    left: -9999px;
}

JavaScript

var autoResize = {
    minWidth: 30,
    maxWidth: 400,
    buffer: 10,
    
    resize: function(el) {
        var test = document.createElement('pre');
        test.className = 'input-test';
        test.innerHTML = el.value;
        el.parentNode.appendChild(test);
        el.style.width = Math.min(Math.max(test.offsetWidth + this.buffer, this.minWidth), this.maxWidth) + 'px';
        el.parentNode.removeChild(test);
    },
    
    init: function() {
        var els = document.getElementsByTagName('input'),
            i = els.length;
        
        while (i--) {
            els[i].addEventListener('keydown', function() {
                autoResize.resize(this);
            }, false);
            
            els[i].addEventListener('keyup', function() {
                autoResize.resize(this);
            }, false);
            
            this.resize(els[i]);
        }
    }
};

autoResize.init();