团 粥粥 团子笔记 1 天前 主题之外那个插件:15 个设置项、整片后台皮肤,和一个不用点的自动更新 Noline 的仓库里除了主题还有一个 plugins/NolineApi/。它名义上是「给 App 用的 REST 接口」,但用下来它其实承担了三件事:把后台换成前厅那套皮、让主题和插件成对自己更新、给健康页和记账页当地盘。这篇交代这三件。 后台一共 15 个设置项 站点头像地址、博主名字、座右铭、首页头图、强调色、动态分类、导航图标、首页公告、右栏分类卡、页面转场样式、GitHub 显示名、GitHub 链接、Bilibili 显示名、Bilibili 链接、站点底部版权。 这 15 项就是接口能读写的全部字段,一一对应,没有隐藏项。插件的 Theme.php 里有一张字段表,把名称、控件类型、长度上限、默认值、提示文案全写在一起;_dev/phpcheck.py 会拿这张表和 functions.php 里的 themeConfig() 对一遍——名字漂了、控件类型漂了、少了一项,构建直接失败。这个检查是必要的:我删过一个设置项,库里那行残留的旧键让插件设置页整整 500 过一次(Typecho 保存是 array_merge,不清旧键),后来只能在 config() 里主 #网页编程
团 粥粥 团子笔记 1 天前 跳转要软,但我没上 PJAX:Noline 的页转场是两层的 我对博客跳转的要求就一句话:不接受白屏硬切。但也不想为了这一句话上一套 PJAX——那玩意儿会顺带把前进后退、地址栏、浏览器自己的滚动恢复、评论锚点定位和搜索引擎抓到的链接形态全都搅一遍,为了一个视觉过渡付这个价不值当。 所以 Noline 的页转场是两层的:能走原生就走原生,走不了就退回自己写的那套。 第一层:跨文档视图过渡 主路径是浏览器原生的 cross-document View Transition,也就是 CSS 里那三条 ::view-transition-old/root、::view-transition-new/root、::view-transition-group(root) 的 at-rule。它跟同文档那套不是一回事:跨文档时旧页不是被 JS 换掉的,是浏览器把两份文档的画面接在一起做过渡,所以顶栏(连头像一起)能整块跨页连续——不重建、不重新解码,看起来就是同一块从来没变过。 它有一个硬前提:两份文档必须同源且共享一个浏览器进程,而这要求页面发 Cross-Origin-Opener-Policy: same-origin 把头断开。主题在 the #网页编程
团 粥粥 团子笔记 1 天前 Noline:我把自己的博客主题从头重写了一遍,顺便交代每个决定 这套主题现在跑到 1.34.0,你正在看的这个博客前台整站都是它。重写它的起因不是什么宏大目标,是我实在受不了旧主题那种「层次靠阴影堆」的做法:一张卡片要同时有实阴影、渐变底、圆角和一圈边框,看着像 2014 年的后台面板。所以我给自己定了一条规矩——一条 1px 的蓝灰线就够了。 层次只留三样东西 卡片不靠阴影靠留白:卡内 8px/12px 内缩、#e3e8f7 描边、12px 圆角,加一层几乎看不见的浅投影。整站颜色全在 :root 里,浅色 103 条令牌、深色 66 条,两边一一对齐。这里说的「对齐」是同一个语义名在两套里都存在,不会出现深色缺一根、只能就地硬写一个十六进制的情况。 深浅那两层也不是两套色板,是一个墨色加一组透明度派生出来的:文字、描边、底色、hover 全从同一个 RGB 三元组乘出来。好处是换墨色只改一行;代价是每加一根令牌都得先问一句「这个颜色能不能从墨色推出来」,推不出来就说明它是装饰,而装饰一律不加。 换肤只填一个色值 后台「强调色」填一个 #4482e5 这样的十六进制就够了:链接、按钮、hover、标签底色、代码块那三个红绿灯圆点的光环都 #网页编程