我希望使文本区域的高度与其内文本的高度相等(并删除滚动条)。
HTML
<textarea id="note">SOME TEXT</textarea>CSS
textarea#note {
width:100%;
direction:rtl;
display:block;
max-width:100%;
line-height:1.5;
padding:15px 15px 30px;
border-radius:3px;
border:1px solid #F7E98D;
font:13px Tahoma, cursive;
transition:box-shadow 0.5s ease;
box-shadow:0 4px 6px rgba(0,0,0,0.1);
font-smoothing:subpixel-antialiased;
background:linear-gradient(#F9EFAF, #F7E98D);
background:-o-linear-gradient(#F9EFAF, #F7E98D);
background:-ms-linear-gradient(#F9EFAF, #F7E98D);
background:-moz-linear-gradient(#F9EFAF, #F7E98D);
background:-webkit-linear-gradient(#F9EFAF, #F7E98D);
}JsFiddle:http://jsfiddle.net/Tw9Rj/
发布于 2014-07-10 12:23:52
这使用纯JavaScript代码。
function auto_grow(element) {
element.style.height = "5px";
element.style.height = (element.scrollHeight)+"px";
}textarea {
resize: none;
overflow: hidden;
min-height: 50px;
max-height: 100px;
}<textarea oninput="auto_grow(this)"></textarea>
发布于 2014-06-06 21:16:06
对于那些用角JS来完成这个任务的人,我使用了一个指令
HTML:
<textarea elastic ng-model="someProperty"></textarea>JS:
.directive('elastic', [
'$timeout',
function($timeout) {
return {
restrict: 'A',
link: function($scope, element) {
$scope.initialHeight = $scope.initialHeight || element[0].style.height;
var resize = function() {
element[0].style.height = $scope.initialHeight;
element[0].style.height = "" + element[0].scrollHeight + "px";
};
element.on("input change", resize);
$timeout(resize, 0);
}
};
}
]);$timeout将在DOM加载后触发的事件排队,这是获得正确scrollHeight所必需的(否则将得到undefined)
发布于 2014-04-09 21:06:06
我用的是jQuery AutoSize。当我尝试使用弹性,它经常给我虚假的高度(非常高的文本区)。jQuery AutoSize工作得很好,没有遇到过这个问题。
https://stackoverflow.com/questions/17772260
复制相似问题