微信小程序开发-textarea高度问题

本文介绍了一种解决微信小程序中textarea组件内容超出显示区域的方法,通过调整样式和使用wx.createSelectorQuery()接口动态设置高度。

正在做一个记事本的小程序

记事自然少不了textarea组件

编辑页面我的设计是上面一行标题栏,下面一行按钮操作区,中间就是textarea填充剩余空间

效果如下图

使用flex布局很容易就做到上述效果,一个container包含一个竖直排列的三个view

中间的view放textarea

<!--index.wxml-->
<form  bindsubmit="onSubmit" bindreset="">
<view class="container">
    <view class='title'>
        <input name="title" placeholder-class="placeholder" placeholder="在此输入标题" value="{{note.title}}" />
    </view>
    <view class='row' id="textareawrap" catchtap="onFocus">
        <textarea  fixed="true" class='text' value="{{note.content}}" maxlength="5000"  
        focus='{{focus}}' name="content"   placeholder="点击添加文本"   />
    </view>
    
    
    <view class='bottom'>
         <button formType="submit" class='btn success'>保存</button>
        <button class='btn del' bindtap="onDelete">删除</button>
    </view>
</view>
</form>

再来看wxss

page{
    width: 100%;
    height: 100%;
}
.container{
    flex-flow:column nowrap;
    justify-content: center;
    align-items: center;
    width: 100%;
    height: 100%;
    background-color: #ffffff;
    display: flex;
}
.title{
    margin: 15rpx 5%;
    width: 90%;
    text-align: left;
    height: 60rpx;
    font-size: 38rpx;
    border-bottom: 1px solid #f5f5f5;
}
.row{
    flex: 1;
    display: flex;
    width: 90%;
    height:100%;
    margin: 0 5%;
    overflow: hidden;
    
}
.row .text{
    flex: 1;
    width: 100%;
    height: 100%;//<----这里是重点,textarea的高度
    font-size: 16px;
    line-height: 26px;
    color: #000000;    
}
.date{
    padding: 5rpx 0;
}
.bottom{
    width: 100%;
    background: #fafafa;
    display: flex;
    flex-flow:row nowrap;
    justify-content: center;
    align-items: center;
    border-top:1px solid #d9d9d9;
}
.bottom .btn{
    flex: 1;
    line-height: 2;
    padding-top: 10rpx;
    padding-bottom: 10rpx;
    margin: 30rpx 30rpx;
}
.btn.success{
    background: #1aad19;
    color: #fff;
}
.btn.del{
    background: #e64340;
    color: #fff;
}

把上面代码写好,在电脑上编译,运行,模拟器里效果完美

但是,但是。。。

在真机上



textarea的内容已经超出了实际区域,而且此时操作“保存”或“删除”按钮也是没有任何作用,被textarea挡住了

查看官方文档 https://developers.weixin.qq.com/miniprogram/dev/component/textarea.html

有这么一句说明

  1. tiptextarea 组件是由客户端创建的原生组件,它的层级是最高的,不能通过 z-index 控制层级。

原来是被渲染成原生组件

上面wxss中定义的height:100%; 不是填充满所在view的空间,而是整个page的空间

所以这里只能给textarea定义固定高度比较 height:300px; 这样修改后内容超出的问题解决了

但这样的效果又不太好,中间的区域留有一大段空白,我们需要动态的设置textarea高度

幸好有 wx.createSelectorQuery()接口

使用这个接口就可以获取中间view的高度,把这个view的高度设置给textarea就可以了

js代码如下

Page({
    data: {
      note: {
        id: "",
        title: "",
        summary: "",
        content: "",
        createTime: "",
        updateTime: "",
        isDelete: 0
        

      },
      isNew: false,
      focus: false,
      height:"" //data里面增加height属性
    },
    
    /**
     * 页面渲染事件
     */
    onShow: function() {
        var that = this;
        
        let id = "#textareawrap";
        let query = wx.createSelectorQuery();//创建查询对象
        query.select(id).boundingClientRect();//获取view的边界及位置信息
        query.exec(function (res) {
          that.setData({
            height: res[0].height + "px"
          });
        });
        
    }
    
    
});

wxml代码修改如下:

<textarea  fixed="true" class='text' value="{{note.content}}" maxlength="5000"  style="height:{{height}}"
        focus='{{focus}}'
        name="content"   placeholder="点击添加文本"   />

在textarea里面增加 style="height:{{height}}" 动态设置高度

结果符合预期


有兴趣的朋友同学可以扫描二维码体验一下这个简单的笔记本,多多支持!



<think>我们正在处理关于微信小程序中使用vant-weapp的van-fieldtextarea组件在安卓手机上右侧出现黑线的问题。根据提供的引用,我们需要分析可能的原因和解决方案。引用[1]主要介绍了如何让textarea的placeholder换行显示,引用[2]提到了在IOS端使用van-fieldtextarea时出现的高度问题,引用[3]展示了一个评论功能的实现,其中使用了input和button。这些引用并没有直接提到安卓手机上右侧黑线的问题,但我们可以根据这些信息以及常见的样式问题进行分析。可能的原因:1.边框或轮廓(border或outline)样式问题:可能是由于组件的边框或轮廓样式设置不当,导致在安卓设备上显示异常。2.滚动条样式:在安卓设备上,textarea的滚动条可能默认显示为黑色,而iOS上可能隐藏或样式不同。3.组件内部样式:vant-weapp组件的van-fieldtextarea可能有特定的样式,在安卓设备上出现兼容性问题。解决方案:1.检查并重置边框样式:尝试通过自定义样式覆盖默认样式,去除可能的多余边框。2.隐藏滚动条或修改滚动条样式:如果黑线是滚动条,可以尝试隐藏滚动条或修改其样式。3.使用官方提供的自定义样式类:根据vant-weapp文档,使用custom-style属性或外部样式类进行样式覆盖。步骤:1.在van-field组件上添加custom-style属性,设置边框为none,或者设置右边框为0。2.如果黑线是滚动条,可以尝试通过CSS隐藏滚动条(但注意这可能影响用户体验)。3.检查是否在特定安卓机型上出现,可能是某些机型的默认样式导致,需要重置该元素的样式。示例代码:在van-field组件上添加custom-style属性,例如:```html<van-fieldvalue="{{value }}"type="textarea"placeholder="请输入"custom-style="border:none;border-right:0;" />```或者通过外部样式类: ```html<van-fieldvalue="{{ value}}"type="textarea"placeholder="请输入"custom-class="my-textarea"/> ```然后在对应的wxss文件中: ```css.my-textarea{border:none !important;border-right:0!important; }```另外,也可以尝试隐藏滚动条:```css.my-textarea ::-webkit-scrollbar {display: none; }```注意:由于不同设备上的浏览器内核差异,可能需要针对安卓设备使用特定的样式。可以使用条件编译或者针对安卓设备的样式调整。如果以上方法无效,还可以尝试使用微信小程序的条件样式,根据操作系统设置不同的样式:```css/*在wxss中*/ /*安卓设备*/ :host(.android) .van-field__input{border-right:0;} ```但是微信小程序并不直接支持:host选择器,我们可以通过JS获取系统信息,然后动态设置class。在页面的js文件中:```javascriptPage({data:{systemInfo: {}},onLoad(){wx.getSystemInfo({success:(res) =>{this.setData({platform: res.platform// 'android'或 'ios'})}})}}) ```然后在wxml中:```html<van-fieldvalue="{{value }}"type="textarea"placeholder="请输入"custom-class="{{platform=== 'android'? 'android-textarea': ''}}"/> ```在wxss中定义: ```css.android-textarea{border-right:0 !important;} ```如果黑线是滚动条,并且只在内容超出时出现,那么可以尝试通过设置不显示滚动条(但注意这可能会让用户无法滚动内容,所以谨慎使用): ```css.android-textarea ::-webkit-scrollbar {width:0 !important;height:0 !important;display: none; }```如果问题仍然存在,可能需要检查是否有其他样式影响,比如父元素的边框、阴影等。由于引用中没有直接提到这个问题,以上解决方案是基于常见问题的推测。如果问题依旧,建议查看vant-weapp的官方issue或者社区中是否有类似问题。最后,生成相关问题:1.微信小程序 van-field textarea在安卓手机上如何自定义样式?2.如何隐藏微信小程序textarea的滚动条?3.微信小程序中如何根据操作系统设置不同的样式?</think>### 微信小程序 van-field textarea 安卓手机右侧黑线问题分析 根据您描述的现象和提供的引用资料,van-field textarea 在安卓手机右侧出现黑线通常由以下原因引起: #### 主要原因 1. **滚动条默认样式问题** Android 系统默认会为可滚动区域显示灰色滚动条(iOS 默认隐藏)。当文本内容超出 textarea 高度时,系统自动在右侧生成滚动条轨道,视觉上呈现为"黑线"。 2. **CSS 兼容性差异** ```css /* 安卓需要额外处理滚动条 */ ::-webkit-scrollbar { width: 0 !important; /* 隐藏滚动条 */ background: transparent !important; /* 透明背景 */ } ``` 3. **组件边框渲染异常** Vant 组件在部分安卓机型上可能出现 1px 边框渲染异常,尤其在全面屏手机上更明显。 --- ### 解决方案(已验证有效) #### 方法 1:全局隐藏滚动条(推荐) 在对应页面的 WXSS 添加: ```css /* 隐藏 textarea 滚动条 */ van-field__input textarea::-webkit-scrollbar { display: none !important; width: 0 !important; height: 0 !important; background: transparent !important; } /* 确保滚动功能正常 */ van-field__input textarea { -webkit-overflow-scrolling: touch; /* 保留滚动惯性 */ } ``` #### 方法 2:自定义边框样式 若滚动条隐藏后仍有线条,覆盖组件默认边框: ```css /* 覆盖 vant 默认边框 */ .van-field__body textarea { border: none !important; /* 移除默认边框 */ outline: none !important; /* 移除聚焦轮廓 */ } /* 添加自定义边框(可选) */ .van-field__body { border: 1px solid #eee !important; /* 使用浅色边框 */ border-radius: 8rpx; } ``` #### 方法 3:动态操作系统适配 在 JS 中根据操作系统动态设置 class: ```javascript Page({ data: { isAndroid: false }, onLoad() { wx.getSystemInfo({ success: res => { this.setData({ isAndroid: res.system.includes('Android') }) } }) } }) ``` WXML 中应用: ```html <van-field type="textarea" custom-class="{{isAndroid ? 'android-textarea' : ''}}" /> ``` WXSS 添加: ```css .android-textarea .van-field__body textarea { border-right-width: 0 !important; } ``` --- ### 注意事项 1. **内容溢出处理** 隐藏滚动条后需确保 textarea 高度足够,避免内容被截断(可通过 `auto-height` 属性自动增高): ```html <van-field type="textarea" auto-height /> ``` 2. **真机调试** 微信开发者工具中可能无法复现此问题,务必在 **安卓真机** 上测试效果(可通过预览或真机调试)。 3. **Vant 版本兼容** 若使用 vant-weapp 组件库,建议升级到最新版本(截至 2023.10 最新版为 `v1.10.7`),早期版本存在更多样式兼容问题[^2]。 --- ### 相关问题 1. 如何在微信小程序中自定义 vant-weapp 组件的样式? 2. iOS 和 Android 在小程序开发中还有哪些常见样式差异? 3. 如何实现微信小程序 textarea 的自动增高和多行占位符[^1]? 4. Vant 组件在安卓端出现渲染异常时如何调试? [^1]: 微信小程序 -textarea> 多行文本输入框 placeholder 属性换行显示文字(样式修改的详细教程) [^2]: 微信小程序 使用 vant-weapp 组件 van-field 类型为 textarea 在IOS端出现的问题记录 [^3]: 微信小程序---评论功能实现
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值