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>
相关推荐
小桥风满袖17 分钟前
极简三分钟ES6 - ES9中字符串扩展
前端·javascript
小Wang27 分钟前
npm私有库创建(docker+verdaccio)
前端·docker·npm
用户730870117930829 分钟前
Vue中集成文字转语音:使用Web Speech API实现功能
前端
李重楼30 分钟前
前端性能优化之 HTTP/2 多路复用
前端·面试
yanessa_yu33 分钟前
全屏滚动网站PC端自适应方案
前端
RoyLin40 分钟前
TypeScript设计模式:桥接模式
前端·后端·typescript
火星开发者42 分钟前
Vue中实现Word、Excel、PDF预览的详细步骤
前端
brzhang1 小时前
干翻 Docker?WebAssembly 3.0 的野心,远不止浏览器,来一起看看吧
前端·后端·架构
lecepin2 小时前
AI Coding 资讯 2025-09-17
前端·javascript·面试
IT_陈寒2 小时前
React 18实战:7个被低估的Hooks技巧让你的开发效率提升50%
前端·人工智能·后端