VueJS + Element.io中position: sticky属性失效问题求助
I've run into this exact issue with Element UI's flex layout before—here's how to get your sticky sidebar working:
The Root Cause
Your .sidebar lives inside an el-col which is a flex item in the el-row (set to type="flex"). By default, flex items stretch to match the height of their tallest sibling. This means your sidebar column is as tall as the right table column, so the sticky positioning never triggers—there's no need for it to "stick" when the element is already the full height of its parent.
Step-by-Step Fixes
1. Stop the Sidebar Column from Stretching
Add align-self: flex-start to your .sidebar class to prevent the flex item from matching the height of the table column. This lets the sticky behavior activate as you scroll:
<style scoped> .sidebar { position: sticky; top: 0; align-self: flex-start; /* This is the key fix */ min-height: 200px; /* Use min-height instead of fixed height for flexibility */ background: #fff; /* Optional: Add background to cover content behind the menu */ } </style>
2. Check for Overflow in Ancestor Elements
Sometimes Element UI's layout components or your own wrapper elements have overflow: hidden set, which can clip sticky elements. If you notice the sidebar still isn't sticking, ensure no parent of the el-row has interfering overflow properties:
.el-row { overflow: visible; }
3. Confirm Sticky Context
Sticky positioning works relative to the nearest scrolling ancestor. If your content is inside a container with overflow: auto or scroll, make sure that container has a defined height so scrolling occurs within it. For page-level scrolling (the most common case), this shouldn't be an issue.
Updated Code Example
Here's your adjusted code with the fix applied:
<el-row :gutter="24" type="flex" justify="start"> <el-col :span="6" class="sidebar"> <el-menu default-active="1" @open="handleOpen" @close="handleClose"> <el-menu-item index="1"> <i class="el-icon-document"></i> <span>Mes documents</span> </el-menu-item> <el-menu-item index="2"> <i class="el-icon-star-on"></i> <span>Mes favoris</span> </el-menu-item> </el-menu> </el-col> <el-col :span="18"> <div class="tableDocuments grid-content"> <!-- Your table content here --> </div> </el-col> </el-row> <style scoped> .sidebar { position: sticky; top: 0; align-self: flex-start; min-height: 200px; background: #fff; } </style>
This should make your sidebar stick to the top as you scroll down the page. Let me know if you hit any other snags!
内容的提问来源于stack exchange,提问作者Shon3r

