el-tree 样式自定义  树形控件

文章展示了如何在Vue中使用ElementUI的el-tree组件,包括设置节点点击事件、自定义节点图标、以及处理节点高亮的样式。同时,文章提到了解决el-tree当前选中背景在点击其他地方后消失的问题,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.组件

    <el-tree
        class="filter-tree"
        :data="data"
        :props="defaultProps"
        :filter-node-method="filterNode"
        @node-click="nodeClick"
        node-key="id"
        default-expand-all
        :highlight-current="showTree"
        ref="tree">
        <span class="custom-tree-node" slot-scope="{ node, data }" style="display: flex;align-items: center;margin-left: 8px;">
          <span class="icon">
            <img src="./img/flag.png" v-if="node.level==1">
            <img src="./img/protect.png" v-if="node.level==2">
            <img src="./img/camer.png" v-if="node.level==3">
          </span>
          <span class="labelClass">{{ node.label }}</span>
          <span class="play" @click="play" v-if="isShowNode(data)" style=""><img src="./img/play.png"></span>
          <span class="inter" v-if="isShowNode(data)" style=""></span>
          <span class="playBack" v-if="isShowNode(data)" style=""  @click="playBack"><img src="./img/playback.png"></span>
        </span>
      </el-tree>

2.样式

 /deep/ {
    .el-tree-node__label {
      width: 124px;
      height: 18px;
      font-size: 14px;
      font-family: AlibabaPuHuiTi-Regular, AlibabaPuHuiTi;
      font-weight: 400;
      color: #FFFFFF;
      line-height: 18px;
    }

    .el-tree {
      background: #02163C;
    }


    .el-tree--highlight-current
    .el-tree-node.is-current
    > .el-tree-node__content {
      // 设置颜色
      color: #FFFFFF;
      background-color: #2255a3 !important;
      background: #2255a3 !important;
    }

    .el-tree-node:focus > .el-tree-node__content {
      background-color: #2255a3;
      color: #FFFFFF;
    }

    .el-tree-node > .el-tree-node__content:hover {
      background-color: #2255a3 !important;
      background: #2255a3 !important;
    }

    .el-tree-node.is-current > .el-tree-node__content {
      background-color: #2255a3 !important;
      background: #2255a3 !important;
    }

    .el-tree-node__content:hover {
      background-color: #2255a3 !important;
      background: #2255a3 !important;
    }

    .el-tree-node__content {
      height: 40px;
    }

    .custom-tree-node{
      height: 40px;
      font-size: 14px;
      font-family: AlibabaPuHuiTi-Regular, AlibabaPuHuiTi;
      font-weight: 400;
      color: #FFFFFF;
      line-height: 18px;
    }

    .el-tree .el-tree-node__expand-icon.expanded {
      -webkit-transform: rotate(0deg);
      transform: rotate(0deg);
    }

    //有子节点 且未展开
    .el-tree .el-icon-caret-right:before {
      background: url("./img/plus.png") no-repeat 0 3px;
      content: '';
      display: block;
      width: 16px;
      height: 16px;
      font-size: 16px;
      background-size: 16px;
    }

    //有子节点 且已展开
    .el-tree .el-tree-node__expand-icon.expanded.el-icon-caret-right:before {
      background: url("./img/subtract.png") no-repeat 0 3px;
      content: '';
      display: block;
      width: 16px;
      height: 16px;
      font-size: 16px;
      background-size: 16px;
    }

    //没有子节点
    .el-tree .el-tree-node__expand-icon.is-leaf::before {
      background: transparent;
      content: '';
      display: block;
      width: 16px;
      height: 16px;
      font-size: 16px;
      background-size: 16px;
    }

    /* 点击树结构项的选中颜色 */
  .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
    background-color:  #2255a3;
  }

  .el-tree .el-tree-node__content>.el-tree-node__expand-icon {
      padding: 8px;
      margin: 6px;
      position: absolute;
      right: 3px !important;

    }

  .tree {
    width: 440px;
    height: 849px;
    border: 1px solid;
    border-image: linear-gradient(132deg, rgba(126, 187, 253, 0), rgba(107, 161, 253, 1), rgba(88, 135, 254, 0), rgba(54, 89, 254, 1)) 1 1;
    background: #02163C;
  }

3. el-tree 自定义icon

参考网址:https://blog.youkuaiyun.com/qq_30351747/article/details/121247796

4.element-ui trr树形结构点击当前背景再点击其它地方会消失问题解决,以及修改当前背景色

参考网址:https://blog.youkuaiyun.com/weixin_44903107/article/details/105513492

<think>好的,我现在需要帮助用户解决如何为Element Plus的el-tree组件设置自定义样式的问题。用户已经提供了相关的引用内容,我需要结合这些引用信息来构建一个清晰的回答。 首先,根据引用[1],用户可以通过CSS来自定义树组件的样式,比如修改节点的背景颜色和悬停效果。用户提供的示例代码展示了如何在Vue模板中使用<style>块来覆盖默认样式。因此,我应该强调CSS覆盖的方法,并提醒用户注意样式的作用域问题,可能需要使用深度选择器如::v-deep或:deep()来穿透scoped样式限制。 接下来,引用[3]提到用户想为树形控件添加图标,但官网示例没有。这说明用户可能需要使用插槽(slot)来自定义节点的内容,包括添加图标。Element Plus的el-tree组件提供了#default插槽,允许用户自定义每个节点的渲染内容。因此,我应该提供一个使用插槽添加图标的示例,比如根据节点类型显示不同的图标,如文件夹和文档图标。 然后,引用[2]指出通过ref属性可以访问树组件的实例,这可能在动态修改样式或节点状态时有用。不过用户的问题主要是关于样式设置,所以这部分可以作为高级用法提及,但可能不是主要回答的重点。 在组织回答时,需要分步骤说明两种主要方法:CSS覆盖和插槽自定义。每个步骤都需要代码示例,并解释关键点,比如类名的使用、插槽的作用域参数。此外,需要提到可能的注意事项,比如样式穿透和图标引入方式。 最后,生成的相关问题应该围绕用户可能进一步感兴趣的方面,比如动态改变样式、性能优化、图标添加的其他方法以及数据驱动样式。这些问题可以帮助用户深入探索el-tree自定义功能。</think>### 为Element Plus的el-tree设置自定义样式的方法 #### 方法1:通过CSS覆盖默认样式(基础样式修改) 1. **为树组件添加自定义类名** 在`<el-tree>`标签中添加`class`属性定义作用域: ```vue <template> <el-tree :data="treeData" class="custom-tree-style" /> </template> ``` 2. **编写覆盖样式** 使用`<style scoped>`或全局样式文件修改特定节点样式: ```css /* 修改节点背景和间距 */ .custom-tree-style .el-tree-node__content { background: #f0f9eb; margin: 8px 0; border-radius: 6px; } /* 修改悬停效果 */ .custom-tree-style .el-tree-node__content:hover { background: #ecf5ff; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } /* 修改选中状态 */ .custom-tree-style .el-tree-node.is-current > .el-tree-node__content { background: #409eff; color: white; } ``` *注意:若使用scoped样式需添加`::v-deep`或`:deep()`*[^1] #### 方法2:使用插槽自定义节点内容(高级样式定制) 通过`#default`插槽完全自定义节点渲染: ```vue <template> <el-tree :data="treeData"> <template #default="{ node, data }"> <div class="custom-node"> <el-icon v-if="data.isFolder"><Folder /></el-icon> <el-icon v-else><Document /></el-icon> <span :class="{ 'text-primary': node.isCurrent }"> {{ node.label }} </span> </div> </template> </el-tree> </template> <style> .custom-node { display: flex; align-items: center; gap: 8px; padding: 6px 0; } </style> ``` 此示例实现了:图标类型区分、节点布局调整、选中状态文字高亮[^3] #### 扩展技巧:动态样式控制 通过`ref`获取组件实例,结合数据驱动样式: ```javascript // 通过ref获取树实例 this.$refs.treeRef.setCurrentKey('nodeId') // 结合数据中的class字段动态添加样式treeData: [ { label: '特殊节点', className: 'highlight-node' } ] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值