我正在尝试做一些不同于大多数'resize'textarea插件的事情。我不是要尝试调整实际的textarea,而是调整textarea中的字体大小,以便所有文本都适合。
我基本上想要一个textarea的'自动'字体大小。问题在于字体需要两种不同的方式才能变得“更小”:
我已经看过一些我修改过的插件实例,它们创建了一个克隆的textarea或div,它们具有相同的样式,您可以尝试测量新的“高度”并根据此计算字体大小,但它似乎总是在Safari和Chrome中失败,所以我猜测逻辑有点缺陷。
有没有人在此之前完成此操作或知道插件已经完成?
答案 0 :(得分:5)
试试这个它应该有效,但我不确定性能:
<强> HTML 强>
<textarea></textarea>
<强> CSS 强>
textarea {
height: 100px;
width: 200px;
resize: none;
font-size: 18px;
overflow-y: hidden;
}
<强>的jQuery 强>
$('textarea').keypress(function(){
if ( $(this).get(0).scrollHeight > $(this).height() ) {
$(this).css('font-size', '-=1');
}
});
示例强>
答案 1 :(得分:1)
您可以将textarea
与div
一起使用,而不是使用contenteditable="true"
。
此解决方案适用于删除文字和增加字体大小。
<强> HTML 强>
<div class="border" id="border">
<div class="block" id="input" contenteditable="true">Click to edit</div>
</div>
<强> CSS 强>
.block {
width:400px;
font-size:25px;
font-family:'Helvetica';
}
.block:focus {
outline: none;
}
.border {
border: 1px solid #000;
width:400px;
height: 200px;
padding: 5px;
cursor:text;
}
<强>的jQuery 强>
$('#border').click(function(){
$('#input').focus();
});
$('#input').keyup(function(event){
while ( $(this).height() > 200) {
$(this).css('font-size', '-=1');
}
if (event.keyCode == 8 || event.keyCode == 46) {
while ( $(this).height() <= 200 && $(this).css('font-size') <= "25px") {
$(this).css('font-size', '+=1');
}
$(this).css('font-size', '-=1');
}
});
示例强>