Skip to content

Table美化方案

效果对比

原生样式美化样式

可见,美化后表格自动居中,且表格各列宽自动适配并拉伸。

配置

<div> 自动包裹 <table>

为了方便设置样式,我们需要给全局 <table> 标签外自动包裹上一层 <div> 标签,进而为控制此 <div> 的样式做准备。

这里我选择采用 Vitepress 原生的 markdown 扩展配置。你只需要在对应位置添加高亮代码即可。

.vitepress/config.mts
ts
import { defineConfig, type DefaultTheme } from "vitepress";
// ...
export default defineConfig({
  // ...
  markdown: {
	// ...
    config: (md) => {
      // 保存原有的table渲染器
      const defaultRender =
        md.renderer.rules.table_open ||
        ((tokens, idx) => { 
          return "<table>"; 
        }); 
      // 自定义table渲染
      md.renderer.rules.table_open = (tokens, idx) => { 
        // 获取用户自定义的类名
        const className = "custom-table-container"; 
        return `<div class="${className}"><table>`; 
      }; 
      // 确保table结束标签后,div标签正确关闭
      const defaultTableClose =
        md.renderer.rules.table_close ||
        ((tokens, idx, options, env, self) => { 
          return "</table>"; 
        }); 
      md.renderer.rules.table_close = (tokens, idx, options, env, self) => { 
        return `${defaultTableClose(tokens, idx, options, env, self)}</div>`; 
      }; 
      // ...
    },
    // ...
  },
});

设置全局 <table> 样式

创建样式文件 📄:.vitepress/theme/style/tableCustom.css ,填写内容如下:

tableCustom.css
css
/* 表格容器样式 */
.vp-doc .custom-table-container {
    width: 90%;
    margin: 1rem auto;
    overflow-x: auto;
}

/* 表格基础样式 */
.vp-doc table {
    display: table;          /* 确保表格以表格形式显示 */
    width: 100%;            /* 占满容器宽度 */
    table-layout: auto;     /* 根据内容自动分配列宽 */
    border-collapse: collapse;  /* 合并边框 */
    margin: 0;             /* 移除表格默认外边距 */
}

/* 表头样式 */
.vp-doc thead {
    background-color: var(--vp-c-bg-soft);  /* 表头背景色 */
}

/* 表头单元格样式 */
.vp-doc th {
    white-space: nowrap;     /* 防止表头文字换行 */
    text-align: left;        /* 文字左对齐 */
    padding: 12px 16px;       /* 内边距 */
    margin: 0;             /* 确保无外边距 */
}

/* 表格单元格样式 */
.vp-doc td {
    padding: 12px 16px;       /* 内边距 */
    text-align: left;        /* 文字左对齐 */
    margin: 0;             /* 确保无外边距 */
}

/* 确保表格在小屏幕上也能正常显示 */
@media (max-width: 768px) {
    .vp-doc .custom-table-container {
        margin: 1rem auto;  /* 保持一致的外边距 */
        padding: 0;         /* 移除内边距 */
    }
}

在总样式文件 📄:.vitepress/theme/style/index.css 中进行引入

index.css
css
@import './tableCustom.css';

效果验证

在你的 markdown 文档中,粘贴下述内容,验证效果

example.md
md
|  这   | 是一  | 个用于验证 |  的  | 表格demo |
| :--: | :-: | :---: | :-: | :----: |
|  宽度  |  会  |   跟   |  随  |   列宽   |
| 自动调整 |  ,  | 并且表格  | 整体  |   居中   |

贡献者

页面历史