标题篇
线条
底部线条
线条 100% 宽度
通常用在一级标题中,和下文内容做区分,起到分割线的作用,通常为 1 像素,颜色不要太深,可以适当加透明度
.h1 { border-bottom: 1px solid #8080804a; }
线条宽度和文字宽度保持一致
这时候将标题设置为行内块元素,则可以实现底部线条和文字宽度保持一致,这时候可以适当增加线条的高度
这样存在的缺陷有:
- 因为内边距
padding
的存在,所以导致正文和底部边框有一段距离,不能很自由地调节(也可以用padding-bottom
进行调节)
.h1 { border-bottom: 3px solid #808080; display: inline-block; }
改进方案
仅对文字添加下划线
.h1 { text-decoration: 3px solid underline; /* 在文字底部添加 3 像素的实线 */ text-underline-offset: 5px; /* 线条距离文字的距离为 5 像素 */ }
左侧线条
无圆角
可以用到任何级别的标题中,使标题更加明显,不同级别的标题左边框也可以用不同颜色来表示,如赤橙黄绿青蓝紫等
如果追求简洁的话,可以用同一种颜色,或者同一种颜色的相近色
.h3 { border-left: 4px solid #6666fd; }
有圆角
也可以利用 border-radius
属性,给边框加上圆角;
不过这样做也存在一些问题
- 只有左侧有圆角,右侧还是直角(如果想要对右侧也设置圆角,则需要用到伪元素,后文将会进行介绍)
- 高度不能自由地进行调节,是跟当前标题级别的高度一致
.h3 { border-left: 4px solid #6666fd; border-radius: 4px; }
字体
分类 | 属性 | 属性值 | 备注 |
---|---|---|---|
字体类型 | font-family | 可以是中文或者英文名称 | 引号是英文状态下引号 |
字体大小 | font-size | 1.2em(相对值); 120%(相对值,等同于 1.2em); 18px(绝对值) |
|
字体字重 | font-weight | 400/normal 700/bold |
可以填写 100-900 的数字,也可以添加相应英文名称 |
字体颜色 | color | red,blue,#808080,rgb(255, 233, 85) | 可以填写颜色名称,16 进制颜色,rgb 颜色等(可以用 qq 截图取色) |
.h2 { font-family: "宋体"; font-size: 1.2em; font-weight: bold; color: red; }
背景
纯色背景
背景颜色和字体颜色要选择适当,搭配合理,尽量避免用 red,blue 等纯度极高的颜色,用久了比较伤眼睛
/* 对 2 级标题设置样式 */ .h2 { color: white; /* 设置字体颜色 */ background-color: pink; /* 设置字体背景颜色 */ border-radius: 4px; /* 设置背景圆角弧度 */ }
渐变背景
渐变方向(这里只将径向渐变)
渐变方向 | 属性值 | 角度 |
---|---|---|
从左到右侧 | to right | 90deg |
从上到下 | to bottom | 180deg |
从左上到右下 | to right bottom | |
从左下到右上 | to right top |
.h3 { background-image: linear-gradient( to right, #a8ff78, #78ffd6); } /* 控制颜色生成比例 */ .h3 { background-image: linear-gradient( to right, #a8ff78 10%, #78ffd6 50%); }
图案背景
- 图案网站
- 调试好相应的格式后,点击 copy css,将相关代码复制到
theme.css
即可,不要担心代码复杂 - 不要设置 opciaty 那栏,否则文字也会有透明度,导致字体看不清除
- 在设置颜色时,可以用十六进制的颜色设置透明度,如
#808080→#8080804d
,这样只有背景图案有透明度 - 注:这些图案代码可以用在其他任何地方,不止是标题,也可以用于编辑器背景或者侧栏背景等
- 调试好相应的格式后,点击 copy css,将相关代码复制到
伪元素(图形 + 图片)
自定义图形
左侧圆角矩形
上面说道,如果给标题添加左侧边框,然后再添加圆角,只有左边会有圆角,如果想要全部都有,可以用伪元素实现
/* 给 3 级标题添加伪元素 */ .h3::before { /* 一般用伪元素,前面都要写上content,内容可以为空 */ content: ""; /* 设置伪元素为绝对定位,可以方便修改位置 */ position: absolute; /* 设置伪元素的宽度 */ width: 5px; /* 设置伪元素的高度 */ height: 80%; /* 设置伪元素的背景颜色 */ background-color: blue; /* 设置伪元素的圆角,超过一定数值后,两端都是半圆 */ border-radius: 50px; /* 距离顶部多少距离,如果距离刚好合适,可以不写属性和属性值,属性值可以为负数 */ /* top: 0; */ /* 距离左侧多少距离,如果距离刚好合适,可以不写属性和属性值,属性值可以为负数 */ left: 0em; } /* 设置 3 级标题左侧内边距 */ .h3 { /* 增加 3 级标题内边距,可以使伪元素不遮挡标题内容,后面加上!important表示强调,可以覆盖前面写的代码(如果属性重复的话) */ padding-left: 0.5em !important; }
底部圆角矩形
同理,如果伪元素在底部,可以设置底部的圆角矩形,像 zhang-light
主题那样
/* 给 4 级标题添加伪元素 */ .h4::after { content: ""; position: absolute; /* 设置伪元素高度 */ height: 12px; /* 设置伪元素宽度(相对于h4的宽度) */ width: 60%; /* 设置伪元素背景颜色 */ background: pink; /* 伪元素距离左侧为-3像素,即比左侧凸出来3像素 */ left: -3px; /* 距离底部8像素,有文字压着伪元素的效果 */ bottom: 8px; /* 设置z轴级别, 比h4的z轴级别低一级 */ z-index: -1; /* 设置圆角大小,也可以不设置,则默认为0像素,即为长方形,而不是圆角矩形 */ border-radius: 10px; } /* 设置4级标题的z轴高度,比伪元素要高 */ .h4 { /* 可以是0,可以是1,反正比伪元素级别高就行 */ z-index: 1; }
底部圆角矩形和文字长度一致
.h4::after { content: ""; position: absolute; height: 12px; /* 将4级标题的伪元素设置为100%宽度 */ width: 100%; background: pink; left: 0px; bottom: 8px; z-index: -1; border-radius: 10px; } .h4 { z-index: 1; /* 将4级标题设置为行内块元素,和下方代码二者择其一即可 */ display: inline-block; /* 宽度和文字宽度保持一致,和上方代码等效 */ /* width: fit-content; */ }
左上角圆形
在上面的示例中,如果 border-radius 设置合适,可以制造出圆形的效果
.h4::after { content: ""; position: absolute; /* 设置4级标题伪元素宽度和高度,要相等 */ height: 12px; width: 12px; background: pink; /* 设置伪元素距离左侧距离,-10像素标题左侧凸出10像素 */ left: -10px; /* 距离底部10像素 */ bottom: 10px; /* z轴高度为-1,保证在文字下方 */ z-index: -1; /* 设置圆角大小,50%可以生成圆形 */ border-radius: 50%; } .h4 { z-index: 1; }
文字
固定文字
给文字添加 H4 符号
.h4::before { /* 设置伪元素内容为H4 */ content: "H4"; /* 设置伪元素的文字颜色 */ color: #17de17; /* 设置左侧浮动,这一步能够保证伪元素文字和正常文字在同一行,否则会在顶部 */ float: left; /* 设置右侧外边距,可以使伪元素与标题隔开一定距离 */ margin-right: 0.3em; /* 设置字体类型,使用等宽字体/代码字体,更加好看 */ font-family: 'JetBrainsMono-Regular'; } /* 可以保证空行时光标位置在h4之后,数值可能需要微调,代码来自于萌新的dark+主题 */ .protyle-wysiwyg>.h4>[contenteditable][spellcheck]:empty { padding-left: 1.4em; }
自动编号
这里有点复杂,不过多演示,直接贴出代码效果
中文自动编号(来自 zhang-light 主题)
.protyle-wysiwyg, .b3-typography { counter-reset: h1 0 h2 0 h3 0 h4 0 h5 0 h6 0; } .protyle-wysiwyg [data-node-id].h1, .b3-typography h1 { counter-reset: h2 0 h3 0 h4 0 h5 0 h6 0; } .protyle-wysiwyg [data-node-id].h2, .b3-typography h2 { counter-reset: h3 0 h4 0 h5 0 h6 0; } .protyle-wysiwyg [data-node-id].h3, .b3-typography h3 { counter-reset: h4 0 h5 0 h6 0; } .protyle-wysiwyg [data-node-id].h4, .b3-typography h4 { counter-reset: h5 0 h6 0; } .protyle-wysiwyg [data-node-id].h5, .b3-typography h5 { counter-reset: h6 0; } /* 设置标题内容 */ .protyle-wysiwyg .h1>::before, .b3-typography h1:before { counter-increment: h1; content: "第"counter(h1, cjk-ideographic) "章 "; } .protyle-wysiwyg .h2>::before, .b3-typography h2:before { counter-increment: h2; content: "第"counter(h2, cjk-ideographic) "节 "; } .protyle-wysiwyg .h3>::before, .b3-typography h3:before { counter-increment: h3; content: counter(h3, cjk-ideographic) "、"; } .protyle-wysiwyg .h4>::before, .b3-typography h4:before { counter-increment: h4; content: "("counter(h4, cjk-ideographic) "). "; } .protyle-wysiwyg .h5>::before, .b3-typography h5:before { counter-increment: h5; content: counter(h5, decimal) ". "; } .protyle-wysiwyg .h6>::before, .b3-typography h6:before { counter-increment: h6; content: "("counter(h6, decimal) "). "; } /* ——————————消除h1-h6标题中含有引用时导致计数出现自动编号的影响,非思源主题不用管这个—————————— */ .protyle-attr::before, .protyle-attr--refcount.popover__block::before { display: none; }
数字自动编号(来自 dark+ 主题)
/* 标题自动编号 */ .protyle-wysiwyg, .b3-typography { counter-reset: h1-counter 0 h2-counter 0 h3-counter 0 h4-counter 0 h5-counter 0 h6-counter 0; } .protyle-wysiwyg>.h1, .b3-typography>h1 { counter-increment: h1-counter; counter-reset: h2-counter 0; } .protyle-wysiwyg>.h2, .b3-typography>h2 { counter-increment: h2-counter; counter-reset: h3-counter 0; } .protyle-wysiwyg>.h3, .b3-typography>h3 { counter-increment: h3-counter; counter-reset: h4-counter 0; } .protyle-wysiwyg>.h4, .b3-typography>h4 { counter-increment: h4-counter; counter-reset: h5-counter 0; } .protyle-wysiwyg>.h5, .b3-typography>h5 { counter-increment: h5-counter; counter-reset: h6-counter 0; } .protyle-wysiwyg>.h6, .b3-typography>h6 { counter-increment: h6-counter; } .protyle-wysiwyg>.h1::before, .b3-typography>h1::before { display: block !important; float: left; font-size: var(--custom-h-num-font-size); content: counter(h1-counter) "\00A0"; } .protyle-wysiwyg>.h2::before, .b3-typography>h2::before { display: block !important; float: left; font-size: var(--custom-h-num-font-size); content: counter(h1-counter) "." counter(h2-counter) "\00A0"; } .protyle-wysiwyg>.h3::before, .b3-typography>h3::before { display: block !important; float: left; font-size: var(--custom-h-num-font-size); content: counter(h1-counter) "." counter(h2-counter) "." counter(h3-counter) "\00A0"; } .protyle-wysiwyg>.h4::before, .b3-typography>h4::before { display: block !important; float: left; font-size: var(--custom-h-num-font-size); content: counter(h1-counter) "." counter(h2-counter) "." counter(h3-counter) "." counter(h4-counter) "\00A0"; } .protyle-wysiwyg>.h5::before, .b3-typography>h5::before { display: block !important; float: left; font-size: var(--custom-h-num-font-size); content: counter(h1-counter) "." counter(h2-counter) "." counter(h3-counter) "." counter(h4-counter) "." counter(h5-counter) "\00A0"; } .protyle-wysiwyg>.h6::before, .b3-typography>h6::before { display: block !important; float: left; font-size: var(--custom-h-num-font-size); content: counter(h1-counter) "." counter(h2-counter) "." counter(h3-counter) "." counter(h4-counter) "." counter(h5-counter) "." counter(h6-counter) "\00A0"; } /* 调整标题空行光标位置 */ .protyle-wysiwyg>.h1>[contenteditable][spellcheck]:empty { padding-left: var(--custom-h1-indentation); } .protyle-wysiwyg>.h2>[contenteditable][spellcheck]:empty { padding-left: var(--custom-h2-indentation); } .protyle-wysiwyg>.h3>[contenteditable][spellcheck]:empty { padding-left: var(--custom-h3-indentation); } .protyle-wysiwyg>.h4>[contenteditable][spellcheck]:empty { padding-left: var(--custom-h4-indentation); } .protyle-wysiwyg>.h5>[contenteditable][spellcheck]:empty { padding-left: var(--custom-h5-indentation); } .protyle-wysiwyg>.h6>[contenteditable][spellcheck]:empty { padding-left: var(--custom-h6-indentation); }
图片
不是把图片当做背景,那样就有点喧宾夺主了
上文提到可以在标题左边生成圆,理论上可以使用各种各样的标题样式
接下来,我们找一个主题(事实上,自定义主题,不要在默认的 daylight 和 midnight 主题上直接修改;可以建立副本,在副本上修改)
我们可以给标题前添加 png 图片,或者是 svg 图标
接下来以 png 图片为例:
欲知详情如何,且听下回分解...
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于