曾静的博客

但行好事,莫问前程.

嗨,我是曾静 (@devzeng),目前暂居深圳。


这是我用来记录平日学习笔记的地方,欢迎您的访问.

博客支持暗黑模式

去年支持了 github action 的方式实现代码push到master分支后能自动发布到 github pages 上面,确实比之前使用脚本强制提交发布的方式方便了不少,主要还是不需要本地配置环境了,切换到其他设备的只要写完提交就好了。

配置支持 github action 也是非常简单,从官方市场上面选择需要的action,简单配置一下就好了

github-actions

最近想把博客适配支持一下暗黑模式,需要在本地调试一下,按照之前的文档安装了一下环境,结果是各种报错,折腾了个把小时,最后还是没搞定。

最终采用的是使用 Docker 搭建环境映射本地markdow的路径在容器内进行编译的方式搞定,使用方式比较简单:

jekyll-docker 仓库的3个文件拷贝到 blog 源码根目录下面,然后按照下面的命令操作即可(主要实现参考 BretFisher/jekyll-serve 这个项目,对初始化环境做了一些调整):

# 启动服务
docker-compose up --build -d
# 停止服务
docker-compose down

docker-jekyll-1

说明:

容器创建完成后,第一次访问 http://localhost:4000 可能会失败,因为容器还需要等 jekyll 服务初始化完成。

docker-jekyll-2

支持暗黑模式原理比较简单,利用 prefers-color-scheme 这个媒体查询,实现深色和浅色模式下的颜色调整,示例代码如下:

// 深色模式
@media (prefers-color-scheme: dark) {
  body {
    background: black;
    color: white;
  }
}

// 浅色模式
@media (prefers-color-scheme: light) {
  body {
    background: white;
    color: black;
  }
}

博客使用的是 vno-jekyll 这个主题,样式代码在 _sass 这个目录下面,使用的是 scss 实现。

首先创建两个 mixin (dark-scheme/light-scheme),用于在里面定义不同模式下的颜色变量:

// file vno-light.scss
@mixin light-scheme {
    --bg-default-color:     #FFFFFF;

    --text-primary-color:   #666666;
    --text-regular-color:   #999999;
    --text-secondary-color: #c7c7c7;

    // ... 省略代码 ...
}

// file vno-dark.scss
@mixin dark-scheme {
    --bg-default-color:     #141414;

    --text-primary-color:   #F2F2F2;
    --text-regular-color:   #999999;
    --text-secondary-color: #999999;

    // ... 省略代码 ...
}

然后利用 mixin 的特性和 prefers-color-scheme 在不同模式下 include 不同的 mixin:

html,
body {
  height: 100%;

  @media (prefers-color-scheme: light) {
    @include light-scheme;
  }
  
  @media (prefers-color-scheme: dark) {
    @include dark-scheme;
  }
}

在需要适配的地方使用变量(var(变量名))替换:

html {
  height: 100%;
  max-height: 100%;
  background: var(--bg-default-color);
}

body {
  font-family: $sans-font;
  font-size: 1em;
  color: var(--text-primary-color);
  -webkit-font-smoothing: antialiased;
}

最后效果如下:

blog-preview

算是勉强能用吧,后续还要对细节进行调整。

参考资料

最近的文章

Windows下制作Chrome多版本测试程序

前段时间基于CEF(Chromium Embedded Framework)做了一个Windows上的应用,主要能实现动态加载打包好的Web资源包,因为使用的是较低版本的Chrome内核,发现存在较多的兼容性问题,想到以前做IE兼容性测试的时候可以使用 IETester 来做IE不同版本之间的兼容性测试。查了一些资料发现可以通过制作便携版的Chrome来实现多版本Chrome共存。因为经常要切版本,这里记录一下整个过程:1、提取启动程序(1)到官网下载 GoogleChromePortab...…

Note继续阅读
更早的文章

在Docker上运行OHPM私仓服务

OHPM(OpenHarmony Package Manager)是鸿蒙开发中的包管理工具,类似于Maven、npm、CocoaPods等,常用的是OpenHarmony三方库中心仓,可以到上面搜索项目需要的第三方库。使用起来非常简单,只要下面的命令就可以快速安装ohpm install <package_name> 在企业内部为了共享代码一般会搭建私仓,比如: 使用Verdaccio搭建npm仓库 搭建Dart Pub镜像服务 好在鸿蒙官方提供了一个...…

Note继续阅读