首页 > 编程知识 正文

网页自适应怎么做(css高度根据内容自适应)

时间:2023-05-06 02:28:43 阅读:91512 作者:4126

需求

实现高度随着输入文字的增加而自动变高的输入框。 微信输入为空时,显示placeholder文字数限制maxlength方法1。 使用textarea工具函数autosize实现高度自适应的输入框。 具体代码如下。

! 文档类型html

html朗='恩'

头部

meta charset='UTF-8 '

标题文档/标题

样式类型='文本/CSS '

* {

margin: 0;

填充: 0;

}

textarea {

resize :无;

}

/样式

/head

脚本类型='文本/JavaScript ' SRC=' JS/Autosize.Min.JS ' /脚本

主体

请输入textarea id=' textarea ' rows='1' placeholder='的内容. ' maxlength='50'/textarea

/body

脚本类型='文本/Javascript '

授权(文档.查询选择器(' # textarea ' );

/脚本

/html

注:由于textarea的默认高度为rows=2,因此必须将textarea的rows设置为1

方法2:div加属性内容编辑=true

我们知道,可以将div的contenteditable设置为伪true,使其处于可输入状态。 代码如下所示。

div内容编辑=' true '/div

这样满足了我们最初的需求——高度适应。 但是,用手机测试后发现了第一个问题,无法在iOS上输入。 检索资料时,只添加以下样式就知道是:

div {2}

用户选择:文本;

- WebKit -用户选择:文本;

}

实现放大器

利用css js实现播放器。 思路:通过根据输入动态添加class来模拟placeholder的行为。 代码为以下的:

//css

. textarea {

width: 400px;

最小高度: 20px;

最大高度: 300 px;

_height: 120px;

左:自动;

边缘光:自动;

填充: 3px;

轮廓线:0;

订单: 1px固态# a0b3d 6;

字体大小: 12px;

线高度: 24px;

填充: 2px;

魔兽世界:中断世界;

溢流- x :隐藏区;

溢流- y :自动;

酷睿3: RGBA (82,168,236,0.8 );

box-shadow 3360 inset 01 px3px rgba (0、0、0.1、0 )8pxrgba ) 82、168、236、0.6 );

位置:相对关系;

用户选择:文本;

- WebKit -用户选择:文本;

}

. placeholder:before {

请输入内容: '的内容. ';

线高度: 30px;

位置:绝对;

left: 5px;

top: 0;

z -索引: 1;

}

//html

divclass=' textarea放置器'内容编辑=' true ' data -放置器='请输入内容. ' data-length=' 10 '

//js

varo inputbox=文档.查询选择器('.textarea );

onputbox.on input=oinputbox.onpropertychange=函数{

varinnterstr=oinputbox.innertext;

var _this=this;

//放置保持器

if(Innterstr.Length==0) {

_ this.class list.add (放置器);

} else {

_ this.class list.remove (放置保持器);

}

(;

这样,第二个需求——就实现了。 可以设置placeholder

实现maxlength

同样,通过直接设置maxlength无法满足需要。 所以,拦截input事件并实时计算长度。

varo inputbox=文档.查询选择器('.textarea );

onputbox.on input=oinputbox.onpropertychange=函数{

varinnterstr=oinputbox.innertext;

var _this=this;

//maxlength

varlen=parseint (_ this.getattribute (数据长度);

if (interstr .长度指示灯) {

onputbox.innertext=interstr.substring (0,len );

}

(;

上面的代码看起来没问题,但是光标放在最前面,您会发现用户体验会变差,或者出现错误。 因此,在剪切最大长度的用户输入后,必须将光标放在最后。 完整的JS代码如下。

varo inputbox=文档.查询选择器('.textarea );

onputbox.on input=oinputbox.onpropertychange=函数{

varinnterstr=oinputbox.innertext;

var _this=this;

//放置保持器

if(Innterstr.Length==0) {

_ this.class list.add (放置器);

} else {

_ this.class list.remove (放置保持器);

}

//maxlength

varlen=parseint (_ this.getattribute (数据长度);

if (interstr .长度指示灯) {

onputbox.innertext=interstr.substring (0,len );

}

//div innerText重新赋值后的光标问题

if (导航器.用户代理.索引为(' msie ' )-1 ) )。

var范围=文档. selection.create范围(;

_ this.last=范围;

range.movetoelementtext(_this;

range.select (;

document.selection.empty (; //取消勾选

} else {

var范围=文档.创建范围(;

range.selectnodecontents(_this;

range.collapse (假;

var sel=window.getSelection (;

移除所有范围(;

添加范围(范围;

}

(;

现在,您可以自动增加高度,并完成了支持placeholder和maxlength的输入框。

要点总结:

方法1:autosizejs方法拦截textarea的input、keyup事件动态获取其scrollHeight,计算实际高度并根据overflow属性的变更动态改变textarea的高度。 使用该方法时需要注意的是将textarea的rows属性设定在1、2行以内兼容性: IE9方法2:div将contentEditable设定为true后,输入或删除内容时,其高度本身会根据内容的变化而变化, 要解决的问题只有光标在输入中的位置。 兼容性: IE11和其他高级浏览器

希望本文能帮助到您!

点赞被传送,让更多的人可以看到这个内容()集合不点赞,而是耍赖-_-) ) )。

关注{我},享受文章的最初体验!

每周重点克服一个前端技术难点。 私信更多精彩的前端内容并回复“教程”

原文链接: http://eux.baidu.com/blog/fe/实现高度适应的输入框

作者:幸福的心型摇滚

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。