使用div模拟自适应高度的textarea

1,203 阅读1分钟

textarea文本域及自适应高度

textarea文本域用来做多行输入,大部分情况下都能吗,满足我们的需求,但是textarea不能想div元素那样随着内容的增多高度自适应,而固定高度又会宣示出滚动条,在移动端这样的显示很丑。

div模拟textarea文本域及高度自适应

可以使用div 的contentEditable属性,使用户能够编辑元素的内容。而div又能自适应高度,这样就解决了textarea的不足

<!-- react -->
<div 
    contentEditable={true}
    className="text-box" 
    ref={(ref)=>{ this.textEdit = ref }}>
    同意。
</div>

这时在div中输入的文本包含div,br等dom元素,可以使用css属性 -webkit-user-modify 设置用来控制用户能否对页面文本进行编辑

属性值 描述
read-only 内容只读
read-write 内容可读写,富文本
read-write-plaintext-only 内容可读写,但粘贴内容中的富文本格式(如文本的颜色、大小,图片等)会丢失。内容类似于以纯文本显示

React直接使用contentEditable问报错,需如下使用:

    componentDidMount () {
        this.textEdit.setAttribute('contentEditable', true)
    }

    render() {
        return (
            <div>
                <div 
                    className="text-box" ref={(ref)=>{
                        this.textEdit = ref
                    }}>
                        同意。
                    </div>
            </div>
        )
    }