需求:最近在用vue做一个新闻的应用程序,其中详情页可能存在后台传回的html字符串,需要使用v-html解析。
问题:由于详情页不止html一种类型,在结构上并不单一(存在非html类型及附件),导致最后出现的情况是,在windows,mac,
Android上都是好的,调试发现对应的dom都生成了,但是有些超出手机宽度的内容在ios系统上完全不显示,主要是我加上了横向滚动
overflow-x:auto,于是误认为是数据问题或v-html解析存在兼容性问题,找了很久才发现是页面结构中把含有v-html的部分使用了
绝对定位,脱离了文档流,可见ios对绝对定位加横向滚动的支持不太好
实例:下面是详情页,可能是html或非html类型,html类型中可能存在表格,因为表格是后台编辑器生成的,宽度可能超出了手机的宽度
解决:将含有v-html部分的position:absolute去掉,并在页面渲染后在详情页的每个table上加一个div(虽然vue并不建议操作dom),使里面的table能够横向滚动
代码:在调用接口获取数据成功后立即执行
var that = this;
setTimeout(function () {
that.$nextTick(()=>{
//dom已更新
var objArr = document.querySelectorAll('table')
if(objArr.length > 0) {
objArr.forEach(function (lable, index) {
var ele = document.createElement('div')
ele.className = 'table-con';
lable.parentNode.replaceChild(ele, lable)
ele.appendChild(lable)
})
}
})
}, 2000)
对应的css:
.table-con{
width: 100%;
overflow-x: auto;
}