elementUI 弹窗居中 并且tabs组件 tab-position=“left“时显示的样式优化

需求

项目需要自定义字段,但是有个样式不太好实现,记录一下。

最初效果

优化后效果

html 复制代码
<template>
  <el-dialog title="新建字段" :visible.sync="visible" width="50%" :before-close="handleClose">
    <div class="tabs-box">
      <div class="tabs-title">
        <span class="tabs-title-type">选择字段类型</span>
        <span class="tabs-title-stats">字段属性</span>
      </div>
      <el-tabs :tab-position="'left'" type="card" style="height: calc(100% - 50px);">
        <el-tab-pane label="单行文本"></el-tab-pane>
        <el-tab-pane label="多行文本">多行文本</el-tab-pane>
        <el-tab-pane label="下拉列表">下拉列表</el-tab-pane>
        <el-tab-pane label="单选">单选</el-tab-pane>
        <el-tab-pane label="多选">多选</el-tab-pane>
        <el-tab-pane label="日期">日期</el-tab-pane>
        <el-tab-pane label="数字">数字</el-tab-pane>
        <el-tab-pane label="附件">附件</el-tab-pane>
      </el-tabs>
    </div>
    <span slot="footer" class="dialog-footer">
      <el-button @click="handleClose">取 消</el-button>
      <el-button type="primary" @click="onSubmit">确 定</el-button>
    </span>
  </el-dialog>
</template>
js 复制代码
<script>
export default {
  props: {
    visible: {
      type: Boolean
    }
  },
  data() {
    return {
    }
  },
  methods: {
    // 确认
    onSubmit() {
      const data = {}
      this.$emit('submit', data)
    },
    // 关闭弹窗
    handleClose() {
      this.$emit('close')
    }
  }
}
</script>
css 复制代码
<style lang="scss" scoped>
.tabs-box {
  height: 100%;
  box-sizing: border-box;

  .tabs-title {
    width: 100%;
    height: 50px;
    line-height: 50px;
    font-size: 14px;
    font-weight: 900;
    color: #000;

    .tabs-title-type {
      display: inline-block;
      width: 130px;
    }

    .tabs-title-stats {
      display: inline-block;
      margin-left: 20px;
	  /* 设置竖线 */
      &::before {
        content: "";
        position: absolute;
        display: inline-block;
        background: #e4e7ed;
        height: 450px; /* 设置竖线高度 */
        width: 1px;
        left: 150px;
        top: 54px;
      }
    }
  }
}
</style>

<style scoped lang="scss">
::v-deep {
  .el-dialog {
    display: flex;
    flex-direction: column;
    margin: 0 !important;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    min-height: 500px;
    max-height: calc(100% - 30px);
    max-width: calc(100% - 30px);

    .el-dialog__body {
      flex: 1;
      overflow: auto;
      padding-top: 0;
      height: 100%;
      box-sizing: border-box;
    }
  }

  .el-tabs__item {
    text-align: center !important;
    width: 130px;
    text-overflow: ellipsis;
    /* 溢出显示省略号 */
    overflow: hidden;
    /* 溢出隐藏 */
    white-space: nowrap;
    /* 强制不换行 */
  }
}
</style>
相关推荐
kyriewen5 小时前
别再乱用useEffect了——你写的10个里有8个不该存在
前端·javascript·react.js
Ivanqhz5 小时前
Rust &‘static str浅析
java·前端·javascript·rust
IT_陈寒6 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱6 小时前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端
zandy10116 小时前
衡石 Agentic BI的ReAct 推理框架在 Agentic BI 中的工程化实践
前端·javascript·react.js
罗超驿6 小时前
JavaEE进阶之路:从Web架构原理到HTML标签全解析
前端·html·web·javaee
西安小哥6 小时前
从前端到AI工程师:一场跨越鸿沟的真实蜕变之旅
前端
Prince4186 小时前
侧边栏收起缩放适配方案
前端
用户7783366132117 小时前
serpbase + Cloudflare R2 边缘持久化实战
前端·人工智能
郝亚军7 小时前
webstorm如何创建vue 3.js
javascript·vue.js·webstorm