方法一:css实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#textarea {
width: 100px;
min-height: 20px;
outline: 0;
border: 1px solid #397EFF;
font-size: 13px;
overflow-x: hidden;
overflow-y: auto;
-webkit-user-modify: read-write-plaintext-only;
}
[contentEditable=true]:empty:not(:focus):before {
content: attr(data-text);
}
</style>
</head>
<body>
<div id="textarea" contenteditable="true" data-text="输入内容..."></div>
</body>
</html>
方法二:js实现
<!DOCTYPE html>
<html lang="en">
<head>
<title>demo1</title>
<style>
textarea {
width: 200px;
min-height: 100px;
padding: 0;
}
</style>
</head>
<body>
<textarea placeholder="input..."></textarea>
</body>
<script>
var textarea = document.querySelector('textarea');
textarea.addEventListener('input', (e) => {
textarea.style.height = '100px';
textarea.style.height = e.target.scrollHeight + 'px';
});
</script>
</html>
注意点:
由于textarea默认是有padding 的,所以在设置文本框高度的时候要减去padding*2
需要在每次设置scrollHeight之前,设置一次文本框的初始高度textarea.style.height = '100px';,这样在文本内容减少的时候,文本框的高度才会减少。