背景:使用ScrollView作为容器做了一个表格需求:
1. 固定了首列
2. 表格可滑动
3. 点击某一行,会在被点击的行下面展开一个详情
4. 顶部有个tab,通过切换tab展示不同的表格
主要实现方式:
1. 首列采用黏性布局
2. 详情展开页也使用黏性布局
问题:
横向滑动表格,滑动到某个地方开始,下面的详情展开页失去黏性,跟着滑动
分析:
1. 黏性布局是在它的父容器的宽度内生效的,通过查看,
1)父容器给的宽度给的宽度是1300px(在CSS文件中写的1300px,编译后会变成1300rpx,再转换成px)
2)我的表格各个字段的宽度是(180rpx+150*6rpx+100px(写的行内样式,不会转换为rpx)+100px(同上)),100px换成rpx,即750/屏幕宽度*100,如果是390宽度的屏幕,大概是192rpx
综上两点,父容器宽度小于子元素的宽度,黏性布局在超出父容器宽度时失效了。
2. 在解决第一点后发现,黏性布局未失效,但是有新问题,那就是,展开的容器有点大,加上内边距,这个容器的大小都大于屏幕宽度,这个展开页还是会动。
3. 基于第二点可得,需要将缩小展开页的宽度,我刚开始给的是 屏幕宽度(px)- 所有边距(px)
4. 然后会发现,在不同的屏幕宽度的手机下,还是会出现第二点的问题。通过查看布局发现,这个展开容器左边距总共是70rpx,右边距总共是70rpx(其实在css里写的是70px,小程序会转换,切记),在不同屏幕下,转换出来的px是不一样的,所以导致了误差。
因为我写的是行内式,Taro不会转换我的单位,所以我要算出px,最后公式是
屏幕宽度-(屏幕宽度/750*140)px
由于是140的单位是rpx,我们最后得出的单位是px
由rpx->px,由大变小,因此750做分母
总结:会犯这个错误的的原因是,没搞清楚Taro对单位的编译
1. 写行内式,写的是px,最后就是px
2. 在css文件中,写的是px,编译后会变成rpx,最后再通过计算,变成px
3. px与rpx的转换关系