Element-plus安装及其底子组件利用

打印 上一主题 下一主题

主题 703|帖子 703|积分 2109

简而言之,在main.js中导出以下库,仅此,搞多了出错难排查
   import ElementPlus from 'element-plus' //导入ElementPlus 模块
  import 'element-plus/dist/index.css' //引入样式
   app.use(ElementPlus) //注册库就能利用了
    Element Plus 是一个基于 Vue 3 的组件库,提供了一系列 UI 组件(如按钮、表格、对话框等),可以资助快速构建用户界面。那么提供了该组件跟我寻常直接在<template></template>标签中直接写<button></button>标签来创建按钮有什么区别?

  Element Plus 组件实际上是对原生 HTML 和 CSS 的封装,它提供了一系列预界说的样式和功能,使得开发者可以更轻松地构建一致且雅观的用户界面
  

  • 封装:Element Plus 组件将原生 HTML 元素(如按钮、表格等)举行了封装,增加了丰富的样式和功能选项。
  • 样式与一致性:组件自带的样式确保了在不同装备和欣赏器上的一致性,淘汰了样式调整的复杂性。
  • 事件处理:尽管组件库提供了许多内置功能,事件处理仍然必要利用 JavaScript 举行界说和处理。这与原生 HTML 是一样的。
  • 利用方便:通过利用组件,开发者可以更快地实现复杂的功能,而不必从头开始筹划和实现所有的样式和行为。
   一.安装

利用包管理器:

   # NPM
   npm install element-plus --save
  
  # Yarn
   yarn add element-plus
  
  # pnpm 
  pnpm install element-plus
  
如果网络环境不好,发起利用中国npm镜像:
  
  设置清华大学镜像并安装element-plus:
  npm config set registry https://mirrors.tuna.tsinghua.edu.cn/npm/
npm install element-plus
 
  中国科学技术大学(USTC)镜像:
  npm config set registry https://mirrors.ustc.edu.cn/npm/
npm install element-plus
 
  淘宝镜像:
npm config set registry https://registry.npm.taobao.org
npm install element-plus
 
  利用cnpm 作为npm 的更换工具,主动利用淘宝镜像
  npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install element-plus
 
  如果想要切换回npm官方源
  npm config set registry https://registry.npmjs.org
 
  
欣赏器直接引入:
unpkg:
    <head>
  <!-- Import style -->
  <link rel="stylesheet" href="//unpkg.com/element-plus/dist/index.css" />
  <!-- Import Vue 3 -->
  <script src="//unpkg.com/vue@3"></script>
  <!-- Import component library -->
  <script src="//unpkg.com/element-plus"></script>
</head>
  jsDelivr:
    <head>
  <!-- Import style -->
  <link
    rel="stylesheet"
    href="//cdn.jsdelivr.net/npm/element-plus/dist/index.css"
  />
  <!-- Import Vue 3 -->
  <script src="//cdn.jsdelivr.net/npm/vue@3"></script>
  <!-- Import component library -->
  <script src="//cdn.jsdelivr.net/npm/element-plus"></script>
</head>
  
二.在项目中利用Element Plus

引入:
(volar适用于ts,而对于js,利用vetur)
完整引入(对打包后的文件大小不在乎,利用完整导入更方便)

  1. // main.js
  2. import { createApp } from 'vue'
  3. import ElementPlus from 'element-plus' //从element-plus库中导入ElementPlus对象,该对象主要是库的主要功能或组件集合,可在vue应用中使用
  4. import 'element-plus/dist/index.css' //引入样式
  5. import App from './App.vue'
  6. const app = createApp(App)
  7. app.use(ElementPlus) //注册库,所有Element Plus组件都可以在应用中使用,在所有组件中都能使用
  8. app.mount('#app')
复制代码

按需导入:
安装额外插件来导入要利用的组件


   安装 unplugin-vue-components 和 unplugin-auto-import
  npm install -D unplugin-vue-components unplugin-auto-import 
   将下面代码插入vite配置文件vite.config.js中
  1. // vite.config.js
  2. import { defineConfig } from 'vite'
  3. import AutoImport from 'unplugin-auto-import/vite'
  4. import Components from 'unplugin-vue-components/vite'
  5. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
  6. export default defineConfig({
  7.   
  8.   plugins: [
  9.     vue(), //添加vue插件,千万不要把它忘记了,报一堆错,浏览器一片红
  10.    
  11.     AutoImport({
  12.       resolvers: [ElementPlusResolver()],
  13.     }),
  14.     Components({
  15.       resolvers: [ElementPlusResolver()],
  16.     }),
  17.   ],
  18. })
复制代码
  作用:
 
   主动导入:利用 unplugin-auto-import,可以在代码中直接利用 Element Plus 的 API,而无需手动导入,这样可以简化代码并进步开发效率。
  
  主动注册组件:通过 unplugin-vue-components 和 ElementPlusResolver,可以主动注册所有利用的 Element Plus 组件,克制在每个文件中重复注册,简化组件管理。
  
  提升开发体验:淘汰样板代码,进步代码整齐性和可维护性,使开发者能更专注于业务逻辑。

Element Plus 的 API 包括组件、属性、事件和方法等。以下是一些常见的 Element Plus API:
  
常见组件


  
1.底子组件:
 


  

  • Button:按钮组件,支持多种样式和尺寸。
  • Input:输入框组件,支持文本输入和验证。
  • Select:下拉选择框组件,支持多选和搜索。

  2.布局组件:
 
  

  • Container:用于布局的容器组件,可以设置顶部、底部、侧边栏等。
  • Row/Col:栅格布局组件,用于快速创建响应式布局。
  
  3.表单组件:
  

  • Form:表单组件,支持表单验证。
  • CheckboxRadioSwitch:用于选择的各种组件。
  
4.反馈组件:
  

  • Message:全局消息提示组件。
  • Notification:通知提示组件。
  5.数据展示组件:
  

  • Table:表格组件,支持排序、筛选和分页。
  • Pagination:分页组件,用于数据分页展示。
  
组件的属性和方法:


  

  • 属性:每个组件都有一系列可配置的属性,例如:

    • type、size:用于设置按钮的范例和尺寸。
    • placeholder:用于设置输入框的占位符文本。

  • 事件:组件通常会提供事件监听,例如:

    • click:按钮的点击事件。
    • change:输入框内容变化时触发的事件。

  • 方法:某些组件提供的方法,可以在实例中调用,例如:

    • show():显示模态框。
    • hide():隐藏模态框。

  
全局配置

在引入ElementPlus时,可以传入一个包含size和zIndex属性的全局配置对象。size用于设置表单组建的默认尺寸,zIndex用于设置弹出组件的层级,zIndex的默认值为2000
完整引入(上边注册库仅仅是app.use(ElementPlus))
  1. import { createApp } from 'vue'
  2. import ElementPlus from 'element-plus'
  3. import App from './App.vue'
  4. const app = createApp(App)
  5. app.use(ElementPlus, { size: 'small', zIndex: 3000 })
复制代码
按需引入:
  1. <template>
  2.   <el-config-provider :size="size" :z-index="zIndex">
  3.     <app />
  4.   </el-config-provider>
  5. </template>
  6. <script>
  7. import { defineComponent } from 'vue'
  8. import { ElConfigProvider } from 'element-plus'
  9. export default defineComponent({
  10.   components: {
  11.     ElConfigProvider,
  12.   },
  13.   setup() {
  14.     return {
  15.       zIndex: 3000,
  16.       size: 'small',
  17.     }
  18.   },
  19. })
  20. </script>
复制代码

 三.组件

底子组件:
button按钮:


   button属性:
  1.type用来指定按钮内的配景颜色,但是按钮内的笔墨颜色是白色
  1. <div class="mb-4">
  2.     <el-button>Default</el-button>
  3.     <el-button type="primary">Primary</el-button>
  4.     <el-button type="success">Success</el-button>
  5.     <el-button type="info">Info</el-button>
  6.     <el-button type="warning">Warning</el-button>
  7.     <el-button type="danger">Danger</el-button>
  8.   </div>
复制代码

  
  2.plain属性确定是否为朴素按钮,设置了朴素按钮之后,仅显示边框颜色和透明配景色
  1. <div class="mb-4">
  2.     <el-button plain>Plain</el-button>
  3.     <el-button type="primary" plain>Primary</el-button> <!--有颜色的边框和文本,背景没有颜色-->
  4.     <el-button type="success" plain>Success</el-button>
  5.     <el-button type="info" plain>Info</el-button>
  6.     <el-button type="warning" plain>Warning</el-button>
  7.     <el-button type="danger" plain>Danger</el-button>
  8.   </div>
复制代码

  
3.round 按钮是否为圆角样式
  1.   <div class="mb-4">
  2.     <el-button round>Round</el-button>
  3.     <el-button type="primary" round>Primary</el-button>
  4.     <el-button type="success" round>Success</el-button>
  5.     <el-button type="info" round>Info</el-button>
  6.     <el-button type="warning" round>Warning</el-button>
  7.     <el-button type="danger" round>Danger</el-button>
  8.   </div>
复制代码

  
4.circle 是否是圆形按钮 icon 图标,前面有冒号是动态绑定,没有是静态
  1.   <div>
  2.     <el-button :icon="Search" circle />
  3.     <el-button type="primary" :icon="Edit" circle />
  4.     <el-button type="success" :icon="Check" circle />
  5.     <el-button type="info" :icon="Message" circle />
  6.     <el-button type="warning" :icon="Star" circle />
  7.     <el-button type="danger" :icon="Delete" circle />
  8.   </div>
复制代码

  
5.disabled 界说按钮是否禁用 
  1. <template>
  2.   <div class="mb-4">
  3.     <el-button disabled>Default</el-button>
  4.     <el-button type="primary" disabled>Primary</el-button>
  5.     <el-button type="success" disabled>Success</el-button>
  6.     <el-button type="info" disabled>Info</el-button>
  7.     <el-button type="warning" disabled>Warning</el-button>
  8.     <el-button type="danger" disabled>Danger</el-button>
  9.   </div>
  10.   <div>
  11.     <el-button plain disabled>Plain</el-button>
  12.     <el-button type="primary" plain disabled>Primary</el-button>
  13.     <el-button type="success" plain disabled>Success</el-button>
  14.     <el-button type="info" plain disabled>Info</el-button>
  15.     <el-button type="warning" plain disabled>Warning</el-button>
  16.     <el-button type="danger" plain disabled>Danger</el-button>
  17.   </div>
  18. </template>
复制代码


6.链接按钮 link
  1. <template>
  2.   <p>Basic link button</p>
  3.   <div class="mb-4">
  4.     <el-button
  5.       v-for="button in buttons"
  6.       :key="button.text"
  7.       :type="button.type"
  8.       link
  9.     >
  10.       {{ button.text }}
  11.     </el-button>
  12.   </div>
  13.   <p>Disabled link button</p>
  14.   <div>
  15.     <el-button
  16.       v-for="button in buttons"
  17.       :key="button.text"
  18.       :type="button.type"
  19.       link  <!--链接按钮-->
  20.       disabled
  21.     >
  22.       {{ button.text }}
  23.     </el-button>
  24.   </div>
  25. </template>
  26. <script setup lang="ts">
  27. const buttons = [
  28.   { type: '', text: 'plain' },
  29.   { type: 'primary', text: 'primary' },
  30.   { type: 'success', text: 'success' },
  31.   { type: 'info', text: 'info' },
  32.   { type: 'warning', text: 'warning' },
  33.   { type: 'danger', text: 'danger' },
  34. ] as const
  35. </script>
复制代码

  
7.笔墨按钮  没有边框和配景色的按钮
  1. <template>
  2.   <p>Basic text button</p>
  3.   <div class="mb-4">
  4.     <el-button
  5.       v-for="button in buttons"
  6.       :key="button.text"
  7.       :type="button.type"
  8.       text   
  9.     >
  10.       {{ button.text }}
  11.     </el-button>
  12.   </div>
  13.   <p>Background color always on</p>
  14.   <div class="mb-4">
  15.     <el-button
  16.       v-for="button in buttons"
  17.       :key="button.text"
  18.       :type="button.type"
  19.       text
  20.       bg
  21.     >
  22.       {{ button.text }}
  23.     </el-button>
  24.   </div>
  25.   <p>Disabled text button</p>
  26.   <div>
  27.     <el-button
  28.       v-for="button in buttons"
  29.       :key="button.text"
  30.       :type="button.type"
  31.       text
  32.       disabled
  33.     >
  34.       {{ button.text }}
  35.     </el-button>
  36.   </div>
  37. </template>
  38. <script setup lang="ts">
  39. const buttons = [
  40.   { type: '', text: 'plain' },
  41.   { type: 'primary', text: 'primary' },
  42.   { type: 'success', text: 'success' },
  43.   { type: 'info', text: 'info' },
  44.   { type: 'warning', text: 'warning' },
  45.   { type: 'danger', text: 'danger' },
  46. ] as const
  47. </script>
复制代码


8.图标按钮(要是图标里不必要加笔墨,那么直接是单标签)
  1. <template>
  2.   <div>
  3.     <el-button type="primary" :icon="Edit" />
  4.     <el-button type="primary" :icon="Share" />
  5.     <el-button type="primary" :icon="Delete" />
  6.     <el-button type="primary" :icon="Search">Search</el-button>
  7.     <el-button type="primary">
  8.       Upload<el-icon class="el-icon--right"><Upload /></el-icon>
  9.     </el-button>
  10.   </div>
  11. </template>
  12. <script setup lang="ts">
  13. import { Delete, Edit, Search, Share, Upload } from '@element-plus/icons-vue'
  14. </script>
复制代码


9.按钮组(el-button-group)
  1. <template>
  2.   <el-button-group>
  3.     <el-button type="primary" :icon="ArrowLeft">Previous Page</el-button>
  4.     <el-button type="primary">
  5.       Next Page<el-icon class="el-icon--right"><ArrowRight /></el-icon>
  6.     </el-button>
  7.   </el-button-group>
  8.   <el-button-group class="ml-4">
  9.     <el-button type="primary" :icon="Edit" />
  10.     <el-button type="primary" :icon="Share" />
  11.     <el-button type="primary" :icon="Delete" />
  12.   </el-button-group>
  13. </template>
  14. <script setup lang="ts">
  15. import {
  16.   ArrowLeft,
  17.   ArrowRight,
  18.   Delete,
  19.   Edit,
  20.   Share,
  21. } from '@element-plus/icons-vue'
  22. </script>
复制代码

  
10.加载状态按钮
  1. <template>
  2.   <el-button type="primary" loading>Loading</el-button>
  3.   <el-button type="primary" :loading-icon="Eleme" loading>Loading</el-button>
  4.   <el-button type="primary" loading>
  5.     <template #loading>
  6.       <div class="custom-loading">
  7.         <svg class="circular" viewBox="-10, -10, 50, 50">
  8.           <path
  9.             class="path"
  10.             d="
  11.             M 30 15
  12.             L 28 17
  13.             M 25.61 25.61
  14.             A 15 15, 0, 0, 1, 15 30
  15.             A 15 15, 0, 1, 1, 27.99 7.5
  16.             L 15 15
  17.           "
  18.             style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"
  19.           />
  20.         </svg>
  21.       </div>
  22.     </template>
  23.     Loading
  24.   </el-button>
  25. </template>
  26. <script lang="ts" setup>
  27. import { Eleme } from '@element-plus/icons-vue'
  28. </script>
  29. <style scoped>
  30. .el-button .custom-loading .circular {
  31.   margin-right: 6px;
  32.   width: 18px;
  33.   height: 18px;
  34.   animation: loading-rotate 2s linear infinite;
  35. }
  36. .el-button .custom-loading .circular .path {
  37.   animation: loading-dash 1.5s ease-in-out infinite;
  38.   stroke-dasharray: 90, 150;
  39.   stroke-dashoffset: 0;
  40.   stroke-width: 2;
  41.   stroke: var(--el-button-text-color);
  42.   stroke-linecap: round;
  43. }
  44. </style>
复制代码

  
11.调整尺寸 size ="small" size="large"
  1. <template>
  2.   <div class="flex flex-wrap items-center mb-4">
  3.     <el-button size="large">Large</el-button>
  4.     <el-button>Default</el-button>
  5.     <el-button size="small">Small</el-button>
  6.     <el-button size="large" :icon="Search">Search</el-button>
  7.     <el-button :icon="Search">Search</el-button>
  8.     <el-button size="small" :icon="Search">Search</el-button>
  9.   </div>
  10.   <div class="flex flex-wrap items-center mb-4">
  11.     <el-button size="large" round>Large</el-button>
  12.     <el-button round>Default</el-button>
  13.     <el-button size="small" round>Small</el-button>
  14.     <el-button size="large" :icon="Search" round>Search</el-button>
  15.     <el-button :icon="Search" round>Search</el-button>
  16.     <el-button size="small" :icon="Search" round>Search</el-button>
  17.   </div>
  18.   <div class="flex flex-wrap items-center">
  19.     <el-button :icon="Search" size="large" circle />
  20.     <el-button :icon="Search" circle />
  21.     <el-button :icon="Search" size="small" circle />
  22.   </div>
  23. </template>
  24. <script setup lang="ts">
  25. import { Search } from '@element-plus/icons-vue'
  26. </script>
复制代码

  
  12.自界说元素标签 tag="div"d
  1. <template>
  2.   <el-button>button</el-button>
  3.   <el-button tag="div" role="button" tabindex="0">div</el-button>
  4.   <el-button
  5.     type="primary"
  6.     tag="a"
  7.     href="https://github.com/element-plus/element-plus"
  8.     target="_blank"
  9.     rel="noopener noreferrer"
  10.   >
  11.     a
  12.   </el-button>
  13. </template>
复制代码


13.自界说颜色(isDark: 这是一个响应式变量,通常用于指示当前主题是“深色模式(Dark Mode)”还是“浅色模式(Light Mode))
  1. <script lang="ts" setup>
  2. import { isDark } from '~/composables/dark'
  3. </script>
  4. <template>
  5.   <div>
  6.     <el-button color="#626aef" :dark="isDark">Default</el-button>
  7.     <el-button color="#626aef" :dark="isDark" plain>Plain</el-button>
  8.     <el-button color="#626aef" :dark="isDark" disabled>Disabled</el-button>
  9.     <el-button color="#626aef" :dark="isDark" disabled plain>
  10.       Disabled Plain
  11.     </el-button>
  12.   </div>
  13. </template>
复制代码


  
  

  
button插槽:

  
button方法:
  




 
  

  • <el-button>:单个按钮,用于实行一个特定的操纵。
  • <el-button-group>:包含多个按钮,通常用于一组相干的操纵,比如多种选择或工具栏。
  • 利用 button-group 时,按钮之间的间距和样式会主动调整,视觉上更整齐
     
  示例:
  1. <template>
  2.   <el-button-group>
  3.     <el-button type="primary">按钮1</el-button>
  4.     <el-button>按钮2</el-button>
  5.     <el-button type="success">按钮3</el-button>
  6.   </el-button-group>
  7. </template>
复制代码
三个按钮被包裹在 button-group 中,形成了一个同一的操纵地域。
  
Border边框:

   边框样式:(实线和虚线)
  border-top:1px solid var(--el-border-color)
  1. <script setup>
  2. </script>
  3.   <template>
  4.   <table class="demo-border">
  5.     <tbody>
  6.       <tr>
  7.         <td class="text">Name</td>
  8.         <td class="text">Thickness</td>
  9.         <td class="line">Demo</td>
  10.       </tr>
  11.       <tr>
  12.         <td class="text">Solid</td>
  13.         <td class="text">1px</td>
  14.         <td class="line">
  15.           <!-- <div /> -->
  16.            <div></div>
  17.         </td>
  18.       </tr>
  19.       <tr>
  20.         <td class="text">Dashed</td>
  21.         <td class="text">2px</td>
  22.         <td class="line">
  23.           <div class="dashed" ></div>
  24.         </td>
  25.       </tr>
  26.     </tbody>
  27.   </table>
  28. </template>
  29. <style scoped>
  30. .demo-border .text {
  31.   width: 15%;
  32. }
  33. .demo-border .line {
  34.   width: 70%;
  35. }
  36. .demo-border .line div {
  37.   width: 100%;
  38.   height: 0;
  39.   border-top: 1px solid var(--el-border-color);  /*上边框,--el-border-color是element-plus中定义的一个css变量,是个默认颜色值*/
  40. }
  41. .demo-border .line .dashed {
  42.   border-top: 2px dashed var(--el-border-color);
  43. }
  44. </style>
复制代码



圆角样式:(el-border-radius)
  1. <script setup>
  2. </script>
  3. <template>
  4.   <!-- el-row创建行,gutter属性设置外边距,即列与列之间的间距 。: 前缀表示这是一个动态绑定,意味着 gutter 的值来自 Vue 的数据或计算属性-->
  5.   <el-row :gutter="12" class="demo-radius">
  6.     <el-col
  7.       v-for="(radius, i) in radiusGroup"
  8.       :key="i"
  9.       :span="6"
  10.       :xs="{ span: 12 }"
  11.     >
  12.       <div class="title">{{ radius.name }}</div>
  13.       <div class="value">
  14.         <code>
  15.           border-radius:
  16.           {{
  17.             radius.type
  18.               ? useCssVar(`--el-border-radius-${radius.type}`)
  19.               : '"0px"'
  20.           }}
  21.         </code>
  22.       </div>
  23.       <div
  24.         class="radius"
  25.         :style="{
  26.           borderRadius: radius.type
  27.             ? `var(--el-border-radius-${radius.type})`  <!----el-border-radius-->
  28.             : '',
  29.         }"
  30.       />
  31.     </el-col>
  32.   </el-row>
  33. </template>
  34. <script lang="ts" setup>
  35. import { ref } from 'vue'
  36. import { useCssVar } from '@vueuse/core'
  37. const radiusGroup = ref([
  38.   {
  39.     name: 'No Radius',
  40.     type: '',
  41.   },
  42.   {
  43.     name: 'Small Radius',
  44.     type: 'small',
  45.   },
  46.   {
  47.     name: 'Large Radius',
  48.     type: 'base',
  49.   },
  50.   {
  51.     name: 'Round Radius',
  52.     type: 'round',
  53.   },
  54. ])
  55. </script>
  56. <style scoped>
  57. .demo-radius .title {
  58.   color: var(--el-text-color-regular);
  59.   font-size: 18px;
  60.   margin: 10px 0;
  61. }
  62. .demo-radius .value {
  63.   color: var(--el-text-color-primary);
  64.   font-size: 16px;
  65.   margin: 10px 0;
  66. }
  67. .demo-radius .radius {
  68.   height: 40px;
  69.   width: 70%;
  70.   border: 1px solid var(--el-border-color);
  71.   border-radius: 0;
  72.   margin-top: 20px;
  73. }
  74. </style>
复制代码

  

  
阴影:(el-box-shadow)
  1. <template>
  2.   <div class="flex justify-between items-center flex-wrap">
  3.     <div
  4.       v-for="(shadow, i) in shadowGroup"
  5.       :key="i"
  6.       class="flex flex-col justify-center items-center"
  7.       m="auto"
  8.       w="46"
  9.     >
  10.       <div
  11.         class="inline-flex"
  12.         h="30"
  13.         w="30"
  14.         m="2"
  15.         :style="{
  16.           boxShadow: `var(${getCssVarName(shadow.type)})`,
  17.         }"
  18.       />
  19.       <span p="y-4" class="demo-shadow-text" text="sm">
  20.         {{ shadow.name }}
  21.       </span>
  22.       <code text="xs">
  23.         {{ getCssVarName(shadow.type) }}
  24.       </code>
  25.     </div>
  26.   </div>
  27. </template>
  28. <script lang="ts" setup>
  29. import { ref } from 'vue'
  30. const shadowGroup = ref([
  31.   {
  32.     name: 'Basic Shadow',
  33.     type: '',
  34.   },
  35.   {
  36.     name: 'Light Shadow',
  37.     type: 'light',
  38.   },
  39.   {
  40.     name: 'Lighter Shadow',
  41.     type: 'lighter',
  42.   },
  43.   {
  44.     name: 'Dark Shadow',
  45.     type: 'dark',
  46.   },
  47. ])
  48. const getCssVarName = (type: string) => {     
  49.   return `--el-box-shadow${type ? '-' : ''}${type}`    //el-box-shadow
  50. }
  51. </script>
复制代码


  
color色彩:Element Plus为了克制视觉转达差异,利用一套特定的调色板来规定颜色,为搭建的产品提供一致的表面视觉感受

   主色
 

  


中性色
中性色用于文本、配景和边框颜色。 通过运用不同的中性色,来表现层次结构

  

  

  
Container布局容器

   
  用于布局的容器组件,方便快速搭建页面的基本结构:
  <el-container>:外层容器。 当子元素中包含 <el-header> 或 <el-footer> 时,全部子元素会垂直上下分列, 否则会水平左右分列。
  <el-header>:顶栏容器。
  <el-aside>:侧边栏容器。
  <el-main>:主要地域容器。
  <el-footer>:底栏容器。

常见的页面布局
1.container包裹header和main
  1. <template>
  2.   <div class="common-layout">
  3.     <el-container>
  4.       <el-header style="background-color:#D4D7DE;color:red">Header</el-header>
  5.       <el-main style="background:#409EFF;color:blask">Main</el-main>
  6.     </el-container>
  7.   </div>
  8. </template>
复制代码




2.container包裹header和main和footer
  1. <template>
  2.   <div class="common-layout">
  3.     <el-container>
  4.       <el-header>Header</el-header>
  5.       <el-main>Main</el-main>
  6.       <el-footer>Footer</el-footer>
  7.     </el-container>
  8.   </div>
  9. </template>
复制代码


  

3.container包裹aside和main,不过要指定侧边栏width属性,明确指定侧边栏的宽度,从而确保整体布局的一致性和可预测性
用style设置容器配景色
  height在<el-container>标签无效
  1. <template>
  2.   <div class="common-layout">
  3.     <el-container>
  4.       <el-aside width="200px" style="background-color:pink">Aside</el-aside>
  5.       <el-main style="background-color:red">Main</el-main>
  6.     </el-container>
  7.   </div>
  8. </template>
复制代码




4.三个部分,大container包裹header和小container,小container包裹aside和main
  1. <template>
  2.   <div class="common-layout">
  3.     <el-container>
  4.       <el-header>Header</el-header>
  5.       <el-container>
  6.         <el-aside width="200px">Aside</el-aside>
  7.         <el-main>Main</el-main>
  8.       </el-container>
  9.     </el-container>
  10.   </div>
  11. </template>
复制代码


  
5.大container包裹所有,中container包裹aside,main,footer,小container包裹main和footer
  1. <template>
  2.   <div class="common-layout">
  3.     <el-container>
  4.       <el-header>Header</el-header>
  5.       <el-container>
  6.         <el-aside width="200px">Aside</el-aside>
  7.         <el-container>
  8.           <el-main>Main</el-main>
  9.           <el-footer>Footer</el-footer>
  10.         </el-container>
  11.       </el-container>
  12.     </el-container>
  13.   </div>
  14. </template>
复制代码






  
|






  

  
lcon图标
Element Plus提供了一套常用的图标集合(如果想要直接利用,必要全局注册组件)
   安装
  
利用包管理器
  # NPM
npm install @element-plus/icons-vue
  
# Yarn
yarn add @element-plus/icons-vue
  
# pnpm
pnpm install @element-plus/icons-vue

法1:注册所有图标
  必要从@element-plus/icons-vue 中导入所有图标并举行全局注册
  

  • Object.entries(ElementPlusIconsVue): 获取 ElementPlusIconsVue 对象中所有的键值对(图标组件)。
  • for (const [key, component] of ...): 遍历每个图标的键(名称)和对应的组件。
  • app.component(key, component): 将每个图标组件以其名称注册到 Vue 应用中,使得在模板中可以直接利用这些图标。
  这样,开发者就可以方便地在应用中利用 ElementPlus 提供的图标组件
  1. // main.js
  2. // 如果您正在使用CDN引入,请删除下面一行。
  3. import * as ElementPlusIconsVue from '@element-plus/icons-vue'
  4. const app = createApp(App)
  5. for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  6.   app.component(key, component)
  7. }
复制代码
法2:直接通过欣赏器的HTML标签导入Element Plus,然后就能利用全局变量ElementPlusIconsVue
根据不同的 CDN 提供商有不同的引入方式, 根据不同的 CDN 提供商有不同的引入方式, 我们在这里以 unpkg 和 jsDelivr 举例
利用unpkg:
<script src="//unpkg.com/@element-plus/icons-vue"></script>

利用jsDelivr:
  <script src="//cdn.jsdelivr.net/npm/@element-plus/icons-vue"></script>

底子用法
 
  1. <!-- 使用 el-icon 为 SVG 图标提供属性 -->
  2. <template>
  3.   <div>
  4.     <el-icon :size="size" :color="color">
  5.       <Edit />
  6.     </el-icon>
  7.     <!-- 或者独立使用它,不从父级获取属性 -->
  8.     <Edit />
  9.   </div>
  10. </template>
  11. <!--<Edit /> 是一个 SVG 图标组件,通常来自 Element Plus 图标库。它用于在界面中显示一个编辑图标。代码中的 <el-icon> 组件用来包裹这个图标,并通过 :size 和 :color 属性动态设置图标的大小和颜色。如果不使用 <el-icon> 包裹,<Edit /> 图标仍然可以独立显示,但会使用默认样式。-->
复制代码
联合el-icon利用
  1. <template>
  2.   <p>
  3.     with extra class <b>is-loading</b>, your icon is able to rotate 360 deg in 2
  4.     seconds, you can also override this
  5.   </p>
  6.   <el-icon :size="20">
  7.     <Edit />
  8.   </el-icon>
  9.   <el-icon color="#409efc" class="no-inherit">
  10.     <Share />
  11.   </el-icon>
  12.   <el-icon>
  13.     <Delete />
  14.   </el-icon>
  15.   <el-icon class="is-loading">
  16.     <Loading />
  17.   </el-icon>
  18.   <el-button type="primary">
  19.     <el-icon style="vertical-align: middle">
  20.       <Search />
  21.     </el-icon>
  22.     <span style="vertical-align: middle"> Search </span>
  23.   </el-button>
  24. </template>
复制代码

  
直接利用svg图标
 
  1. <template>
  2.   <div style="font-size: 20px">
  3.     <!-- 由于SVG图标默认不携带任何属性 -->
  4.     <!-- 你需要直接提供它们 -->
  5.     <Edit style="width: 1em; height: 1em; margin-right: 8px" />
  6.     <Share style="width: 1em; height: 1em; margin-right: 8px" />
  7.     <Delete style="width: 1em; height: 1em; margin-right: 8px" />
  8.     <Search style="width: 1em; height: 1em; margin-right: 8px" />
  9.   </div>
  10. </template>
复制代码


  
Layout布局
通过底子的24分栏,迅速简便创建布局
   组件默认利用 Flex 布局,不必要手动设置 type="flex"。
  请注意父容器克制利用 inline 相干样式,会导致组件宽度不能撑满。

1.el-row 行
  el-col 列
<el-col> 组件的 :span 属性用于界说列的宽度
  1. <template>
  2.   <el-row>
  3.     <el-col :span="24"><div class="grid-content ep-bg-purple-dark"></div></el-col>
  4.   </el-row>
  5.   <el-row>
  6.     <el-col :span="12"><div class="grid-content ep-bg-purple"></div></el-col>
  7.     <el-col :span="12"><div class="grid-content ep-bg-purple-light"></div></el-col>
  8.   </el-row>
  9.   <el-row>
  10.     <el-col :span="8"><div class="grid-content ep-bg-purple"></div></el-col>
  11.     <el-col :span="8"><div class="grid-content ep-bg-purple-light"></div></el-col>
  12.     <el-col :span="8"><div class="grid-content ep-bg-purple"></div></el-col>
  13.   </el-row>
  14.   <el-row>
  15.     <el-col :span="6"><div class="grid-content ep-bg-purple"></div></el-col>
  16.     <el-col :span="6"><div class="grid-content ep-bg-purple-light"></div></el-col>
  17.     <el-col :span="6"><div class="grid-content ep-bg-purple"></div></el-col>
  18.     <el-col :span="6"><div class="grid-content ep-bg-purple-light"></div></el-col>
  19.   </el-row>
  20.   <el-row>
  21.     <el-col :span="4"><div class="grid-content ep-bg-purple"></div></el-col>
  22.     <el-col :span="4"><div class="grid-content ep-bg-purple-light"></div></el-col>
  23.     <el-col :span="4"><div class="grid-content ep-bg-purple"></div></el-col>
  24.     <el-col :span="4"><div class="grid-content ep-bg-purple-light"></div></el-col>
  25.     <el-col :span="4"><div class="grid-content ep-bg-purple"></div></el-col>
  26.     <el-col :span="4"><div class="grid-content ep-bg-purple-light"></div></el-col>
  27.   </el-row>
  28. </template>
  29. <style lang="scss">
  30. .grid-content {
  31.   height: 100px; /* 或其他高度 */
  32. }
  33. .ep-bg-purple-dark {
  34.   background-color: #6a0dad; /* 深紫色 */
  35. }
  36. .ep-bg-purple {
  37.   background-color: #8a2be2; /* 紫色 */
  38. }
  39. .ep-bg-purple-light {
  40.   background-color: #d8bfd8; /* 浅紫色 */
  41. }
  42. </style>
复制代码


  
2.分栏间隔 gutter指定列之间的间距
  1. <template>
  2.   <el-row :gutter="20">
  3.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  4.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  5.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  6.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  7.   </el-row>
  8. </template>
  9. <style>
  10. .el-row {
  11.   margin-bottom: 20px;
  12. }
  13. .el-row:last-child {
  14.   margin-bottom: 0;
  15. }
  16. .el-col {
  17.   border-radius: 4px;
  18. }
  19. .grid-content {
  20.   border-radius: 4px;
  21.   min-height: 36px;
  22. }
  23. </style>
复制代码


  
3.混合布局
  1. <template>
  2.   <el-row :gutter="20">
  3.     <el-col :span="16"><div class="grid-content ep-bg-purple" /></el-col>
  4.     <el-col :span="8"><div class="grid-content ep-bg-purple" /></el-col>
  5.   </el-row>
  6.   <el-row :gutter="20">
  7.     <el-col :span="8"><div class="grid-content ep-bg-purple" /></el-col>
  8.     <el-col :span="8"><div class="grid-content ep-bg-purple" /></el-col>
  9.     <el-col :span="4"><div class="grid-content ep-bg-purple" /></el-col>
  10.     <el-col :span="4"><div class="grid-content ep-bg-purple" /></el-col>
  11.   </el-row>
  12.   <el-row :gutter="20">
  13.     <el-col :span="4"><div class="grid-content ep-bg-purple" /></el-col>
  14.     <el-col :span="16"><div class="grid-content ep-bg-purple" /></el-col>
  15.     <el-col :span="4"><div class="grid-content ep-bg-purple" /></el-col>
  16.   </el-row>
  17. </template>
  18. <style>
  19. .el-row {
  20.   margin-bottom: 20px;
  21. }
  22. .el-row:last-child {
  23.   margin-bottom: 0;
  24. }
  25. .el-col {
  26.   border-radius: 4px;
  27. }
  28. .grid-content {
  29.   border-radius: 4px;
  30.   min-height: 36px;
  31. }
  32. </style>
复制代码




4.列偏移 
  1. <template>
  2.   <el-row :gutter="20">
  3.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  4.     <el-col :span="6" :offset="6">
  5.       <div class="grid-content ep-bg-purple" />
  6.     </el-col>
  7.   </el-row>
  8.   <el-row :gutter="20">
  9.     <el-col :span="6" :offset="6">
  10.       <div class="grid-content ep-bg-purple" />
  11.     </el-col>
  12.     <el-col :span="6" :offset="6">
  13.       <div class="grid-content ep-bg-purple" />
  14.     </el-col>
  15.   </el-row>
  16.   <el-row :gutter="20">
  17.     <el-col :span="12" :offset="6">
  18.       <div class="grid-content ep-bg-purple" />
  19.     </el-col>
  20.   </el-row>
  21. </template>
  22. <style>
  23. .el-row {
  24.   margin-bottom: 20px;
  25. }
  26. .el-row:last-child {
  27.   margin-bottom: 0;
  28. }
  29. .el-col {
  30.   border-radius: 4px;
  31. }
  32. .grid-content {
  33.   border-radius: 4px;
  34.   min-height: 36px;
  35. }
  36. </style>
复制代码


  
5.对齐方式
  1. <template>
  2.   <el-row class="row-bg">
  3.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  4.     <el-col :span="6"><div class="grid-content ep-bg-purple-light" /></el-col>
  5.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  6.   </el-row>
  7.   <el-row class="row-bg" justify="center">
  8.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  9.     <el-col :span="6"><div class="grid-content ep-bg-purple-light" /></el-col>
  10.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  11.   </el-row>
  12.   <el-row class="row-bg" justify="end">
  13.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  14.     <el-col :span="6"><div class="grid-content ep-bg-purple-light" /></el-col>
  15.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  16.   </el-row>
  17.   <el-row class="row-bg" justify="space-between">
  18.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  19.     <el-col :span="6"><div class="grid-content ep-bg-purple-light" /></el-col>
  20.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  21.   </el-row>
  22.   <el-row class="row-bg" justify="space-around">
  23.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  24.     <el-col :span="6"><div class="grid-content ep-bg-purple-light" /></el-col>
  25.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  26.   </el-row>
  27.   <el-row class="row-bg" justify="space-evenly">
  28.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  29.     <el-col :span="6"><div class="grid-content ep-bg-purple-light" /></el-col>
  30.     <el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col>
  31.   </el-row>
  32. </template>
  33. <style>
  34. .el-row {
  35.   margin-bottom: 20px;
  36. }
  37. .el-row:last-child {
  38.   margin-bottom: 0;
  39. }
  40. .el-col {
  41.   border-radius: 4px;
  42. }
  43. .grid-content {
  44.   border-radius: 4px;
  45.   min-height: 36px;
  46. }
  47. </style>
复制代码



6.响应式布局
  1. <template>
  2.   <el-row :gutter="10">
  3.     <el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1">
  4.       <div class="grid-content ep-bg-purple" />
  5.     </el-col>
  6.     <el-col :xs="4" :sm="6" :md="8" :lg="9" :xl="11">
  7.       <div class="grid-content ep-bg-purple-light" />
  8.     </el-col>
  9.     <el-col :xs="4" :sm="6" :md="8" :lg="9" :xl="11">
  10.       <div class="grid-content ep-bg-purple" />
  11.     </el-col>
  12.     <el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1">
  13.       <div class="grid-content ep-bg-purple-light" />
  14.     </el-col>
  15.   </el-row>
  16. </template>
  17. <style>
  18. .el-col {
  19.   border-radius: 4px;
  20. }
  21. .grid-content {
  22.   border-radius: 4px;
  23.   min-height: 36px;
  24. }
  25. </style>
复制代码









  
Link链接
   链接标签和按钮都有type属性,disabled
1.底子笔墨链接  el-link
  1. <template>
  2.   <div>
  3.     <el-link href="https://element-plus.org" target="_blank">default</el-link>
  4.     <el-link type="primary">primary</el-link>
  5.     <el-link type="success">success</el-link>
  6.     <el-link type="warning">warning</el-link>
  7.     <el-link type="danger">danger</el-link>
  8.     <el-link type="info">info</el-link>
  9.   </div>
  10. </template>
  11. <style scoped>
  12. .el-link {
  13.   margin-right: 8px;
  14. }
  15. .el-link .el-icon--right.el-icon {
  16.   vertical-align: text-bottom;
  17. }
  18. </style>
复制代码
2禁用状态:
  1. <template>
  2.   <div>
  3.     <el-link disabled>default</el-link>
  4.     <el-link type="primary" disabled>primary</el-link>
  5.     <el-link type="success" disabled>success</el-link>
  6.     <el-link type="warning" disabled>warning</el-link>
  7.     <el-link type="danger" disabled>danger</el-link>
  8.     <el-link type="info" disabled>info</el-link>
  9.   </div>
  10. </template>
  11. <style scoped>
  12. .el-link {
  13.   margin-right: 8px;
  14. }
  15. .el-link .el-icon--right.el-icon {
  16.   vertical-align: text-bottom;
  17. }
  18. </style>
复制代码



3.下划线  :underline="false"
  1. <template>
  2.   <div>
  3.     <el-link :underline="false">Without Underline</el-link>
  4.     <el-link>With Underline</el-link>
  5.   </div>
  6. </template>
  7. <style scoped>
  8. .el-link {
  9.   margin-right: 8px;
  10. }
  11. .el-link .el-icon--right.el-icon {
  12.   vertical-align: text-bottom;
  13. }
  14. </style>
复制代码



4.图标
链接标签中引用 :icon="edit"
  毗连标签包裹图标标签
  1. <template>
  2.   <div>
  3.     <el-link :icon="Edit">Edit</el-link>
  4.     <el-link>
  5.       Check<el-icon class="el-icon--right"><icon-view /></el-icon>
  6.     </el-link>
  7.   </div>
  8. </template>
  9. <script setup lang="ts">
  10. import { Edit, View as IconView } from '@element-plus/icons-vue'
  11. </script>
  12. <style scoped>
  13. .el-link {
  14.   margin-right: 8px;
  15. }
  16. </style>
复制代码


  
scrollbar滚动条
   1.el-scrollbar
  1. <template>
  2.   <el-scrollbar height="400px">
  3.     <p v-for="item in 20" :key="item" class="scrollbar-demo-item">{{ item }}</p>
  4.   </el-scrollbar>
  5. </template>
  6. <style scoped>
  7. .scrollbar-demo-item {
  8.   display: flex;
  9.   align-items: center;
  10.   justify-content: center;
  11.   height: 50px;
  12.   margin: 10px;
  13.   text-align: center;
  14.   border-radius: 4px;
  15.   background: var(--el-color-primary-light-9);
  16.   color: var(--el-color-primary);
  17. }
  18. </style>
复制代码


  
2.横向滚动
  1. <template>
  2.   <el-scrollbar>
  3.     <div class="scrollbar-flex-content">
  4.       <p v-for="item in 50" :key="item" class="scrollbar-demo-item">
  5.         {{ item }}
  6.       </p>
  7.     </div>
  8.   </el-scrollbar>
  9. </template>
  10. <style scoped>
  11. .scrollbar-flex-content {
  12.   display: flex;
  13. }
  14. .scrollbar-demo-item {
  15.   flex-shrink: 0;
  16.   display: flex;
  17.   align-items: center;
  18.   justify-content: center;
  19.   width: 100px;
  20.   height: 50px;
  21.   margin: 10px;
  22.   text-align: center;
  23.   border-radius: 4px;
  24.   background: var(--el-color-danger-light-9);
  25.   color: var(--el-color-danger);
  26. }
  27. </style>
复制代码


  
  3.最大高度:
  1. <template>
  2.   <el-button @click="add">Add Item</el-button>
  3.   <el-button @click="onDelete">Delete Item</el-button>
  4.   <el-scrollbar max-height="400px">
  5.     <p v-for="item in count" :key="item" class="scrollbar-demo-item">
  6.       {{ item }}
  7.     </p>
  8.   </el-scrollbar>
  9. </template>
  10. <script lang="ts" setup>
  11. import { ref } from 'vue'
  12. const count = ref(3)
  13. const add = () => {
  14.   count.value++
  15. }
  16. const onDelete = () => {
  17.   if (count.value > 0) {
  18.     count.value--
  19.   }
  20. }
  21. </script>
  22. <style scoped>
  23. .scrollbar-demo-item {
  24.   display: flex;
  25.   align-items: center;
  26.   justify-content: center;
  27.   height: 50px;
  28.   margin: 10px;
  29.   text-align: center;
  30.   border-radius: 4px;
  31.   background: var(--el-color-primary-light-9);
  32.   color: var(--el-color-primary);
  33. }
  34. </style>
复制代码



4.手动滚动
  1. <template>
  2.   <el-scrollbar ref="scrollbarRef" height="400px" always @scroll="scroll">
  3.     <div ref="innerRef">
  4.       <p v-for="item in 20" :key="item" class="scrollbar-demo-item">
  5.         {{ item }}
  6.       </p>
  7.     </div>
  8.   </el-scrollbar>
  9.   <el-slider
  10.     v-model="value"
  11.     :max="max"
  12.     :format-tooltip="formatTooltip"
  13.     @input="inputSlider"
  14.   />
  15. </template>
  16. <script lang="ts" setup>
  17. import { onMounted, ref } from 'vue'
  18. import { ElScrollbar } from 'element-plus'
  19. const max = ref(0)
  20. const value = ref(0)
  21. const innerRef = ref<HTMLDivElement>()
  22. const scrollbarRef = ref<InstanceType<typeof ElScrollbar>>()
  23. onMounted(() => {
  24.   max.value = innerRef.value!.clientHeight - 380
  25. })
  26. const inputSlider = (value: number) => {
  27.   scrollbarRef.value!.setScrollTop(value)
  28. }
  29. const scroll = ({ scrollTop }) => {
  30.   value.value = scrollTop
  31. }
  32. const formatTooltip = (value: number) => {
  33.   return `${value} px`
  34. }
  35. </script>
  36. <style scoped>
  37. .scrollbar-demo-item {
  38.   display: flex;
  39.   align-items: center;
  40.   justify-content: center;
  41.   height: 50px;
  42.   margin: 10px;
  43.   text-align: center;
  44.   border-radius: 4px;
  45.   background: var(--el-color-primary-light-9);
  46.   color: var(--el-color-primary);
  47. }
  48. .el-slider {
  49.   margin-top: 20px;
  50. }
  51. </style>
复制代码

  

  

  

  
space间距
   虽然我们拥有 Divider 组件,但许多时候我们必要不是一个被 Divider 组件 分割开的页面结构,因此我们会重复的利用许多的 Divider 组件,这在我们的开发效率上造成了肯定的困扰。 间距组件就是为了办理这种困扰应运而生的



  

  

  

  

  

  

  

  

  





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表