elementui tree 层级过多时,高亮状态无法选满整行

问题:

 如上图所示,官方的tree组件,在层级很多时 elementui -tree 的高亮状态并没有选中整行。

(衍生库 vue-easy-tree 也会出现此问题)

原因: 

(没有查看源码,只是根据dom简单定位了一下,实际可能并不是这个原因)

添加高亮状态的 div 并没有随着子级的展开而适应宽度,所有的tree-node 的宽度在初始化的时候就固定了。

解决方式:

.el-tree-node{
    width: fit-content;
    min-width: var(--treeWidth);
  }

通过fit-content 可以将宽度随着内容撑开,而min-width 会保证没有那么多层级时也可以左右排布。

(treeWidth 表示的是整个tree 容器的宽度,要是需要留有间隙,可以减去 10 或者 20 像素)

加了以后则可以全行高亮了

缺点:

min-width 在某些条件下会显得多余,例如:

 

 此时只需要tree根据弹窗自动铺满就好了,不用考虑min-width。

当然这个解决起来也不复杂,通过js计算一下父容器的宽度就好了

mounted () {
    this.treeWidth = this.$refs['easy-tree']?.$el.offsetWidth - 15
},

第二天的ps: 

好像不用js计算,min-width: 100% 就可以搞定了~

如果您想要在 ElementUITree 组件中实现点击节点高亮,可以通过以下两种方式实现: 1. 使用插槽自定义节点的内容,然后在点击节点时手动添加 `highlight` 类名,如下所示: ```html <template> <el-tree :data="data" :highlight-current="true" @node-click="handleNodeClick"> <template v-slot="{ node, data }"> <span :class="{'highlight': node.highlight}">{{ data.label }}</span> </template> </el-tree> </template> <script> export default { data() { return { data: [ { label: 'Node 1', children: [ { label: 'Node 1-1', }, { label: 'Node 1-2', }, ], }, { label: 'Node 2', }, ], }; }, methods: { handleNodeClick(data, node) { this.$refs.tree.store.highlightNode(node); }, }, }; </script> <style> .highlight { background-color: #f5f5f5; } </style> ``` 2. 使用 `highlight-current` 属性启用当前节点高亮,并使用 `node-key` 属性指定节点的唯一标识符,如下所示: ```html <template> <el-tree :data="data" :highlight-current="true" :node-key="nodeKey"> </el-tree> </template> <script> export default { data() { return { data: [ { label: 'Node 1', children: [ { label: 'Node 1-1', }, { label: 'Node 1-2', }, ], }, { label: 'Node 2', }, ], nodeKey: 'id', }; }, }; </script> ``` 其中,`nodeKey` 属性指定了节点的唯一标识符,可以是节点对象的某个属性名,也可以是一个返回节点标识符的函数。当点击节点时,Tree 组件会自动将当前节点的 `highlight` 属性设置为 `true`,从而实现高亮效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值