第 2 节:基础扩展 - 下拉弹窗常用原生属性

第 2 节:基础扩展 - 下拉弹窗常用原生属性

本节给 el-select 增加弹窗相关配置,理解控制下拉面板行为的属性,重点都是控制弹出层。

核心:el-select 的下拉面板底层是 el-popover,很多属性是透传给 popover 的

修改 SelectDemo.vue

复制代码
<template>
  <div class="demo-box">
    <h3>el-select 弹窗常用属性</h3>
    <!--
      popper-class:给下拉弹窗单独加css类,用来修改弹窗样式
      popper-append-to-body:是否把弹窗DOM挂载到body(默认true,防止父元素overflow裁剪弹窗)
      dropdown-height:下拉面板最大高度,超出滚动
      placeholder:提示文字
      clearable:清空按钮
    -->
    <el-select
      v-model="value"
      placeholder="请选择"
      popper-class="my-select-popper"
      :popper-append-to-body="true"
      dropdown-height="200px"
      clearable
    >
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      />
    </el-select>
  </div>
</template>

<script setup>
import { ref } from 'vue'
const value = ref('')
// 多加几条数据,用来测试滚动效果
const options = ref([
  { label: '选项1', value: '1' },
  { label: '选项2', value: '2' },
  { label: '选项3', value: '3' },
  { label: '选项4', value: '4' },
  { label: '选项5', value: '5' },
  { label: '选项6', value: '6' },
  { label: '选项7', value: '7' },
])
</script>

<style scoped>
.demo-box {
  padding: 30px;
}
</style>

<!-- 注意:popper挂载到body,scoped样式无法生效,所以写在外面 -->
<style>
.my-select-popper {
  background-color: #fafafa;
}
</style>

本节知识点

  1. popper-class:给下拉弹窗添加自定义类,⚠️不能写在 scoped 样式里,因为弹窗 DOM 在 body 下,不在当前组件 DOM 树
  2. popper-append-to-body:
    • true:弹窗 DOM 挂载到 body。解决父容器 overflow:hidden 截断下拉框的问题(默认 true)
    • false:弹窗挂载在当前组件 DOM 内;父容器 overflow 会裁掉弹窗
  3. dropdown-height:下拉面板最大高度,选项超过高度会出现滚动条
  4. clearable:选中后显示清空图标,点击清空选中值

测试任务

  1. 点开下拉,查看下拉面板背景是否变成 #fafafa
  2. 滚动下拉列表,超过 200px 高度是否出现滚动条
  3. 选中一项,是否出现清空按钮,点击清空能否重置 value
  4. 可以尝试把 popper-append-to-body 改成 false,给外层 .demo-box 添加 overflow:hidden,观察弹窗是否被裁剪
相关推荐
xxwl58512 小时前
vue3的入门学习
前端·vue.js·学习
web打印社区12 小时前
政务办事大厅:叫号小票、办理回执网页怎么静默出纸
前端·javascript·vue.js·pdf·html·政务
斯内普吖13 小时前
(开源)水果蔬菜商城实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源
ss27314 小时前
AI全栈实战 | 2.2-02 React 思维模型:数据不可变 vs Vue 数据可变,两种哲学把复杂度推给谁
前端·vue.js·react.js
天衍四九-14 小时前
Docker Compose企业实战系列(三):Vue/React前端项目容器化完整部署
前端·vue.js·docker
墨鱼老师14 小时前
SpringBoot+Vue 毕设项目开发踩坑记录(前后端分离)
vue.js·spring boot·毕业设计·课程设计·前后端分离·java 毕设
雪芽蓝域zzs15 小时前
Vue3 + Element Plus el-select 下拉弹窗
vue.js·elementui
Wx-bishekaifayuan15 小时前
springboot房屋租赁系统11574-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·sql·spring·课程设计
小白的码BUG之路15 小时前
Docker -- 构建nginx镜像,启动vue项目
vue.js·nginx·docker