需求:最近在用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;
}