package theme import ( "io/fs" "regexp" "strings" "testing" "github.com/tamakyi/TamaBox/static" ) // TestNavbarNotFullyTransparent 拦住 `--tb-navbar: transparent`。 // // 装饰层从页面角落长出来时,实色顶栏会把它齐刷刷切一段,看着像被裁过 —— 于是很容易顺手 // 改成完全透明。但顶栏一透明就没有依托:导航文字直接压在花纹上,滚动/密集页面里失去层级, // 观感比"被裁"更差。正确做法是半透明(rgba 保留 20%~30% 透光)配 backdrop-filter: blur()。 // // 这条不是审美偏好,是踩过的坑:new-sakura 第一版写成 transparent,用户当场要求改回去。 func TestNavbarNotFullyTransparent(t *testing.T) { files := []string{"css/base.css"} for _, slug := range discover() { files = append(files, themeCSSDir+slug+".css") } checked := 0 for _, name := range files { b, err := fs.ReadFile(static.FS, name) if err != nil { t.Fatalf("读取 %s: %v", name, err) } css := commentRe.ReplaceAllString(string(b), "") for i, decl := range declarations(css, "--tb-navbar:") { checked++ if isFullyTransparent(decl) { t.Errorf("%s 第 %d 处 --tb-navbar = %q:顶栏不能完全透明,"+ "改成半透明(如 rgba(...,0.72))并配 backdrop-filter: blur()", name, i+1, strings.TrimSpace(decl)) } } } if checked == 0 { t.Fatal("一处 --tb-navbar 都没解析到,key 拼错了?") } t.Logf("共校验 %d 处顶栏底色", checked) } var ( rgbaZeroRe = regexp.MustCompile(`(?i)rgba?\([^)]*,\s*0(?:\.0+)?\s*\)`) hexAlphaRe = regexp.MustCompile(`(?i)^#[0-9a-f]{6}00$`) ) func isFullyTransparent(v string) bool { v = strings.TrimSpace(strings.ToLower(v)) if v == "transparent" || v == "none" { return true } return rgbaZeroRe.MatchString(v) || hexAlphaRe.MatchString(v) }