当前位置: 首页 > article >正文

Typora的Github主题美化

[!note]

Typora的Github主题进行一些自己喜欢的修改,主要包括:字体、代码块、表格样式

美化前:

美化前

美化后:
在这里插入图片描述


一、字体更换

之前便看上了「中文网字计划」的「朱雀仿宋」字体,于是一直想更换字体,奈何自己拖延症作祟,直到今天才开始行动。


关于「中文网字计划」

「中文网字计划」是一个致力于优化中文字体在互联网中应用的开源项目,通过Web Font技术为开发者提供便捷、免费的中文字体解决方案。其核心特点包括:

  1. 字体分包技术:将庞大的字体文件切割为小型静态分包,利用全球CDN加速加载,解决中文字体文件体积大、加载慢的问题;
  2. 丰富字体库:收录了霞鹛文楷、京華老宋体等众多字体,支持在线预览和按需调用;
  3. 开源工具链:提供字体分析工具(如font-analyze)、在线分包工具(在线切割)及NPM包(@konghayao/cn-font-split),方便开发者自定义字体优化;
  4. 全字符集渲染:支持OpenType特性,可自动按页面内容加载所需字符区间,兼顾渲染速度与完整性。

项目官网为https://chinese-font.netlify.app/,GitHub仓库见chinese-free-web-font-storage。

需注意部分字体授权信息需自行确认,建议优先选用明确开源授权的字体(如霞鹛文楷)。


中文网字计划是支持直接使用它提供的CDN的,但是由于不知道怎么在主题的CSS中使用,于是选择使用更为直接的方法:从中文网字计划的Github仓库中下载下来这个字体的.ttf文件,然后在CSS中使用该字体。

具体实现步骤

  1. 下载字体文件
  • 下载自己想要的字体文件,例如朱雀仿宋;

  • 并将字体文件放到合适的目录位置,这个文件路径之后要用得到,例如我就是直接放到主题css文件的同一目录下,故引用的时候就直接使用相对路径./字体文件名

  1. 修改主题的css文件
  • 引入本地字体
/* 添加以下代码,引入本地字体 */
@font-face {/* 自定义字体名称 */font-family: "自定义字体";/* 字体文件路径 */src: url('./ZhuqueFangsong-Regular.ttf') format('truetype');font-weight: normal;font-style: normal;
}
  • 将需要的内容设置成自定义字体
/* 将 body 设置为自定义字体 */
body {font-family: "自定义字体", "Open Sans", "Clear Sans", "Helvetica Neue", Helvetica, Arial, 'Segoe UI Emoji', sans-serif;color: rgb(51, 51, 51);line-height: 1.6;
}/* 将标题设置为自定义字体 */
h1,
h2,
h3,
h4,
h5,
h6 {position: relative;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.4;cursor: text;font-family: "自定义字体", "Open Sans", "Clear Sans", "Helvetica Neue", Helvetica, Arial, 'Segoe UI Emoji', sans-serif;
}/* 将段落、表格文字设置成自定义字体 */
p,
blockquote,
ul,
ol,
dl,
table {margin: 0.8em 0;font-family: "自定义字体", "Open Sans", "Clear Sans", "Helvetica Neue", Helvetica, Arial, 'Segoe UI Emoji', sans-serif;
}

可以根据自己的需要自行设置

  1. 重启Typora

不出意外的话,重启便能看到更换好字体之后的效果了


二、代码块装饰

希望能添加仿mac窗口风格的代码块上檐,觉得很好看。

类似下图:

仿mac窗口风格的代码块上檐

已备条件

先前在美化Hexo博客站的时候子在网上找到了大佬在Hexo的Fluid主题中实现仿mac窗口风格的方法,即通过``自定义CSS,并提供了stylus代码`:

.highlightbackground: #21252bborder-radius: 5pxbox-shadow: 0 10px 30px 0 rgba(0, 0, 0, .4)padding-top: 30px&::beforebackground: #fc625dborder-radius: 50%box-shadow: 20px 0 #fdbc40, 40px 0 #35cd4bcontent: ' 'height: 12pxleft: 12pxmargin-top: -20pxposition: absolutewidth: 12px

有了stylus代码,直接让 AI 帮忙改一下就可以用在这里了

利用条件

我们需要将这段 Stylus 代码适配到 Typora 的 GitHub 主题中,以下是修改后的 CSS 实现和详细说明:

/* 在原有 .md-fences 样式基础上修改 */
.md-fences {background: #21252b;border-radius: 5px !important;box-shadow: 0 10px 30px 0 rgba(0, 0, 0, .4) !important;padding-top: 30px !important;position: relative; /* 新增定位上下文 */margin: 15px 0;    /* 保持原有外边距 */
}/* 添加 Mac 风格窗口按钮 */
.md-fences::before {content: ' ';position: absolute;top: 15px;         /* 调整垂直位置 */left: 15px;        /* 调整水平位置 */width: 12px;height: 12px;border-radius: 50%;background: #fc625d;box-shadow: 20px 0 #fdbc40, 40px 0 #35cd4b;z-index: 1;        /* 确保按钮显示在代码上方 */
}/* 调整代码内容位置 */
.md-fences .code-tooltip {margin-top: -20px; /* 补偿顶部 padding */
}/* 保持代码区域高度 */
.md-fences pre {padding-top: 10px; /* 调整代码与按钮的间距 */
}

需要在你原来的主题 CSS 中找到 .md-fences 相关样式,替换或修改为上述代码。以下是主要修改点说明:

  1. 定位上下文
    添加 position: relative 为伪元素定位提供基准

  2. 窗口按钮实现
    使用 ::before 伪元素创建三个圆形按钮,通过:

    • box-shadow 创建多个按钮
    • 精确的定位调整按钮位置
    • z-index 确保按钮可见
  3. 样式覆盖
    使用 !important 覆盖 Typora 默认样式:

    border-radius: 5px !important;
    box-shadow: 0 10px 30px 0 rgba(0, 0, 0, .4) !important;
    
  4. 布局调整

    • 增加 padding-top 为按钮预留空间
    • 通过负 margin 保持代码区域位置
    • 调整代码内容的 padding

最终效果:

  • 代码块顶部会有 macOS 风格的红黄绿按钮
  • 代码块带有阴影和圆角
  • 按钮位置适配代码块布局
  • 保持原有代码高亮样式

如果需要调整按钮位置或颜色,可以修改以下参数:

  • top/left 值:控制按钮位置
  • background 值:红色按钮颜色
  • box-shadow 值:黄色和绿色按钮颜色及位置
  • width/height:按钮大小
  • border-radius:按钮圆角程度

建议在修改后通过实际预览微调具体数值,不同主题可能需要不同的位置补偿值。

box-shadow: 0 10px 30px 0 rgba(0, 0, 0, .4) !important; 的解释:

给元素添加一个向下偏移半透明模糊阴影,具体参数解析如下:

  1. 0:水平偏移量(h-shadow)
    表示阴影在水平方向不偏移

  2. 10px:垂直偏移量(v-shadow)
    表示阴影向下偏移10像素(负值会向上偏移)

  3. 30px:模糊半径(blur)
    阴影边缘会产生30像素的模糊渐变效果,数值越大越模糊

  4. 0:扩散半径(spread)
    阴影大小与元素原始尺寸一致(正值扩大阴影,负值收缩)

  5. rgba(0, 0, 0, .4):阴影颜色
    使用黑色(#000)且透明度为40%(0.4),通过透明度实现阴影深浅控制

  6. !important:优先级标记
    强制覆盖其他可能存在的阴影样式规则

最终效果表现为:元素下方会呈现一个向下延伸10px、模糊范围30px、半透明黑色(类似雾状)的阴影层,常用于创建卡片浮起效果或增强界面层次感。

[!note]

2025.2.22更新

主要修改:

  • 顶部仿mac的背景颜色变为深色,下方的代码部分背景颜色不变
  • 上次改动使得代码块的行高发生变化,过于高了,现将行高改的合适一些

要实现 顶部仿 Mac 按钮区域为深色背景,而下方代码区域保持浅色,需要通过 分层背景控制伪元素定位 来实现。以下是具体修改方案:


修改后的完整 CSS 代码

/* 核心修改部分 */
.md-fences {/* 移除整体深色背景 */background: transparent !important;/* 保持原有容器样式 */border-radius: 5px !important;box-shadow: 0 10px 30px 0 rgba(0, 0, 0, .1) !important;padding-top: 25px !important;padding-bottom: 2px !important;position: relative;margin: 15px 0;/* 添加浅色边框分隔 */border: 3px solid #e7eaed;
}/* 新增:顶部深色背景条 */
.md-fences::after {content: '';position: absolute;top: 0;left: 0;right: 0;/* 与 padding-top 一致 */height: 25px;/* 原深色背景 */background: #21252b;/* 仅顶部圆角 */border-radius: 5px 5px 0 0;/* 确保在按钮下方 */z-index: 0;
}/* 调整 Mac 按钮层级 */
.md-fences::before {/* 原有按钮样式不变 */content: ' ';position: absolute;top: 10px;left: 10px;width: 10px;height: 10px;border-radius: 50%;background: #fc625d;box-shadow: 20px 0 #fdbc40, 40px 0 #35cd4b;margin-top: 0px;/* 提升到顶部背景条之上 */z-index: 2;
}/* 恢复代码区域背景色 */
.md-fences pre {/* 原浅色背景 */background: #f8f8f8 !important;margin: 0;padding: 10px 15px !important; /* 需删去 *//* 底部圆角 */border-radius: 0 0 5px 5px;position: relative;/* 确保在顶部背景条之上 */z-index: 1;
}

关键修改说明

通过 三层结构 实现分层控制:

  1. 顶部深色背景条 (::after 伪元素)

    • 高度与容器的 padding-top 一致(30px)
    • 仅设置顶部圆角,与容器圆角匹配
    • 使用 z-index: 0 作为底层
  2. Mac 风格按钮 (::before 伪元素)

    • 提升 z-index: 2 确保按钮显示在顶部背景条之上
    • 保持原有定位和样式
  3. 代码内容区域 (pre 标签)

    • 显式设置浅色背景 #f8f8f8
    • 添加 z-index: 1 覆盖顶部背景条
    • 底部圆角避免背景色溢出

按照上面修改好之后,发现代码块的行高高的离谱,原本以为是行高太大的问题,于是就直接加了一行行高控制(如下所示):

/* 新增行高控制 */
line-height: 1.5 !important; /* 合适的范围:1.4-1.6*/

发现没有效果,进而才想到了可能是padding的问题,于是便尝试将代码块的padding控制元素给注释掉,发现行高恢复正常了,问题找到,只要删去padding即可。

上面的代码是先直接让deepseek帮忙写的,事实证明:AI确实能提高编程速度,但仍不能完全代替人类进行工作。


效果验证

区域背景色特性
顶部按钮区域深色(#21252b)包含 Mac 风格红黄绿按钮
代码内容区域浅色(#f8f8f8)保持原有代码样式和行间距
容器边框浅灰色(#e7eaed)分隔顶部深色和代码区域

调整细节(按需修改)

  • 顶部背景条高度:修改 .md-fences::afterheight 值(需同步调整容器的 padding-top
  • 代码区域边距:调整 .md-fences prepadding
  • 圆角一致性:检查 border-radius 数值是否与容器匹配

最终效果应实现 顶部深色按钮区 + 下方浅色代码区 的视觉分层,同时保持代码内容的原有样式。


三、表格样式修改

将原主题的表格样式改成三线表样式

以下是修正后的三线表完整CSS代码:

将原CSS中的相关样式用以下替换即可

/* ================= 三线表完整样式 ================= */
table {border-collapse: collapse !important;border-spacing: 0 !important;border: none !important;margin: 1.5em 0 !important;
}/* 顶线 */
table {border-top: 2px solid #333 !important;
}/* 底线 */
table {border-bottom: 2px solid #333 !important;
}/* 表头线(中间线) */
thead tr:first-child th {border-bottom: 1.5px solid #666 !important;
}/* 单元格样式 */
td, th {border: none !important;padding: 8px 12px !important;background: transparent !important;
}/* 表头文字样式 */
th {font-weight: 600 !important;color: #2c3e50 !important;
}/* 移除斑马纹 */
tr:nth-child(2n) {background: transparent !important;
}/* 调整对齐方式 */
th {text-align: center !important;
}
td {text-align: left !important;
}

修改要点说明:

  1. 明确三条线的实现方式:

    • 顶线:table元素的顶部边框(2px)
    • 中间线:表头单元格(th)的底部边框(1.5px)
    • 底线:table元素的底部边框(2px)
  2. 颜色层级:

    • 顶/底线使用深灰色(#333)
    • 中间线使用稍浅的灰色(#666)
  3. 增强可读性:

    • 表头文字加粗(600字重)
    • 表头文字颜色加深(#2c3e50)
    • 单元格增加横向间距(8px→12px)

实际效果预览:

__________________________ 顶线(2px)姓名    年龄    职位
__________________________ 中间线(1.5px)张三     28    工程师李四     35    设计师
__________________________ 底线(2px)

验证方法:

  1. 在Typora中插入3行2列的表格
  2. 观察是否呈现:
    • 顶部粗线
    • 表头下方细线
    • 底部粗线
  3. 检查是否没有其他干扰线条

如果希望调整线条粗细,可以修改以下参数:

  • 顶/底线粗细:2px → 推荐范围 1.5px-3px
  • 中间线粗细:1.5px → 推荐范围 1px-2px

相关文章:

Typora的Github主题美化

[!note] Typora的Github主题进行一些自己喜欢的修改,主要包括:字体、代码块、表格样式 美化前: 美化后: 一、字体更换 之前便看上了「中文网字计划」的「朱雀仿宋」字体,于是一直想更换字体,奈何自己拖延症…...

Cursor配置MCP Server

一、什么是MCP MCP(Model Context Protocol)是由 Anthropic( Claude 的那个公司) 推出的开放标准协议,它为开发者提供了一个强大的工具,能够在数据源和 AI 驱动工具之间建立安全的双向连接。 举个好理解…...

定时器之输入捕获

输入捕获的作用 工作机制​ 输入捕获通过检测外部信号边沿(上升沿/下降沿)触发计数器(CNT)值锁存到捕获寄存器(CCRx),结合两次捕获值的差值计算信号时间参数。 ​脉冲宽度测量&#x…...

Uniapp开发微信小程序插件的一些心得

一、uniapp 开发微信小程序框架搭建 1. 通过 vue-cli 创建 uni-ap // nodejs使用18以上的版本 nvm use 18.14.1 // 安装vue-cli npm install -g vue/cli4 // 选择默认模版 vue create -p dcloudio/uni-preset-vue plugindemo // 运行 uniapp2wxpack-cli npx uniapp2wxpack --…...

0005__PyTorch 教程

PyTorch 教程 | 菜鸟教程 离线包:torch-1.13.1cpu-cp39-cp39-win_amd64.whl https://download.pytorch.org/whl/torch_stable.html...

Pikachu

一、网站搭建 同样的,先下载安装好phpstudy 然后启动Apache和Mysql 然后下载pikachu,解压到phpstudy文件夹下的www文件 然后用vscode打开pikachu中www文件夹下inc中的config.inc.php 将账户和密码改为和phpstudy中的一致(默认都是root&…...

CentOS7 使用 YUM 安装时报错:Cannot find a valid baseurl for repo: base/7/x86_64的解决方法

CentOS7 使用 YUM 安装时报错:Cannot find a valid baseurl for repo: base/7/x86_64的解决方法 报错代码解决方法 报错代码 输入命令yum update -y时报错Cannot find a valid baseurl for repo: base/7/x86_64 解决方法 有 wget 工具 更换YUM源 mv /etc/yum.…...

ChatGPT与DeepSeek:AI语言模型的巅峰对决

目录 引言 一、ChatGPT 与 DeepSeek 简介 (一)ChatGPT (二)DeepSeek 二、技术原理剖析 (一)ChatGPT 技术原理 (二)DeepSeek 技术原理 (三)技术原理对比…...

Linux----网络通信

一、IP地址详解 (一)核心概念 概念说明IP地址网络设备的唯一逻辑标识符,相当于网络世界的"门牌号"主机任何接入网络的终端设备(计算机/手机/服务器等)核心作用① 设备标识 ② 路由寻址 ③ 数据传输 &…...

Android逆向:一文掌握 Frida 详细使用

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. Frida 简介2. Frida 的工作原理3. 安装 Frida3.1 安装 Frida 工具3.2 安装 Frida Server4. Frida 的基本使用4.1 连接到目标设备4.2 附加到目标进程4.3 编写 Frida 脚本5. Frida 的高级用法5.1 Hook Java 方法5.2 修…...

AI军备竞赛2025:GPT-4.5的“情商革命”、文心4.5的开源突围与Trae的代码革命

AI军备竞赛2025:GPT-4.5的“情商革命”、文心4.5的开源突围与Trae的代码革命 ——一场重塑人类认知边界的技术战争 一、OpenAI的“感性觉醒”:GPT-4.5的颠覆与争议 1.1 从“冷面学霸”到“温柔导师”:AI的情商跃迁 当用户输入“朋友放鸽子&…...

5G网络切片辨析(eMBB,mMTC,uRLLC)

URLLC有三大应用场景,分别是eMBB(增强型移动宽带)、uRLLC(高可靠低延时通信)和mMTC(海量机器通信)。 增强型移动宽带(eMBB):需要关注峰值速率,容…...

【MySQL篇】数据类型

目录 前言: 1,数据类型的分类 ​编辑 2 ,数值类型 2.1 tinyint类型 2.2 bit类型 2.3 小数类型 2.3.1 float类型 2.3.2 decimal类型 3,字符串类型 3.1 char 3.2 varchar 3.3 char与varchar的比较 3.4日期和时间类型 3.5 …...

DockerでOracle Database 23ai FreeをセットアップしMAX_STRING_SIZEを拡張する手順

DockerでOracle Database 23c FreeをセットアップしMAX_STRING_SIZEを拡張する手順 はじめに環境準備ディレクトリ作成Dockerコンテナ起動 データベース設定変更コンテナ内でSQL*Plus起動PDB操作と文字列サイズ拡張設定検証 管理者ユーザー作成注意事項まとめ はじめに Oracle…...

Skynet入门(一)

概念 skynet 是一个为网络游戏服务器设计的轻量框架。但它本身并没有任何为网络游戏业务而特别设计的部分,所以尽可以把它用于其它领域。 设计初衷 如何充分利用它们并行运作数千个相互独立的业务。 模块设计建议 在 skynet 中,用服务 (service) 这…...

【音视频】图像基础概念

一、图像基础概念 1.1 像素 像素是一个图片的基本单位,pix使英语单词pixtureelement的结合“pixel”的简称,所以像素有图像元素之意。 例如2500*2000的照片就是指横向有2500个像素点,竖向有2000个像素点,总共500万个像素&#x…...

预训练(Pretraining)阶段为何被称为“自监督学习”(Self-Supervised Learning)?

预训练阶段为何被称为自监督学习? 在人工智能领域,尤其是自然语言处理(NLP)和深度学习的快速发展中,预训练(Pretraining)已经成为一种不可或缺的技术手段。而其中一个重要的概念是“自监督学习…...

【已解决】pyodbc 5.2 [ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

问题 当升级 pyodbc 5.2 版本后,连接 sqlserver 数据库,报错如下: 连接失败: (IM002, [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 (0) (SQLDriverConnect); [IM002] [Microsoft][ODBC 驱动程序管理…...

时钟树的理解

对应电脑的主板,CPU,硬盘,内存条,外设进行学习 AHB总线 -72MHZ max APB1总线 -36MHZ max APB2-72MHZ max 时序逻辑电路需要时钟线控制 ,含有记忆性的原件的存在。(只有时钟信号才能工作&…...

AI 实战2 - face -detect

人脸检测 环境安装源设置conda 环境安装依赖库 概述数据集wider_face转yolo环境依赖标注信息格式转换图片处理生成 train.txt 文件 数据集展示数据集加载和处理 参考文章 环境 安装源设置 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/f…...

CentOS vs Ubuntu - 常用命令深度对比及最佳实践指南20250302

CentOS vs Ubuntu - 常用命令深度对比及最佳实践指南 引言 在 Linux 服务器操作系统领域,CentOS 和 Ubuntu 是广泛采用的发行版。它们在命令集、默认工具链及生态系统方面各有特点。本文深入剖析 CentOS 与 Ubuntu 在常用命令层面的异同,并结合实践案例…...

问题修复-后端返给前端的时间展示错误

问题现象: 后端给前端返回的时间展示有问题。 需要按照yyyy-MM-dd HH:mm:ss 的形式展示 两种办法: 第一种 在实体类的属性上添加JsonFormat注解 第二种(建议使用) 扩展mvc框架中的消息转换器 代码: 因为配置类继…...

为AI聊天工具添加一个知识系统 之127 详细设计之68 编程 核心技术:Cognitive Protocol Language 之1

本文要点 要点 今天讨论的题目:本项目(为使用AI聊天工具的两天者加挂一个知识系统) 详细程序设计 之“编程的核心技术” 。 source的三个子类(Instrument, Agent, Effector) 分别表示--实际上actually ,…...

多个pdf合并成一个pdf的方法

将多个PDF文件合并优点: 能更容易地对其进行归档和备份.打印时可以选择双面打印,减少纸张的浪费。比如把住宿发票以及滴滴发票、行程单等生成一个pdf,双面打印或者无纸化办公情况下直接发送给财务进行存档。 方法: 利用PDF24 Tools网站 …...

周边游平台设计与实现(代码+数据库+LW)

摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对旅游信息管理的提升&#xff0c…...

深入解析Crawl4AI:为AI应用量身定制的高效开源爬虫框架

引言 在当今数据驱动的时代,人工智能(AI)和大型语言模型(LLM)的发展对高质量数据的需求日益增长。如何高效地从互联网上获取、处理和提取有价值的数据,成为了研究人员和开发者面临的关键挑战。Crawl4AI作为…...

python量化交易——金融数据管理最佳实践——qteasy创建本地数据源

文章目录 qteasy金融历史数据管理总体介绍本地数据源——DataSource对象默认数据源查看数据表查看数据源的整体信息最重要的数据表其他的数据表 从数据表中获取数据向数据表中添加数据删除数据表 —— 请尽量小心,删除后无法恢复!!总结 qteas…...

Python标准库【os】5 文件和目录操作2

文章目录 8 文件和目录操作8.7 浏览目录下的内容8.8 查看文件或目录的信息8.9 文件状态修改文件标志位文件权限文件所属用户和组其它 8.10 浏览Windows的驱动器、卷、挂载点8.11 系统配置信息 os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面…...

⭐算法OJ⭐矩阵的相关操作【动态规划 + 组合数学】(C++ 实现)Unique Paths 系列

文章目录 62. Unique Paths动态规划思路实现代码复杂度分析 组合数学思路实现代码复杂度分析 63. Unique Paths II动态规划定义状态状态转移方程初始化复杂度分析 优化空间复杂度状态转移方程 62. Unique Paths There is a robot on an m x n grid. The robot is initially lo…...

【Java基础】Java中new一个对象时,JVM到底做了什么?

Java中new一个对象时,JVM到底做了什么? 在Java编程中,new关键字是我们创建对象的最常用方式。但你是否想过,当你写下new MyClass()时,Java虚拟机(JVM)到底在背后做了哪些工作?今天&…...