vue3el-tabs水平居中
时间: 2023-05-19 19:07:29 浏览: 285
可以使用flex布局来实现水平居中,具体代码如下:
<el-tabs v-model="activeTab" style="display:flex; justify-content:center;">
<el-tab-pane label="Tab 1">Content of Tab Pane 1</el-tab-pane>
<el-tab-pane label="Tab 2">Content of Tab Pane 2</el-tab-pane>
<el-tab-pane label="Tab 3">Content of Tab Pane 3</el-tab-pane>
</el-tabs>
相关问题
vue3el-tabs水平居中下划线不变
对于这个问题,你可以参考以下代码实现:
<template>
<div class="tabs-container">
<div class="tabs-header">
<div class="tabs-header-item" v-for="(tab, index) in tabs" :key="index" :class="{ active: activeIndex === index }" @click="activeIndex = index">
{{ tab }}
</div>
<div class="tabs-header-underline" :style="{ width: underlineWidth + 'px', left: underlineLeft + 'px' }"></div>
</div>
<div class="tabs-content">
<slot></slot>
</div>
</div>
</template>
<script>
export default {
name: 'ElTabs',
props: {
tabs: {
type: Array,
default: () => []
}
},
data() {
return {
activeIndex: 0,
underlineLeft: 0,
underlineWidth: 0
}
},
mounted() {
this.setUnderline()
},
methods: {
setUnderline() {
const header = this.$refs.header
const activeItem = header.getElementsByClassName('active')[0]
this.underlineLeft = activeItem.offsetLeft
this.underlineWidth = activeItem.offsetWidth
}
},
watch: {
activeIndex() {
this.setUnderline()
}
}
}
</script>
<style scoped>
.tabs-container {
position: relative;
}
.tabs-header {
display: flex;
justify-content: center;
align-items: center;
}
.tabs-header-item {
padding: 10px 20px;
cursor: pointer;
}
.tabs-header-item.active {
font-weight: bold;
}
.tabs-header-underline {
position: absolute;
bottom: 0;
height: 2px;
background-color: #409EFF;
transition: all 0.3s ease-in-out;
}
</style>
这个组件可以实现一个基本的选项卡功能,其中下划线的位置和宽度会随着选项卡的切换而变化,从而实现水平居中的效果。
vue3 el-tabs延迟加载
为了实现Vue3 el-tabs的延迟加载,可以使用Vue3的异步组件和el-tabs的lazy属性。具体步骤如下:
1. 将el-tabs的type属性设置为"lazy",这样el-tabs组件会自动懒加载。
2. 创建一个异步组件,用于渲染el-tabs的内容。例如:
```
const TabContent = defineAsyncComponent(() => import('./TabContent.vue'))
```
3. 在el-tabs的tab-pane中使用异步组件,例如:
```
<el-tab-pane v-for="(item, index) in tabs" :key="index" :label="item.label">
<template v-if="item.lazy">
<TabContent />
</template>
<template v-else>
<div v-html="item.content"></div>
</template>
</el-tab-pane>
```
这样就可以实现el-tabs的延迟加载了。注意,异步组件只会在第一次被访问时加载。如果需要在每次切换tab时都重新加载内容,可以在TabContent组件中使用activated生命周期钩子重新加载数据。
阅读全文