WEAPP
微信小程序video组件嵌套子元素

3 min read
#Weapp场景
在这次项目开发中使用到了小程序的video
组件 需要实现显示视频信息 刚开始Google了一下大🔥之前都是在video
中嵌套cover-view
组件 如下:
// exmaple
<video>
<cover-view>
<!-- render video info -->
</cover-view>
<cover-image />
</video>
然后本以为cover-view
能实现需求 但是现在暴露一个问题
cover-view
在官方文档中的描述是覆盖在原生组件之上的文本视图 所以如果页面中只是单纯的一个video
组件看似没有问题 但是如果有与video
同级的组件 就会出现大大小小的层级问题 就意味着你的页面DOM
结构的层级是十分混乱的 使用cover-image
同理
然后决定去官方文档寻找video
相关的信息 发现video
组件(v2.4.0 起支持同层渲染)这就意味着只要微信基本库 >= 2.4.0就可以进行嵌套view
组件而不是cover-view
组件 从而只需要操作z-index
就能处理清晰处理层级问题 如下:
// exmaple
<video> // z-index -> 1
<view> // z-index -> 2
<!-- render video info -->
</view>
<image /> //z-index -> 3
</video>
然后又双叒叕以为实现了需求 这时候却发现一个纯文字的view
里的高度坍塌了 我晕啦 当时给我最大的感觉就是一定继承了父元素/祖先元素的属性 推测可能性大概是font-size > line-height > height
果不其然 在video
组件中 存在着line-height: 0
的属性 css结构如下:
video {
width: 300px;
height: 225px;
display: inline-block;
line-height: 0; /* -> 罪魁祸首 */
overflow: hidden;
position: relative;
z-index: 0;
}
// 所以只需要在video嵌套的子元素中设定好line-height属性就行啦(默认值约为1.2
(估计是要兼容基本库 < 2.4.0的版本 毕竟不支持同层渲染
拓展
如果大🔥用的是sass的话 推荐一种处理上面z-index
层级的方式
$zindex-dropdown-backdrop: 990 !default;
$zindex-navbar: 1000 !default;
$zindex-dropdown: 1000 !default;
$zindex-fixed: 1030 !default;
$zindex-sticky: 1030 !default;
$zindex-modal-backdrop: 1040 !default;
$zindex-modal: 1050 !default;
$zindex-popover: 1060 !default;
$zindex-tooltip: 1070 !default;
// 取自 bootstrap 代碼
结束了video
组件的坑啦 现在又要面临拖拽的新坑 不说了搬砖去了