Element-plus安装及其基础组件使用

简而言之,在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 的封装,它提供了一系列预定义的样式和功能,使得开发者可以更轻松地构建一致且美观的用户界面

  1. 封装Element Plus 组件将原生 HTML 元素(如按钮、表格等)进行了封装,增加了丰富的样式和功能选项。

  2. 样式与一致性:组件自带的样式确保了在不同设备和浏览器上的一致性,减少了样式调整的复杂性。

  3. 事件处理:尽管组件库提供了许多内置功能,事件处理仍然需要使用 JavaScript 进行定义和处理。这与原生 HTML 是一样的。

  4. 使用方便:通过使用组件,开发者可以更快地实现复杂的功能,而不必从头开始设计和实现所有的样式和行为。

 一.安装

使用包管理器:

# 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)

完整引入(对打包后的文件大小不在乎,使用完整导入更方便)

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

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

安装 unplugin-vue-components 和 unplugin-auto-import

npm install -D unplugin-vue-components unplugin-auto-import 

 将下面代码插入vite配置文件vite.config.js中

// vite.config.jsimport { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'export default defineConfig({plugins: [vue(), //添加vue插件,千万不要把它忘记了,报一堆错,浏览器一片红AutoImport({resolvers: [ElementPlusResolver()],}),Components({resolvers: [ElementPlusResolver()],}),],
})

作用:
 

 自动导入:使用 unplugin-auto-import,可以在代码中直接使用 Element Plus 的 API,而无需手动导入,这样可以简化代码并提高开发效率。

自动注册组件:通过 unplugin-vue-componentsElementPlusResolver,可以自动注册所有使用的 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:分页组件,用于数据分页展示。


组件的属性和方法:

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

    • typesize:用于设置按钮的类型和尺寸。
    • placeholder:用于设置输入框的占位符文本。
  • 事件:组件通常会提供事件监听,例如:

    • click:按钮的点击事件。
    • change:输入框内容变化时触发的事件。
  • 方法:某些组件提供的方法,可以在实例中调用,例如:

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

全局配置

在引入ElementPlus时,可以传入一个包含size和zIndex属性的全局配置对象。size用于设置表单组建的默认尺寸,zIndex用于设置弹出组件的层级,zIndex的默认值为2000

完整引入(上边注册库仅仅是app.use(ElementPlus))

import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import App from './App.vue'const app = createApp(App)
app.use(ElementPlus, { size: 'small', zIndex: 3000 })

按需引入:

<template><el-config-provider :size="size" :z-index="zIndex"><app /></el-config-provider>
</template><script>
import { defineComponent } from 'vue'
import { ElConfigProvider } from 'element-plus'export default defineComponent({components: {ElConfigProvider,},setup() {return {zIndex: 3000,size: 'small',}},
})
</script>

 三.组件

基础组件:
button按钮:

button属性:

1.type用来指定按钮内的背景颜色,但是按钮内的文字颜色是白色

<div class="mb-4"><el-button>Default</el-button><el-button type="primary">Primary</el-button><el-button type="success">Success</el-button><el-button type="info">Info</el-button><el-button type="warning">Warning</el-button><el-button type="danger">Danger</el-button></div>

2.plain属性确定是否为朴素按钮,设置了朴素按钮之后,仅显示边框颜色和透明背景色

<div class="mb-4"><el-button plain>Plain</el-button><el-button type="primary" plain>Primary</el-button> <!--有颜色的边框和文本,背景没有颜色--><el-button type="success" plain>Success</el-button><el-button type="info" plain>Info</el-button><el-button type="warning" plain>Warning</el-button><el-button type="danger" plain>Danger</el-button></div>


3.round 按钮是否为圆角样式

  <div class="mb-4"><el-button round>Round</el-button><el-button type="primary" round>Primary</el-button><el-button type="success" round>Success</el-button><el-button type="info" round>Info</el-button><el-button type="warning" round>Warning</el-button><el-button type="danger" round>Danger</el-button></div>


4.circle 是否是圆形按钮 icon 图标,前面有冒号是动态绑定,没有是静态

  <div><el-button :icon="Search" circle /><el-button type="primary" :icon="Edit" circle /><el-button type="success" :icon="Check" circle /><el-button type="info" :icon="Message" circle /><el-button type="warning" :icon="Star" circle /><el-button type="danger" :icon="Delete" circle /></div>


5.disabled 定义按钮是否禁用 

<template><div class="mb-4"><el-button disabled>Default</el-button><el-button type="primary" disabled>Primary</el-button><el-button type="success" disabled>Success</el-button><el-button type="info" disabled>Info</el-button><el-button type="warning" disabled>Warning</el-button><el-button type="danger" disabled>Danger</el-button></div><div><el-button plain disabled>Plain</el-button><el-button type="primary" plain disabled>Primary</el-button><el-button type="success" plain disabled>Success</el-button><el-button type="info" plain disabled>Info</el-button><el-button type="warning" plain disabled>Warning</el-button><el-button type="danger" plain disabled>Danger</el-button></div>
</template>



6.链接按钮 link

<template><p>Basic link button</p><div class="mb-4"><el-buttonv-for="button in buttons":key="button.text":type="button.type"link>{{ button.text }}</el-button></div><p>Disabled link button</p><div><el-buttonv-for="button in buttons":key="button.text":type="button.type"link  <!--链接按钮-->disabled>{{ button.text }}</el-button></div>
</template><script setup lang="ts">
const buttons = [{ type: '', text: 'plain' },{ type: 'primary', text: 'primary' },{ type: 'success', text: 'success' },{ type: 'info', text: 'info' },{ type: 'warning', text: 'warning' },{ type: 'danger', text: 'danger' },
] as const
</script>


7.文字按钮  没有边框和背景色的按钮

<template><p>Basic text button</p><div class="mb-4"><el-buttonv-for="button in buttons":key="button.text":type="button.type"text   >{{ button.text }}</el-button></div><p>Background color always on</p><div class="mb-4"><el-buttonv-for="button in buttons":key="button.text":type="button.type"text bg>{{ button.text }}</el-button></div><p>Disabled text button</p><div><el-buttonv-for="button in buttons":key="button.text":type="button.type"textdisabled>{{ button.text }}</el-button></div>
</template><script setup lang="ts">
const buttons = [{ type: '', text: 'plain' },{ type: 'primary', text: 'primary' },{ type: 'success', text: 'success' },{ type: 'info', text: 'info' },{ type: 'warning', text: 'warning' },{ type: 'danger', text: 'danger' },
] as const
</script>



8.图标按钮(要是图标里不需要加文字,那么直接是单标签)

<template><div><el-button type="primary" :icon="Edit" /><el-button type="primary" :icon="Share" /><el-button type="primary" :icon="Delete" /><el-button type="primary" :icon="Search">Search</el-button><el-button type="primary">Upload<el-icon class="el-icon--right"><Upload /></el-icon></el-button></div>
</template>
<script setup lang="ts">
import { Delete, Edit, Search, Share, Upload } from '@element-plus/icons-vue'
</script>



9.按钮组(el-button-group)

<template><el-button-group><el-button type="primary" :icon="ArrowLeft">Previous Page</el-button><el-button type="primary">Next Page<el-icon class="el-icon--right"><ArrowRight /></el-icon></el-button></el-button-group><el-button-group class="ml-4"><el-button type="primary" :icon="Edit" /><el-button type="primary" :icon="Share" /><el-button type="primary" :icon="Delete" /></el-button-group>
</template><script setup lang="ts">
import {ArrowLeft,ArrowRight,Delete,Edit,Share,
} from '@element-plus/icons-vue'
</script>


10.加载状态按钮

<template><el-button type="primary" loading>Loading</el-button><el-button type="primary" :loading-icon="Eleme" loading>Loading</el-button><el-button type="primary" loading><template #loading><div class="custom-loading"><svg class="circular" viewBox="-10, -10, 50, 50"><pathclass="path"d="M 30 15L 28 17M 25.61 25.61A 15 15, 0, 0, 1, 15 30A 15 15, 0, 1, 1, 27.99 7.5L 15 15"style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/></svg></div></template>Loading</el-button>
</template><script lang="ts" setup>
import { Eleme } from '@element-plus/icons-vue'
</script><style scoped>
.el-button .custom-loading .circular {margin-right: 6px;width: 18px;height: 18px;animation: loading-rotate 2s linear infinite;
}
.el-button .custom-loading .circular .path {animation: loading-dash 1.5s ease-in-out infinite;stroke-dasharray: 90, 150;stroke-dashoffset: 0;stroke-width: 2;stroke: var(--el-button-text-color);stroke-linecap: round;
}
</style>


11.调整尺寸 size ="small" size="large"

<template><div class="flex flex-wrap items-center mb-4"><el-button size="large">Large</el-button><el-button>Default</el-button><el-button size="small">Small</el-button><el-button size="large" :icon="Search">Search</el-button><el-button :icon="Search">Search</el-button><el-button size="small" :icon="Search">Search</el-button></div><div class="flex flex-wrap items-center mb-4"><el-button size="large" round>Large</el-button><el-button round>Default</el-button><el-button size="small" round>Small</el-button><el-button size="large" :icon="Search" round>Search</el-button><el-button :icon="Search" round>Search</el-button><el-button size="small" :icon="Search" round>Search</el-button></div><div class="flex flex-wrap items-center"><el-button :icon="Search" size="large" circle /><el-button :icon="Search" circle /><el-button :icon="Search" size="small" circle /></div>
</template><script setup lang="ts">
import { Search } from '@element-plus/icons-vue'
</script>

12.自定义元素标签 tag="div"d

<template><el-button>button</el-button><el-button tag="div" role="button" tabindex="0">div</el-button><el-buttontype="primary"tag="a"href="https://github.com/element-plus/element-plus"target="_blank"rel="noopener noreferrer">a</el-button>
</template>



13.自定义颜色(isDark: 这是一个响应式变量,通常用于指示当前主题是“深色模式(Dark Mode)”还是“浅色模式(Light Mode))

<script lang="ts" setup>
import { isDark } from '~/composables/dark'
</script><template><div><el-button color="#626aef" :dark="isDark">Default</el-button><el-button color="#626aef" :dark="isDark" plain>Plain</el-button><el-button color="#626aef" :dark="isDark" disabled>Disabled</el-button><el-button color="#626aef" :dark="isDark" disabled plain>Disabled Plain</el-button></div>
</template>



button插槽:


button方法:





 

  • <el-button>:单个按钮,用于执行一个特定的操作。
  • <el-button-group>:包含多个按钮,通常用于一组相关的操作,比如多种选择或工具栏。
  • 使用 button-group 时,按钮之间的间距和样式会自动调整,视觉上更整齐
     

示例:

<template><el-button-group><el-button type="primary">按钮1</el-button><el-button>按钮2</el-button><el-button type="success">按钮3</el-button></el-button-group>
</template>

三个按钮被包裹在 button-group 中,形成了一个统一的操作区域。

Border边框:

边框样式:(实线和虚线)

border-top:1px solid var(--el-border-color)

<script setup>
</script><template><table class="demo-border"><tbody><tr><td class="text">Name</td><td class="text">Thickness</td><td class="line">Demo</td></tr><tr><td class="text">Solid</td><td class="text">1px</td><td class="line"><!-- <div /> --><div></div></td></tr><tr><td class="text">Dashed</td><td class="text">2px</td><td class="line"><div class="dashed" ></div></td></tr></tbody></table>
</template>
<style scoped>
.demo-border .text {width: 15%;
}
.demo-border .line {width: 70%;
}
.demo-border .line div {width: 100%;height: 0;border-top: 1px solid var(--el-border-color);  /*上边框,--el-border-color是element-plus中定义的一个css变量,是个默认颜色值*/
}
.demo-border .line .dashed {border-top: 2px dashed var(--el-border-color);
}
</style>




圆角样式:(el-border-radius)

<script setup>
</script><template><!-- el-row创建行,gutter属性设置外边距,即列与列之间的间距 。: 前缀表示这是一个动态绑定,意味着 gutter 的值来自 Vue 的数据或计算属性--><el-row :gutter="12" class="demo-radius"> <el-colv-for="(radius, i) in radiusGroup":key="i":span="6":xs="{ span: 12 }"><div class="title">{{ radius.name }}</div><div class="value"><code>border-radius:{{radius.type? useCssVar(`--el-border-radius-${radius.type}`): '"0px"'}}</code></div><divclass="radius":style="{borderRadius: radius.type? `var(--el-border-radius-${radius.type})`  <!----el-border-radius-->: '',}"/></el-col></el-row></template><script lang="ts" setup>
import { ref } from 'vue'
import { useCssVar } from '@vueuse/core'const radiusGroup = ref([{name: 'No Radius',type: '',},{name: 'Small Radius',type: 'small',},{name: 'Large Radius',type: 'base',},{name: 'Round Radius',type: 'round',},
])
</script>
<style scoped>
.demo-radius .title {color: var(--el-text-color-regular);font-size: 18px;margin: 10px 0;
}
.demo-radius .value {color: var(--el-text-color-primary);font-size: 16px;margin: 10px 0;
}
.demo-radius .radius {height: 40px;width: 70%;border: 1px solid var(--el-border-color);border-radius: 0;margin-top: 20px;
}
</style>


阴影:(el-box-shadow)

<template><div class="flex justify-between items-center flex-wrap"><divv-for="(shadow, i) in shadowGroup":key="i"class="flex flex-col justify-center items-center"m="auto"w="46"><divclass="inline-flex"h="30"w="30"m="2":style="{boxShadow: `var(${getCssVarName(shadow.type)})`,}"/><span p="y-4" class="demo-shadow-text" text="sm">{{ shadow.name }}</span><code text="xs">{{ getCssVarName(shadow.type) }}</code></div></div>
</template><script lang="ts" setup>
import { ref } from 'vue'const shadowGroup = ref([{name: 'Basic Shadow',type: '',},{name: 'Light Shadow',type: 'light',},{name: 'Lighter Shadow',type: 'lighter',},{name: 'Dark Shadow',type: 'dark',},
])const getCssVarName = (type: string) => {     return `--el-box-shadow${type ? '-' : ''}${type}`    //el-box-shadow
}
</script>


color色彩:Element Plus为了避免视觉传达差异,使用一套特定的调色板来规定颜色,为搭建的产品提供一致的外观视觉感受

主色
 




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

Container布局容器

用于布局的容器组件,方便快速搭建页面的基本结构:

<el-container>:外层容器。 当子元素中包含 <el-header> 或 <el-footer> 时,全部子元素会垂直上下排列, 否则会水平左右排列。

<el-header>:顶栏容器。

<el-aside>:侧边栏容器。

<el-main>:主要区域容器。

<el-footer>:底栏容器。

常见的页面布局
1.container包裹header和main

<template><div class="common-layout"><el-container><el-header style="background-color:#D4D7DE;color:red">Header</el-header><el-main style="background:#409EFF;color:blask">Main</el-main></el-container></div>
</template>





2.container包裹header和main和footer

<template><div class="common-layout"><el-container><el-header>Header</el-header><el-main>Main</el-main><el-footer>Footer</el-footer></el-container></div>
</template>




3.container包裹aside和main,不过要指定侧边栏width属性,明确指定侧边栏的宽度,从而确保整体布局的一致性和可预测性
用style设置容器背景色

height在<el-container>标签无效

<template><div class="common-layout"><el-container><el-aside width="200px" style="background-color:pink">Aside</el-aside><el-main style="background-color:red">Main</el-main></el-container></div>
</template>





4.三个部分,大container包裹header和小container,小container包裹aside和main

<template><div class="common-layout"><el-container><el-header>Header</el-header><el-container><el-aside width="200px">Aside</el-aside><el-main>Main</el-main></el-container></el-container></div>
</template>



5.大container包裹所有,中container包裹aside,main,footer,小container包裹main和footer

<template><div class="common-layout"><el-container><el-header>Header</el-header><el-container><el-aside width="200px">Aside</el-aside><el-container><el-main>Main</el-main><el-footer>Footer</el-footer></el-container></el-container></el-container></div>
</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 中导入所有图标并进行全局注册

  1. Object.entries(ElementPlusIconsVue): 获取 ElementPlusIconsVue 对象中所有的键值对(图标组件)。

  2. for (const [key, component] of ...): 遍历每个图标的键(名称)和对应的组件。

  3. app.component(key, component): 将每个图标组件以其名称注册到 Vue 应用中,使得在模板中可以直接使用这些图标。

这样,开发者就可以方便地在应用中使用 ElementPlus 提供的图标组件

// main.js// 如果您正在使用CDN引入,请删除下面一行。
import * as ElementPlusIconsVue from '@element-plus/icons-vue'const app = createApp(App)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {app.component(key, component)
}

法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>

基础用法
 

<!-- 使用 el-icon 为 SVG 图标提供属性 -->
<template><div><el-icon :size="size" :color="color"><Edit /></el-icon><!-- 或者独立使用它,不从父级获取属性 --><Edit /></div>
</template><!--<Edit /> 是一个 SVG 图标组件,通常来自 Element Plus 图标库。它用于在界面中显示一个编辑图标。代码中的 <el-icon> 组件用来包裹这个图标,并通过 :size 和 :color 属性动态设置图标的大小和颜色。如果不使用 <el-icon> 包裹,<Edit /> 图标仍然可以独立显示,但会使用默认样式。-->

结合el-icon使用

<template><p>with extra class <b>is-loading</b>, your icon is able to rotate 360 deg in 2seconds, you can also override this</p><el-icon :size="20"><Edit /></el-icon><el-icon color="#409efc" class="no-inherit"><Share /></el-icon><el-icon><Delete /></el-icon><el-icon class="is-loading"><Loading /></el-icon><el-button type="primary"><el-icon style="vertical-align: middle"><Search /></el-icon><span style="vertical-align: middle"> Search </span></el-button>
</template>


直接使用svg图标
 

<template><div style="font-size: 20px"><!-- 由于SVG图标默认不携带任何属性 --><!-- 你需要直接提供它们 --><Edit style="width: 1em; height: 1em; margin-right: 8px" /><Share style="width: 1em; height: 1em; margin-right: 8px" /><Delete style="width: 1em; height: 1em; margin-right: 8px" /><Search style="width: 1em; height: 1em; margin-right: 8px" /></div>
</template>


Layout布局

通过基础的24分栏,迅速简便创建布局

组件默认使用 Flex 布局,不需要手动设置 type="flex"

请注意父容器避免使用 inline 相关样式,会导致组件宽度不能撑满。

1.el-row 行

el-col 列
<el-col> 组件的 :span 属性用于定义列的宽度

<template><el-row><el-col :span="24"><div class="grid-content ep-bg-purple-dark"></div></el-col></el-row><el-row><el-col :span="12"><div class="grid-content ep-bg-purple"></div></el-col><el-col :span="12"><div class="grid-content ep-bg-purple-light"></div></el-col></el-row><el-row><el-col :span="8"><div class="grid-content ep-bg-purple"></div></el-col><el-col :span="8"><div class="grid-content ep-bg-purple-light"></div></el-col><el-col :span="8"><div class="grid-content ep-bg-purple"></div></el-col></el-row><el-row><el-col :span="6"><div class="grid-content ep-bg-purple"></div></el-col><el-col :span="6"><div class="grid-content ep-bg-purple-light"></div></el-col><el-col :span="6"><div class="grid-content ep-bg-purple"></div></el-col><el-col :span="6"><div class="grid-content ep-bg-purple-light"></div></el-col></el-row><el-row><el-col :span="4"><div class="grid-content ep-bg-purple"></div></el-col><el-col :span="4"><div class="grid-content ep-bg-purple-light"></div></el-col><el-col :span="4"><div class="grid-content ep-bg-purple"></div></el-col><el-col :span="4"><div class="grid-content ep-bg-purple-light"></div></el-col><el-col :span="4"><div class="grid-content ep-bg-purple"></div></el-col><el-col :span="4"><div class="grid-content ep-bg-purple-light"></div></el-col></el-row>
</template>
<style lang="scss">
.grid-content {height: 100px; /* 或其他高度 */
}.ep-bg-purple-dark {background-color: #6a0dad; /* 深紫色 */
}.ep-bg-purple {background-color: #8a2be2; /* 紫色 */
}.ep-bg-purple-light {background-color: #d8bfd8; /* 浅紫色 */
}</style>



2.分栏间隔 gutter指定列之间的间距

<template><el-row :gutter="20"><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col></el-row>
</template><style>
.el-row {margin-bottom: 20px;
}
.el-row:last-child {margin-bottom: 0;
}
.el-col {border-radius: 4px;
}.grid-content {border-radius: 4px;min-height: 36px;
}
</style>



3.混合布局

<template><el-row :gutter="20"><el-col :span="16"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="8"><div class="grid-content ep-bg-purple" /></el-col></el-row><el-row :gutter="20"><el-col :span="8"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="8"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="4"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="4"><div class="grid-content ep-bg-purple" /></el-col></el-row><el-row :gutter="20"><el-col :span="4"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="16"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="4"><div class="grid-content ep-bg-purple" /></el-col></el-row>
</template><style>
.el-row {margin-bottom: 20px;
}
.el-row:last-child {margin-bottom: 0;
}
.el-col {border-radius: 4px;
}.grid-content {border-radius: 4px;min-height: 36px;
}
</style>





4.列偏移 

<template><el-row :gutter="20"><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="6" :offset="6"><div class="grid-content ep-bg-purple" /></el-col></el-row><el-row :gutter="20"><el-col :span="6" :offset="6"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="6" :offset="6"><div class="grid-content ep-bg-purple" /></el-col></el-row><el-row :gutter="20"><el-col :span="12" :offset="6"><div class="grid-content ep-bg-purple" /></el-col></el-row>
</template><style>
.el-row {margin-bottom: 20px;
}
.el-row:last-child {margin-bottom: 0;
}
.el-col {border-radius: 4px;
}.grid-content {border-radius: 4px;min-height: 36px;
}
</style>



5.对齐方式

<template><el-row class="row-bg"><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple-light" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col></el-row><el-row class="row-bg" justify="center"><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple-light" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col></el-row><el-row class="row-bg" justify="end"><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple-light" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col></el-row><el-row class="row-bg" justify="space-between"><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple-light" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col></el-row><el-row class="row-bg" justify="space-around"><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple-light" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col></el-row><el-row class="row-bg" justify="space-evenly"><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple-light" /></el-col><el-col :span="6"><div class="grid-content ep-bg-purple" /></el-col></el-row>
</template><style>
.el-row {margin-bottom: 20px;
}
.el-row:last-child {margin-bottom: 0;
}
.el-col {border-radius: 4px;
}.grid-content {border-radius: 4px;min-height: 36px;
}
</style>




6.响应式布局

<template><el-row :gutter="10"><el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1"><div class="grid-content ep-bg-purple" /></el-col><el-col :xs="4" :sm="6" :md="8" :lg="9" :xl="11"><div class="grid-content ep-bg-purple-light" /></el-col><el-col :xs="4" :sm="6" :md="8" :lg="9" :xl="11"><div class="grid-content ep-bg-purple" /></el-col><el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1"><div class="grid-content ep-bg-purple-light" /></el-col></el-row>
</template><style>
.el-col {border-radius: 4px;
}.grid-content {border-radius: 4px;min-height: 36px;
}
</style>









Link链接

链接标签和按钮都有type属性,disabled
1.基础文字链接  el-link

<template><div><el-link href="https://element-plus.org" target="_blank">default</el-link><el-link type="primary">primary</el-link><el-link type="success">success</el-link><el-link type="warning">warning</el-link><el-link type="danger">danger</el-link><el-link type="info">info</el-link></div>
</template>
<style scoped>
.el-link {margin-right: 8px;
}
.el-link .el-icon--right.el-icon {vertical-align: text-bottom;
}
</style>

2禁用状态:

<template><div><el-link disabled>default</el-link><el-link type="primary" disabled>primary</el-link><el-link type="success" disabled>success</el-link><el-link type="warning" disabled>warning</el-link><el-link type="danger" disabled>danger</el-link><el-link type="info" disabled>info</el-link></div>
</template>
<style scoped>
.el-link {margin-right: 8px;
}
.el-link .el-icon--right.el-icon {vertical-align: text-bottom;
}
</style>




3.下划线  :underline="false"

<template><div><el-link :underline="false">Without Underline</el-link><el-link>With Underline</el-link></div>
</template>
<style scoped>
.el-link {margin-right: 8px;
}
.el-link .el-icon--right.el-icon {vertical-align: text-bottom;
}
</style>




4.图标
链接标签中引用 :icon="edit"

连接标签包裹图标标签

<template><div><el-link :icon="Edit">Edit</el-link><el-link>Check<el-icon class="el-icon--right"><icon-view /></el-icon></el-link></div>
</template><script setup lang="ts">
import { Edit, View as IconView } from '@element-plus/icons-vue'
</script><style scoped>
.el-link {margin-right: 8px;
}
</style>


scrollbar滚动条

1.el-scrollbar

<template><el-scrollbar height="400px"><p v-for="item in 20" :key="item" class="scrollbar-demo-item">{{ item }}</p></el-scrollbar>
</template><style scoped>
.scrollbar-demo-item {display: flex;align-items: center;justify-content: center;height: 50px;margin: 10px;text-align: center;border-radius: 4px;background: var(--el-color-primary-light-9);color: var(--el-color-primary);
}
</style>



2.横向滚动

<template><el-scrollbar><div class="scrollbar-flex-content"><p v-for="item in 50" :key="item" class="scrollbar-demo-item">{{ item }}</p></div></el-scrollbar>
</template><style scoped>
.scrollbar-flex-content {display: flex;
}
.scrollbar-demo-item {flex-shrink: 0;display: flex;align-items: center;justify-content: center;width: 100px;height: 50px;margin: 10px;text-align: center;border-radius: 4px;background: var(--el-color-danger-light-9);color: var(--el-color-danger);
}
</style>


3.最大高度:

<template><el-button @click="add">Add Item</el-button><el-button @click="onDelete">Delete Item</el-button><el-scrollbar max-height="400px"><p v-for="item in count" :key="item" class="scrollbar-demo-item">{{ item }}</p></el-scrollbar>
</template><script lang="ts" setup>
import { ref } from 'vue'
const count = ref(3)const add = () => {count.value++
}
const onDelete = () => {if (count.value > 0) {count.value--}
}
</script><style scoped>
.scrollbar-demo-item {display: flex;align-items: center;justify-content: center;height: 50px;margin: 10px;text-align: center;border-radius: 4px;background: var(--el-color-primary-light-9);color: var(--el-color-primary);
}
</style>




4.手动滚动

<template><el-scrollbar ref="scrollbarRef" height="400px" always @scroll="scroll"><div ref="innerRef"><p v-for="item in 20" :key="item" class="scrollbar-demo-item">{{ item }}</p></div></el-scrollbar><el-sliderv-model="value":max="max":format-tooltip="formatTooltip"@input="inputSlider"/>
</template><script lang="ts" setup>
import { onMounted, ref } from 'vue'
import { ElScrollbar } from 'element-plus'const max = ref(0)
const value = ref(0)
const innerRef = ref<HTMLDivElement>()
const scrollbarRef = ref<InstanceType<typeof ElScrollbar>>()onMounted(() => {max.value = innerRef.value!.clientHeight - 380
})const inputSlider = (value: number) => {scrollbarRef.value!.setScrollTop(value)
}
const scroll = ({ scrollTop }) => {value.value = scrollTop
}
const formatTooltip = (value: number) => {return `${value} px`
}
</script><style scoped>
.scrollbar-demo-item {display: flex;align-items: center;justify-content: center;height: 50px;margin: 10px;text-align: center;border-radius: 4px;background: var(--el-color-primary-light-9);color: var(--el-color-primary);
}
.el-slider {margin-top: 20px;
}
</style>

space间距

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/437586.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Linux从小白到高手》理论篇(十一):Linux的系统环境管理

值此国庆佳节&#xff0c;深宅家中&#xff0c;闲来无事&#xff0c;就多写几篇博文。本篇详细深入介绍Linux的系统环境管理。 环境变量 linux系统下&#xff0c;如果你下载并安装了应用程序&#xff0c;很有可能在键入它的名称时出现“command not found”的提示内容。如果每…

2024必备英语在线翻译工具推荐

英语在线翻译工具就如同一位随时待命的语言助手&#xff0c;为我们打破语言障碍&#xff0c;搭建起沟通的桥梁。接下来&#xff0c;让我们一起深入了解这些英语在线翻译工具的丰富功能及其为我们带来的便利。 1.福昕在线翻译 链接直达>>https://fanyi.pdf365.cn/doc …

命令按钮QLink

主要作用用来点击后可以自动打开系统的网页浏览器&#xff0c;跳转到指定的网页 常用方法 文本 //获取和设置文本 QString text() const void setText(const QString &text)描述信息 //获取和设置描述文本 QString description() const void setDescription(const QSt…

【RabbitMQ】面试题

在本篇文章中&#xff0c;主要是介绍RabbitMQ一些常见的面试题。对于前几篇文章的代码&#xff0c;都已经在码云中给出&#xff0c;链接是mq-test: 学习RabbitMQ的一些简单案例 (gitee.com)&#xff0c;如果存在问题的话欢迎各位提出&#xff0c;望共同进步。 MQ的作用以及应用…

【web安全】——XXE漏洞

1.XML基础 1.1.XML简介 XML被称为可扩展标记语言&#xff0c;与HTML类似&#xff0c;但是HTML中的标签都是预定义(预先定义好每个标签的作用)的&#xff0c;而XML语言中的标签都是自定义(可以自己定义标签的名称、属性、值、作用)的;HTML中的标签可以是单标签&#xff0c;而X…

SpringMVC源码-SpringMVC框架中Spring父容器和SpringMVC子容器加载的流程以及SpringMVC九大内置组件的初始

一、Spring父容器启动 SpringMVC 的项目结构如下: applicationContext.xml spring的配置文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.o…

机器学习西瓜书笔记(十三) 第十三章半监督学习+代码

第十三章 13 半监督学习13.1 未标记样本13.3.1 小结 13.2 生成式方法13.2.1 小结 13.3 半监督SVM13.3.1 小结 13.4 图半监督学习13.4.1 小结 13.5 基于分歧的方法13.5.1 小结 13.6 半监督聚类13.6.1 小结 13.7 代码&#xff1a;手写数据集上的标签传播-性能展示章末小结 13 半监…

数据结构——初识树和二叉树

线性结构是一对一的关系&#xff0c;意思就是只有唯一的前驱和唯一的后继&#xff1b; 非线性结构&#xff0c;如树形结构&#xff0c;它可以有多个后继&#xff0c;但只有一个前驱&#xff1b;图形结构&#xff0c;它可以有多个前驱&#xff0c;也可以有多个后继。 树的定义…

变电站红外检测数据集 1180张 变电站红外 标注voc yolo 13类

变电站红外检测数据集 1180张 变电站红外 标注voc yolo 13类 变电站红外检测数据集 名称 变电站红外检测数据集 (Substation Infrared Detection Dataset) 规模 图像数量&#xff1a;1185张图像。类别&#xff1a;13种设备类型。标注个数&#xff1a;2813个标注。 数据划分…

多模态RAG实现

在标准 RAG 中&#xff0c;输入文档包含文本数据。LLM 利用上下文学习&#xff0c;通过检索与所提查询上下文相匹配的文本文档块来提供更相关、更准确的答案。 但是&#xff0c;如果文档包含图像、表格、图表等以及文本数据&#xff0c;该怎么办&#xff1f; 不同的文档格式包…

华为GaussDB数据库之Yukon安装与使用

一、Yukon简介 Yukon&#xff08;禹贡&#xff09;&#xff0c;基于openGauss、PostgreSQL、GaussDB数据库扩展地理空间数据的存储和管理能力&#xff0c;提供专业的GIS&#xff08;Geographic Information System&#xff09;功能&#xff0c;赋能传统关系型数据库。 Yukon 支…

linux桌面软件(wps)内嵌到其他窗口

程序测试环境是&#xff1a;slackware系统&#xff0c;属于linux系统&#xff0c;有桌面&#xff08;Xface Session&#xff09;。系统镜像是&#xff1a;slackware64-15.0-install-dvd.iso。qt、c代码实现。 程序功能&#xff1a;将已经打开的wps&#xff08;word、pdf等都可…

Android SystemUI组件(09)唤醒亮屏 锁屏处理流程

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧上方锁屏分析部分 唤醒亮屏 即可。 Power按键的处理逻辑最终是由PhoneWindowManager来…

Watchdog Timers(WDT)

文章目录 1. 介绍2. Feature List3. 概述3.1. Safety Watchdog3.2. CPU Watchdog 4. 看门狗定时器功能5. Endinit Functions5.1 Password Access to WDTxCON05.1.1 Static Password5.1.2 Automatic Password Sequencing 5.2 Check Access to WDTxCON05.3 Modify Access to WDTx…

[C++]使用C++部署yolov11目标检测的tensorrt模型支持图片视频推理windows测试通过

官方框架&#xff1a; https://github.com/ultralytics/ultralytics yolov8官方最近推出yolov11框架&#xff0c;标志着目标检测又多了一个检测利器&#xff0c;于是尝试在windows下部署yolov11的tensorrt模型&#xff0c;并最终成功。 重要说明&#xff1a;安装环境视为最基…

Tiny-universe手戳大模型TinyRAG--task4

TinyRAG 这个模型是基于RAG的一个简化版本&#xff0c;我们称之为Tiny-RAG。Tiny-RAG是一个基于RAG的简化版本&#xff0c;它只包含了RAG的核心功能&#xff0c;即Retrieval和Generation。Tiny-RAG的目的是为了帮助大家更好的理解RAG模型的原理和实现。 1. RAG 介绍 LLM会产…

Halcon基础系列1-基础算子

1 窗口介绍 打开Halcon 的主界面主要有图形窗口、算子窗口、变量窗口和程序窗口&#xff0c;可拖动调整位置&#xff0c;关闭后可在窗口下拉选项中找到。 2 显示操作 关闭-dev_close_window() 打开-dev_open_window (0, 0, 712, 512, black, WindowHandle) 显示-dev_display(…

超级干货:Air780E之RS485通信篇,你学会了吗?

今天&#xff0c;我们来学习低功耗4G模组Air780E的RS485通信&#xff0c;同学们&#xff0c;你学习了吗&#xff1f; 一、RS485简介 物联网&#xff08;IoT&#xff09;在工业场景中的应用越来越广泛&#xff0c;而RS485是一种常见的通信协议&#xff0c;广泛应用于工业自动…

快手:数据库升级实践,实现PB级数据的高效管理|OceanBase案例

本文作者&#xff1a;胡玉龙&#xff0c;快手技术专家 快手在较初期采用了OceanBase 3.1版本成功替换了多个核心业务、数百套的MySQL集群。至2023年&#xff0c;快手的数据量已突破800TB大关&#xff0c;其中最大集群的数据量更是达到了数百TB级别。为此&#xff0c;快手将数据…

关于视频监控介入的部分内容,使用的是海康H5web播放的模式

这是原发直接能在系统中使用。里面的样式自己修改&#xff0c;主要是在引入时出现黑色的框就是引入成功&#xff0c;需要在public文件夹中引入h5player.min.js文件就可以。 <template><div class"Shiping"><el-container><el-header><di…