指引网

当前位置: 主页 > 网页制作 > HTML >

网页中输入框高度自适应的5个解决方法

来源:网络 作者:佚名 点击: 时间:2017-07-06 20:58
[摘要]  本文我们分享几在web中输入框高度自适应内容的几个方法,这些方法有纯css实现,有js+css实现,纯javascript,还有jQuery框架的实现方法,大家喜欢哪个就可以用哪个。

一.div模拟textarea以实现高度自适应

CSS代码:

.test_box {
    width: 400px;
    min-height: 120px;
    max-height: 300px;
    _height: 120px;
    margin-left: auto;
    margin-right: auto;
    padding: 3px;
    outline: 0;
    border: 1px solid #a0b3d6;
    font-size: 12px;
    word-wrap: break-word;
    overflow-x: hidden;
    overflow-y: auto;
    -webkit-user-modify: read-write-plaintext-only;
}

HTML代码:




JS代码:

if (typeof document.webkitHidden == "undefined") {
    // 非chrome浏览器阻止粘贴
    box.onpaste = function() {
        return false;
    }
}


注意事项:

1.焦点:outline:0;

2.清除p标签的margin值:.test_box p{ margin: 0; }

3.可编辑模式的div标签与textarea一样,是支持focus, blur事件的。自然也支持focus伪类,demo页面中Firefox等现代浏览器获取焦点时的外发光就是使用的:focus。


二.用JS控制来实现:方法一




三.用JS控制来实现:方法二




autoresizing textarea










输入框自适应高度的纯css及jQuery共2种解决方案

 在实际应用中,有时会因页面布局位置及数据量原因,表单的输入框()会出现显示不全内容的情况。例如输入框定义了10个字符宽度,但里面的文本却有30个字,那么超出部分就会被挡住,需要光标后移才看到。


html页面代码为:





第一种思路是改变输入框的高度,首先要把input换成textarea,通过焦点的focus和blur来触发JS,改变输入框的高度rows值。

html代码为:
jQuery代码为:
$("textarea:[name='note']").focus(function(){
$(this).attr("rows","5");
})
$("textarea:[name='note']").blur(function(){
$(this).attr("rows","1");
})

当然也可以用mouseenter等事件进行触发,看具体情况而定,以达到更好的用户体验。
缺点是高度固定,不管内容长或短,高度都不变。


第二种思路是用纯CSS,靠样式定义来实现,当内容超出可视范围时div会自动变高,就是实现了自适应高度,有很好的用户体验和灵活性。


html代码为:



CSS为:

.adaptive_box { text-align:left; line-height:16px; font-size: 12px; border: 1px solid #ccc; padding: 0px; background:#fff;
width: 100px; min-height: 16px; max-height: 300px; _height: 16px;
margin-left: auto; margin-right: auto; outline: 0; word-wrap: break-word;overflow-x: hidden;overflow-y: visible;
}

原理很简单,就是靠overflow-y: visible;来实现自适应。
不过这输入框变为div,就不是表单元素了。我们要多做一些工作,在提交表单时增加JS(jQuery)对其进行处理,例如:

var note=$(".adaptive_box").html();
或var note=$("div[name='note']").html();

然后再把这值作为表单一个项来提交,可以整个表单就是通过jQuery的ajax提交,也可以另外做个隐藏的input,表单提交时为其赋值为note的值即可。

------分隔线----------------------------