element plus el-scrollbar嵌套,自定义命中滚动条

1 场景

后台管理系统,经典布局,固定头部

布局为头部区域(淡蓝色),侧边栏区域(淡粉色),内容区域(淡绿色),其中内容区域上部(黑线以上)为面包屑区域,内容区域下部(黑线以下)为实际内容区域

需求:

  1. 根据配置,内容区域可以整体纵向滚动
  2. 根据配置,内容区域下部(黑线以下)可以滚动

2 代码

js 复制代码
<template>
  <div class="page-container">
    <header class="header"></header>
    <div class="main-container">
      <div class="aside-container">
        <!-- 侧边栏 -->
      </div>
      <el-scrollbar
        view-class="scrollbar-view"
        :class="['content-container', { fixed: fixedHeader }]"
      >
        <div class="content-container-mask">
          <div class="content-container__head">
            <!-- 面包屑 -->
          </div>
          <div
            class="content-container__content"
            :class="{ fixed: fixedHeader }"
          >
            <!-- 内容区域 -->
            <el-scrollbar><div class="content"></div></el-scrollbar>
          </div>
        </div>
      </el-scrollbar>
    </div>
  </div>
</template>

<script lang="ts" setup>
const fixedHeader = ref(true);
</script>
<style lang="scss" scoped>
.page-container {
  width: 100vw;
  height: 100vh;
  display: flex;
  flex-direction: column;
  .header {
    width: 100%;
    height: 60px;
    background-color: lightblue;
  }
  .main-container {
    height: calc(100% - 60px);
    flex: 1;
    display: flex;

    .aside-container {
      width: 250px;
      height: 100%;
      background-color: lightpink;
    }
    .content-container {
      flex: 1;
      display: flex;
      flex-direction: column;
      background-color: lightgreen;
      &.fixed {
        //用于固定头部时命中内层el-scrollbar
        :deep(.scrollbar-view) {
          height: 100%;
        }
      }
      .content-container-mask {
        width: 100%;
        height: 100%;
        display: flex;
        flex-direction: column;
        .content-container__head {
          width: 100%;
          padding: 0 20px;
          border-bottom: 1px solid rgba(0, 0, 0, 0.3);
          height: 40px;
        }
        .content-container__content {
          width: 100%;
          flex: 1;
          &.fixed {
            min-height: calc(100% - 60px);
          }
          .content {
            height: 2000px;
          }
        }
      }
    }
  }
}
</style>

3 效果

固定头部: 命中实际内容区域的滚动条

不固定头部: 命中整个内容区域的滚动条

4 解释

如图,重点是给外层的el-scrollbar添加view-class="scrollbar-view"属性,然后用.scrollbar-view筛选到外层el-scrollbar容器div元素,让其高度填充满父元素高度,同时给实际的内容区域给一个min-height

可以给fixedHeader赋值false对比看以下,外层的el-scrollbar容器高度超出父元素高度,出现整体滚动条

5 推广

这种方法对于滚动条嵌套的情况据可以适用,比图下图中的另一种经典布局

相关推荐
Highcharts.js4 小时前
Highcharts 云端渲染的真相:交互式图表与服务器端生成的边界
前端·信息可视化·服务器渲染·highcharts·图表渲染
zhuyan1085 小时前
Linux 系统磁盘爆满导致无法启动修复指南
前端·chrome
编程牛马姐5 小时前
独立站SEO流量增长:提高Google排名的优化方法
前端·javascript·网络
NotFound4865 小时前
实战指南如何实现Java Web 拦截机制:Filter 与 Interceptor 深度分享
java·开发语言·前端
Dontla6 小时前
高基数(High Cardinality)问题介绍(Prometheus、高基数字段、低基数字段)
前端·数据库·prometheus
whuhewei8 小时前
为什么客户端不存在跨域问题
前端·安全
妮妮喔妮8 小时前
supabase的webhook报错
开发语言·前端·javascript
yivifu9 小时前
手搓HTML双行夹批效果
前端·html·html双行夹注
奔跑的卡卡9 小时前
Web开发与AI融合-第一篇:Web开发与AI融合的时代序幕
前端·人工智能
IT_陈寒10 小时前
Redis批量删除的大坑,差点让我加班到天亮
前端·人工智能·后端