Kbone中使用Skeleton组件时移动端渲染错乱怎么办?
用Kbone开发小程序时,Skeleton组件在H5端显示正常,但微信小程序里文字和图片总是错位,调整过flex布局和padding都不行,求解!
尝试给包裹元素加了display: flex和flex-direction: column,但图片还是跑到文字上面去了。看源码发现Skeleton用了绝对定位:
.skeleton-image {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 150px;
}
微信开发者工具里定位元素偏移了20px,但H5端正常。是不是小程序的定位基准不同?或者需要额外加什么兼容处理?
解决办法其实不复杂,你可以给
.skeleton-image的父容器加上position: relative;,强制让绝对定位的基准变成这个父容器,而不是默认的页面根节点。这样能保证在小程序里渲染时不会因为基准不同导致错位。另外,图片跑到文字上面,多半是因为高度没控制好。建议把
.skeleton-image的高度写死或者用min-height代替height,同时确保文字部分也有明确的高度或外边距,比如:如果还是有问题,可以检查一下是否有其他全局样式污染了组件,比如小程序的基础库版本或者第三方样式库的影响。性能上来说,尽量减少绝对定位的使用,能用弹性布局解决的优先用弹性布局,毕竟绝对定位在不同端的兼容性确实让人头疼。
最后提醒一下,调试的时候别忘了清理缓存,微信开发者工具有时候会缓存旧样式,搞得人怀疑人生。我之前就被坑过好几次,真是又累又烦。