blog-admin-web/src/static/common.less
灌糖包子 1e7748db64
feat: 表格区域独立滚动,表头固定
- 修改 common.less:
  - 新增 .page-wrapper 类,使用 flex 纵向布局占满父容器
  - 修改 .table-container 为 flex 布局,让表格自适应高度
  - .el-table 使用 flex:1 实现内容区域滚动、表头固定

- 7个列表页面添加 page-wrapper 类:
  - SystemUser.vue, SystemRole.vue
  - Hitokoto.vue, PhotoWall.vue, Music.vue, SourceImage.vue
  - Article.vue(特殊处理:左右分栏布局适配)

现在设置 100 条数据时,表格内容独立滚动,分页始终可见,不会触发整页滚动。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 22:16:49 +08:00

296 lines
6.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

html, body, #app, .layout {
margin: 0;
padding: 0;
height: 100%;
}
/* ===== 顶部导航栏 ===== */
.layout-header {
color: #fff;
background: linear-gradient(90deg, #1d2b45 0%, #2c3e60 100%);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
display: flex;
align-items: center;
position: relative;
div.main-title {
display: inline-block;
font-size: 20px;
font-weight: var(--el-font-weight-primary);
letter-spacing: 1px;
line-height: 60px;
}
.nav-btns-right {
display: inline-block;
position: absolute;
right: 20px;
top: 50%;
transform: translateY(-50%);
}
}
/* ===== 侧边栏 ===== */
.el-aside {
background: var(--el-fill-color-light);
border-right: 1px solid var(--el-border-color-light);
.el-menu {
// CSS 变量覆盖
--el-menu-bg-color: transparent;
--el-menu-border-color: transparent;
--el-menu-hover-bg-color: var(--el-fill-color);
--el-menu-active-color: var(--el-color-primary);
}
.el-menu-item {
// 圆角/间距/宽度无对应 CSS 变量,保留直接样式
border-radius: var(--el-border-radius-base);
margin: 2px 8px;
width: calc(100% - 16px);
&.is-active {
// 激活背景色无对应 CSS 变量,保留直接样式
background-color: var(--el-color-primary-light-9);
font-weight: var(--el-font-weight-primary);
}
}
.el-sub-menu__title:hover {
// Element Plus 子菜单标题 hover 使用 --el-menu-bg-color 而非 --el-menu-hover-bg-color
// 因此无法通过变量覆盖,保留直接样式
background-color: var(--el-fill-color);
}
}
/* ===== 主内容区 ===== */
.layout-main {
padding: 0 !important;
display: flex !important;
flex-direction: column;
background: var(--el-fill-color);
> .layout-tabs {
margin: 12px 16px 0;
}
> .layout-content {
margin: 12px 16px;
overflow: auto;
background: var(--el-bg-color);
border-radius: 10px;
border: 1px solid var(--el-border-color-lighter);
padding: 20px;
flex-grow: 1;
flex-basis: 0;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
}
> .layout-copy {
text-align: center;
padding: 8px 0 12px;
color: var(--el-text-color-placeholder);
font-size: var(--el-font-size-extra-small);
}
}
/* ===== 页面布局(用于带分页的表格页面)===== */
.page-wrapper {
display: flex;
flex-direction: column;
height: 100%;
}
/* ===== 表格美化 ===== */
.table-container {
position: relative;
flex: 1;
overflow: hidden;
margin-bottom: 12px;
display: flex;
flex-direction: column;
.el-table {
// CSS 变量覆盖:表头背景/文字色、行悬停色、边框色、正文色
--el-table-header-bg-color: var(--el-fill-color-light);
--el-table-header-text-color: var(--el-text-color-regular);
--el-table-row-hover-bg-color: var(--el-color-primary-light-9);
--el-table-border-color: var(--el-border-color-lighter);
--el-table-text-color: var(--el-text-color-primary);
// 固定高度让表头固定tbody滚动
flex: 1;
border-radius: var(--el-border-radius-base);
overflow: hidden;
border: 1px solid var(--el-border-color-lighter);
&::before {
display: none;
}
th.el-table__cell {
font-weight: var(--el-font-weight-primary);
font-size: var(--el-font-size-small);
}
td.el-table__cell {
// 行分隔线比表头边框更浅,与 --el-table-border-color 不同,需直接覆盖
border-bottom-color: var(--el-fill-color);
font-size: var(--el-font-size-small);
}
.el-button.is-link {
font-size: 16px;
padding: 4px 6px;
}
}
}
/* ===== 操作栏 ===== */
.btn-container {
margin-bottom: 14px;
display: flex;
align-items: center;
.search-btn {
margin-left: auto;
display: flex;
gap: 8px;
}
}
/* ===== 分页 ===== */
.page-container {
padding: 16px 0 4px;
display: flex;
justify-content: center;
}
/* ===== 表单弹窗 ===== */
.el-dialog {
// CSS 变量覆盖:圆角、清除 element-plus 2.x 新增的根元素 padding
--el-dialog-border-radius: 12px;
--el-dialog-padding-primary: 0;
// overflow:hidden 无对应 CSS 变量,保留直接样式(使圆角裁剪生效)
overflow: hidden;
.el-dialog__header {
background: var(--el-fill-color-light);
border-bottom: 1px solid var(--el-border-color-lighter);
padding: 16px 20px;
margin: 0;
.el-dialog__title {
font-size: var(--el-font-size-base);
font-weight: var(--el-font-weight-primary);
color: var(--el-text-color-primary);
}
}
.el-dialog__body {
padding: 24px 24px 8px;
}
.el-dialog__footer {
border-top: 1px solid var(--el-border-color-lighter);
padding: 12px 20px;
background: var(--el-fill-color-lighter);
}
}
/* ===== 搜索表单 ===== */
.el-form--inline {
margin-bottom: 14px;
.el-form-item {
margin-bottom: 0;
}
.el-select {
min-width: 160px;
}
}
.search-panel {
margin-bottom: 14px;
}
/* ===== 其他工具类 ===== */
.carsouel-img {
position: relative;
left: 50%;
transform: translateX(-50%);
height: 500px;
width: auto;
}
.main-view {
position: relative;
height: 100%;
}
.custom-drawer {
> .el-drawer__header {
margin-bottom: 0;
}
> .el-drawer__body {
overflow: auto;
}
}
.el-tabs--card.nav-tabs {
> .el-tabs__header {
margin-bottom: 0;
border-bottom: none;
background: var(--el-bg-color);
padding: 0 4px;
border-radius: 8px 8px 0 0;
.el-tabs__nav-wrap {
margin-bottom: 0;
}
.el-tabs__nav {
border: none;
}
.el-tabs__item {
height: 36px;
line-height: 36px;
padding: 0 16px;
font-size: var(--el-font-size-small);
color: var(--el-text-color-secondary);
border: none;
border-radius: 6px 6px 0 0;
margin-right: 2px;
transition: color 0.2s, background 0.2s;
position: relative;
&:hover {
color: var(--el-color-primary);
background: var(--el-color-primary-light-9);
}
&.is-active {
color: var(--el-color-primary);
font-weight: var(--el-font-weight-primary);
background: var(--el-fill-color);
&::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 2px;
background: var(--el-color-primary);
border-radius: 2px 2px 0 0;
}
}
.is-icon-close {
font-size: 11px;
margin-left: 4px;
border-radius: 50%;
transition: background 0.2s;
&:hover {
background: var(--el-color-danger-light-7);
color: var(--el-color-danger);
}
}
}
}
}