关于el-select 多选框样式重置的问题?

发布于 2022-09-13 00:54:28 字数 464 浏览 36 评论 0

如何通过css调整el-select 当为多选框时的默认高度

// 想通过样式进行调整,并没有生效
.el-input .el-input__inner,
.el-select .el-select__input{
    font-size: 12px;
    height: 32px;
    line-height: 32px;
}

好像是个内联样式,感觉应该时渲染时动态加载的
如果height: 32px !important;,那么当多选时,又不会自动撑开了,如下图所示:
image.png

如何才能将这个40px,改为32px?

image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

天暗了我发光 2022-09-20 00:54:28

设置el-select size="small"。size可选medium/small/mini。medium - 36,small - 32,mini - 28


也可以参考 @看见了 的答案,直接修改input高度

<style>
.el-input input {
  height: 38px
}
</style>

以下是相关源码:

// https://github.com/ElemeFE/element/blob/dev/packages/select/src/select.vue

...
    mounted() {
      if (this.multiple && Array.isArray(this.value) && this.value.length > 0) {
        this.currentPlaceholder = '';
      }
      addResizeListener(this.$el, this.handleResize);
      const reference = this.$refs.reference;
      if (reference && reference.$el) {
        const sizeMap = {
          medium: 36,
          small: 32,
          mini: 28
        };
        const input = reference.$el.querySelector('input');
        // input初始高度计算
        this.initialInputHeight = input.getBoundingClientRect().height || sizeMap[this.selectSize]; 
      }
      if (this.remote && this.multiple) {
        this.resetInputHeight();
      }
      this.$nextTick(() => {
        if (reference && reference.$el) {
          this.inputWidth = reference.$el.getBoundingClientRect().width;
        }
      });
      this.setSelected();
    },
    
    ...
    
      resetInputHeight() {
        if (this.collapseTags && !this.filterable) return;
        this.$nextTick(() => {
          if (!this.$refs.reference) return;
          let inputChildNodes = this.$refs.reference.$el.childNodes;
          let input = [].filter.call(inputChildNodes, item => item.tagName === 'INPUT')[0];
          // tags就是input里面,选中的项
          const tags = this.$refs.tags; 
          // tags的高度
          const tagsHeight = tags ? Math.round(tags.getBoundingClientRect().height) : 0; 
          // input的高度
          const sizeInMap = this.initialInputHeight || 40; 
          // 修改input的高度
          input.style.height = this.selected.length === 0
            ? sizeInMap + 'px'
            : Math.max(
              tags ? (tagsHeight + (tagsHeight > sizeInMap ? 6 : 0)) : 0,
              sizeInMap
            ) + 'px'; 
          if (this.visible && this.emptyText !== false) {
            this.broadcast('ElSelectDropdown', 'updatePopper');
          }
        });
      },
绮筵 2022-09-20 00:54:28

image.png
用 popper-class 自定义一个类试一下

暖风昔人 2022-09-20 00:54:28

最简单的写法,当然得手动刷新页面

<style>
.el-input input {
  height: 38px
}
</style>

原因:

mounted() {
// el-select会设置一个初始化高度
this.initialInputHeight = input.getBoundingClientRect().height || sizeMap[this.selectSize];
}

methods: {
resetInputHeight() {
        if (this.collapseTags && !this.filterable) return;
        this.$nextTick(() => {
          if (!this.$refs.reference) return;
          let inputChildNodes = this.$refs.reference.$el.childNodes;
          let input = [].filter.call(inputChildNodes, item => item.tagName === 'INPUT')[0];
          const tags = this.$refs.tags;
          // this.initialInputHeight优先级最高
          const sizeInMap = this.initialInputHeight || 40;
          input.style.height = this.selected.length === 0
            ? sizeInMap + 'px'
            : Math.max(
              tags ? (tags.clientHeight + (tags.clientHeight > sizeInMap ? 6 : 0)) : 0,
              sizeInMap
            ) + 'px';
          if (this.visible && this.emptyText !== false) {
            this.broadcast('ElSelectDropdown', 'updatePopper');
          }
        });
      },
}

只有一种情况才需要按照@Griffin23的说法去修改el-tag的高度,即el-tag比初始的initialInputHeight的高度还高

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文