element中select下拉框如何实现宽度自适应

测试提了一个优化需求,使用下拉框选择时 ,根据选择的内容实现自适应的效果;如果使用element自带的select的选择器模块,它默认的select选择框的宽度是固定的。
在这里插入图片描述
那么我们要做的效果是这样的,select选择框的宽度随着你选择的内容变化而自适应的。给用户的操作感觉会比较好。
在这里插入图片描述
实现思路:
1.不能给输入框直接设置固定宽度,考虑动态获取选择内容的宽度,然后再赋值给选择框的宽度样式,没有这样操作,感觉会比较麻烦,刷新的话会存在问题。
2.查阅了element的select组件的文档,它是有模板方法的,这里使用了prefix这个slots方法,将其作为Select 组件头部内容
主要代码如下:

<el-select clearable class="autoWidth" v-model="value" placeholder="请选择">
          <template slot="prefix" >
              {{ (options.find(item => item.value === value)|| {}).label }}
          </template>
        <el-option
          v-for="item in options"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        >
        </el-option>
      </el-select>
<script>
export default {
  name: "dd",
  data() {
    return {
      options: [
        {
          value: "选项1",
          label: "黄金糕",
        },
        {
          value: "选项2",
          label: "双皮奶",
        },
        {
          value: "选项3",
          label: "蚵仔煎",
        },
        {
          value: "选项4",
          label: "龙须面龙须面龙须面龙须面龙须面龙须面龙须面龙须面龙须面",
        },
        {
          value: "选项5",
          label: "北京烤鸭",
        },
      ],
      value: "",
    };
  },
};
</script>

重点是{{ (options.find(item => item.value === value)|| {}).label }}这个代码;意思是,查找对应的选择内容,将其作为模板内容渲染在页面。然后使用这个内容代替原来的选择框默认内容,覆盖掉原来的样式,达到自适应的母的。
css样式如下:

.autoWidth {
  min-width: 120px;   //设置最小的宽度
  text-align: start;  // 这里是个坑,由于我是在vue中挂载的页面,如果给app的样式设置了text-align:center后,这里是需要重新设置start 否则选择框内的内容是默认居中,会造成未选择内容和选择内容时样式不对
}
.autoWidth >>> .el-input__prefix {  // 这里直接时复制原来的input的样式,给.el-input__prefix加上
  position: relative;
  box-sizing: border-box;
  border: 1px solid #ffffff00;
  padding: 0 40px;
  height: 40px;
  line-height: 40px;
  color: #606266;
  left: 0;
  visibility: hidden;
}
.autoWidth >>> .el-input__inner {
  position: absolute;   //这里一定需要给,给内容进行定位
}
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值