element中树形控件组件设置样式

  在实际开发中一些element-ui中的树形控件基本样式无法满足我们的设计需求,所以我们一般要进行二次修改

下面是我实际开发中需要修改的样式

 

 然而element提供的树形控件是

我们的思路是给伪元素加样式实现虚线连接


.tree {
  /deep/ .el-tree-node__content {
    padding: 0 !important;
  }
  /deep/ .el-tree-node {
    position: relative;
    padding-left: 16px;
  }
  /deep/ .el-tree-node__children {
    padding-left: 16px;
  }

  // 竖线
  /deep/ .el-tree-node::before {
    content: "";
    height: 100%;
    width: 1px;
    position: absolute;
    left: -3px;
    top: -26px;
    border-width: 1px;
    border-left: 1px dashed #52627c;
  }

  /deep/ .el-tree-node:last-child::before {
    height: 38px; 
  }

  // 横线
  /deep/ .el-tree-node::after {
    content: "";
    width: 24px;
    height: 20px;
    position: absolute;
    left: -3px;
    top: 12px;
    border-width: 1px;
    border-top: 1px dashed #52627c;
  }

  /deep/ & > .el-tree-node::after {
    border-top: none;
  }
  /deep/ & > .el-tree-node::before {
    border-left: none;
  }

  /deep/ .el-tree-node__expand-icon {
    font-size: 16px;
  }
  // /deep/ .is-leaf {
  //   // display: none;
  // }
}

拓展自定义节点内容给节点添加图标并设置不同的颜色

 设置动态icon以及颜色

<template>
  <div>
    <el-tree
      class="tree"
      :data="data"
      :props="defaultProps"
      @node-click="handleNodeClick"
    >
      <span slot-scope="{ node, data }">
        <i :class="data.icon" :style="`color: ${data.color}`"></i>
        <span style="padding-left: 4px">{{ node.label }}</span>
      </span>
    </el-tree>
  </div>
</template>

在script中设置其对应的数据

<script>
export default {
  data() {
    return {
      data: [
        {
          label: "一级 1",
          icon: "el-icon-s-custom",
          color: "blue",
          children: [
            {
              icon: "el-icon-document",
              label: "二级 1-1",
              children: [
                {
                  label: "三级 1-1-1",
                },
              ],
            },
          ],
        },
        {
          label: "一级 2",
          icon: "el-icon-s-opportunity",
          color: "red",
          children: [
            {
              icon: "el-icon-document",
              label: "二级 2-1",
              children: [
                {
                  label: "三级 2-1-1",
                },
              ],
            },
            {
              label: "二级 2-2",
              children: [
                {
                  label: "三级 2-2-1",
                },
              ],
            },
          ],
        },
        {
          label: "一级 3",
          children: [
            {
              label: "二级 3-1",
              children: [
                {
                  label: "三级 3-1-1",
                },
              ],
            },
            {
              label: "二级 3-2",
              children: [
                {
                  label: "三级 3-2-1",
                },
              ],
            },
          ],
        },
      ],
      defaultProps: {
        children: "children",
        label: "label",
        icon: "icon",
      },
    };
  },
  methods: {
    handleNodeClick(data) {
      console.log(data);
    },
  },
};
</script>

最终的样式

 给大家把最终代码展示如下

 

<template>
  <div>
    <el-tree
      class="tree"
      :data="data"
      :props="defaultProps"
      @node-click="handleNodeClick"
    >
      <span slot-scope="{ node, data }">
        <i :class="data.icon" :style="`color: ${data.color}`"></i>
        <span style="padding-left: 4px">{{ node.label }}</span>
      </span>
    </el-tree>
  </div>
</template>

<script>
export default {
  data() {
    return {
      data: [
        {
          label: "一级 1",
          icon: "el-icon-s-custom",
          color: "blue",
          children: [
            {
              icon: "el-icon-document",
              label: "二级 1-1",
              children: [
                {
                  label: "三级 1-1-1",
                },
              ],
            },
          ],
        },
        {
          label: "一级 2",
          icon: "el-icon-s-opportunity",
          color: "red",
          children: [
            {
              icon: "el-icon-document",
              label: "二级 2-1",
              children: [
                {
                  label: "三级 2-1-1",
                },
              ],
            },
            {
              label: "二级 2-2",
              children: [
                {
                  label: "三级 2-2-1",
                },
              ],
            },
          ],
        },
        {
          label: "一级 3",
          children: [
            {
              label: "二级 3-1",
              children: [
                {
                  label: "三级 3-1-1",
                },
              ],
            },
            {
              label: "二级 3-2",
              children: [
                {
                  label: "三级 3-2-1",
                },
              ],
            },
          ],
        },
      ],
      defaultProps: {
        children: "children",
        label: "label",
        icon: "icon",
      },
    };
  },
  methods: {
    handleNodeClick(data) {
      console.log(data);
    },
  },
};
</script>

<style lang="less" scoped>
.tree {
  /deep/ .el-tree-node__content {
    padding: 0 !important;
  }
  /deep/ .el-tree-node {
    position: relative;
    padding-left: 16px;
  }
  /deep/ .el-tree-node__children {
    padding-left: 16px;
  }

  // 竖线
  /deep/ .el-tree-node::before {
    content: "";
    height: 100%;
    width: 1px;
    position: absolute;
    left: -3px;
    top: -26px;
    border-width: 1px;
    border-left: 1px dashed #52627c;
  }

  /deep/ .el-tree-node:last-child::before {
    height: 38px; 
  }

  // 横线
  /deep/ .el-tree-node::after {
    content: "";
    width: 24px;
    height: 20px;
    position: absolute;
    left: -3px;
    top: 12px;
    border-width: 1px;
    border-top: 1px dashed #52627c;
  }

  /deep/ & > .el-tree-node::after {
    border-top: none;
  }
  /deep/ & > .el-tree-node::before {
    border-left: none;
  }

  /deep/ .el-tree-node__expand-icon {
    font-size: 16px;
  }
  // /deep/ .is-leaf {
  //   // display: none; // 也可以去掉
  // }
}
</style>

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
element-ui提供了一个树形件,可以在前端页面展示树状结构的数据。您可以通过以下步骤来使用element树形件: 1. 首先,在您的项目安装并引入element-ui库。可以使用npm或yarn进行安装: ``` npm install element-ui ``` 然后在需要使用树形件的文件引入element-ui: ```javascript import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); ``` 2. 创建一个树形件的数据源,通常是一个数组对象,每个对象代表一个节点,其包含了节点的唯一标识符、显示文本、子节点等信息。 3. 在Vue组件使用el-tree标签,并绑定数据源和其他属性: ```html <el-tree :data="treeData" :props="defaultProps"></el-tree> ``` 其,`:data`属性绑定了您创建的数据源,`:props`属性可以配置节点的字段名,如"id"、"label"等。 4. 如果需要处理节点的选择事件或展开/折叠事件,可以通过监听el-tree组件的相关事件来实现: ```html <el-tree @node-click="handleNodeClick" @node-expand="handleNodeExpand" :data="treeData" :props="defaultProps"></el-tree> ``` 在Vue组件的methods定义事件处理函数即可: ```javascript methods: { handleNodeClick(data) { console.log(data); }, handleNodeExpand(data, node, instance) { console.log(data); } } ``` 以上就是使用element-ui的树形件的基本步骤,您可以根据实际需求进行进一步的样式和功能定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值