JSFiddle - React, Tailwind, and code Playground
by Gerald Fullam
HTML
<div class="expandingTextarea">
<pre><span></span><br /></pre>
<textarea placeholder="Type as much as you like."></textarea>
</div>
CSS
body {
margin: 20px;
}
textarea,
pre {
margin: 0;
padding: 0;
border: 0;
outline: 0;
}
.expandingTextarea {
position: relative;
border: 1px solid #888;
background: #fff;
}
.expandingTextarea>textarea,
.expandingTextarea>pre {
padding: 5px;
font: 400 13px/16px helvetica, arial, sans-serif;
white-space: pre-wrap;
word-wrap: break-word;
background: transparent;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
.expandingTextarea>textarea {
position: absolute;
top: 0;
left: 0;
overflow: hidden;
width: 100%;
height: 100%;
resize: none;
}
.expandingTextarea>pre {
display: block;
visibility: hidden;
}
JavaScript
var $textarea = $('.expandingTextarea>textarea'),
$mirror = $('.expandingTextarea>pre>span');
$textarea.on('input propertychange', function () {
$mirror.html($(this).val());
});