260多个国旗图标集:Sketch素材包到多端交付的完整链路
简介这份资源是面向UI设计师、前端开发者与产品原型制作者的Sketch格式全球国旗图标素材库内含260多个国家和地区的国旗图形可解决国际化项目中快速调用统一风格国旗图标的需求适用于移动应用、网站界面、教育软件、地理信息系统及国际会议宣传物料等场景。压缩包为zip格式整体约89.05MB以Sketch矢量源文件为主并附带Read Me.html使用说明其中circle、pin、hexagon、square、rectangle等子文件对应地图标记、按钮、布局元素等不同展示形态方便按场景直接取用。目前已有1842人学习下载说明该素材在设计与开发群体中具备一定认可度。借助矢量可编辑特性使用者能自由调整尺寸、颜色并与其他Sketch文件集成在保证视觉一致性的同时显著减少逐个绘制国旗的重复劳动提升国际化设计项目的产出效率。1. 260多个国旗图标集从 Sketch 素材包到多端交付的完整链路手上接到一个国际化产品改版需求设计稿里要铺满各国国旗运营还要按地区灵活替换。第一反应是去搜「国旗图标 png」结果要么尺寸参差、要么授权不明、要么缺小语种国家。后来拿到一份 260 多个世界各国国旗图标集_sketch素材下载.zip才算把这件事按工程化方式跑通。这个素材包本质是一套矢量国旗源文件核心价值不在「图多」而在于它能被 Sketch 直接打开、按图层管理、批量导出成任意尺寸和格式。它适合三类人做海外业务 UI 的设计师、需要把国旗接进前端组件的工程师、以及要给数据大屏配国家标识的开发者。下面我把从打开素材包到落地到代码里的整条链路拆开讲包括参数怎么设、坑在哪。2. 拆开 Sketch 国旗素材包图层结构与命名规范决定了后续效率拿到压缩包先别急着双击打开解压后看一眼目录结构这一步能省掉后面大量返工。常见做法是包里会有一个 .sketch 主文件加若干导出好的位图但真正有价值的是那个矢量源文件。理解它的图层组织方式才能决定你是直接导出用还是拆成组件接进设计系统。2.1 国旗图标的三种常见图层组织方式第一种是「一国旗一画板」260 多个画板平铺在画布上命名通常是国家英文名或 ISO 代码。这种结构适合批量导出因为 Sketch 的导出功能可以按画板批量走。第二种是「一国旗一 Symbol」把每面国旗做成 Symbol好处是改一处全局同步适合接进组件库。第三种是「分组图层」所有国旗塞在一个画板里用 Group 区分这种最坑导出时容易连背景一起带出去。判断方式很简单打开左侧图层列表看顶层是画板还是分组。如果是画板直接进导出流程如果是 Symbol先想清楚你的设计系统要不要复用它如果是分组建议先手动拆成画板虽然费点时间但后面批量导出会顺很多。2.2 命名规范与 ISO 代码对齐国旗素材最容易翻车的地方是命名。有的包用China有的用CN有的用china-flag。如果你要接进前端命名必须和 ISO 3166-1 alpha-2 代码对齐也就是两位大写字母。我一般会先做一次重命名把画板名统一成CN、US、JP这种格式。在 Sketch 里批量重命名可以用插件也可以手动改。手动改的话选中画板后在右侧检查器的 Name 字段改。改完的好处是导出时文件名直接就是CN.png、US.svg前端拿到就能用不用再写一层映射表。这一步花二十分钟后面省两小时。2.3 矢量 vs 位图什么时候该用哪种素材包里如果同时有矢量和位图选哪个取决于你的使用场景。矢量Sketch 原生形状适合需要缩放的场景比如响应式布局里国旗要从 16px 变到 64px。位图适合固定尺寸、对渲染性能敏感的场景比如长列表里几百个国旗同时出现。我的习惯是UI 里用 SVG 导出数据大屏或需要极致性能的列表用 PNG 的 2x 和 3x。Sketch 导出时选 SVG 要注意勾选「Outline」还是「Preserve」前者把文字转曲后者保留可编辑性。国旗一般没有文字选哪个都行但如果有国徽细节建议 Preserve 后再手动检查。3. 从 Sketch 批量导出国旗格式、尺寸与命名的一次性配置素材包能不能高效用起来八成取决于导出这一步配得对不对。Sketch 的导出功能看着简单但批量处理 260 多个画板时参数设错一个后面就得全部重来。这一章把导出配置、脚本辅助和常见格式选择讲透。3.1 Sketch 内置导出Make Exportable 的正确用法选中一个画板右侧检查器底部有「Make Exportable」区域。点加号添加导出规格可以设尺寸1x、2x、3x 或自定义宽高和格式PNG、JPG、SVG、PDF、EPS。批量导出的关键是先选中所有画板再统一设导出规格Sketch 会按每个画板分别导出。具体步骤在画布上框选所有国旗画板右侧检查器会显示「多个画板选中」状态此时设一个导出规格比如 PNG 2x然后点右下角「Export Selected」。弹窗里选一个空文件夹Sketch 会按画板名生成文件。这里有个细节如果画板名有斜杠或特殊字符导出文件名会出问题所以前面重命名那步很重要。3.2 用 sketchtool 命令行批量导出Sketch 自带一个命令行工具sketchtool适合需要反复导出或接进 CI 的场景。macOS 上装了 Sketch 后在终端里能直接调用。下面这条命令把指定画板导出成 SVG# 导出 .sketch 文件里所有画板为 SVG输出到 ./flags 目录 sketchtool export artboards \ --output./flags \ --formatssvg \ --items* \ ./flags-source.sketch逻辑说明export artboards指定导出对象是画板--output是输出目录必须提前建好--formatssvg指定格式可以换成png并配合--scales2导出二倍图--items*表示全部画板也可以写具体画板名只导几个。参数上--scales只对位图格式生效SVG 不需要。如果导出报错说找不到文件检查路径是不是相对路径sketchtool对相对路径的处理有时不直观建议用绝对路径。3.3 导出格式选择SVG、PNG、PDF 的取舍格式适用场景优点注意点SVGWeb UI、响应式布局无损缩放、体积小复杂路径在旧浏览器可能渲染异常PNG移动端、数据大屏兼容性好、渲染快需要多倍图体积大PDF打印、设计交付矢量、跨平台Web 端不直接用我一般给前端交付 SVG给移动端交付 PNG 的 2x 和 3x给打印物料交付 PDF。如果素材包里的国旗是位图转的矢量导出 SVG 后要检查路径节点数节点太多会导致文件臃肿这时候用 Sketch 的「Layer Path Simplify」简化一下。3.4 导出后的文件校验导出完别直接扔给前端先做一次校验。检查三件事文件数量对不对260 多个不能少、文件名是不是 ISO 代码、SVG 能不能正常打开。可以用一段简单的 shell 脚本数文件并列出异常命名# 统计导出目录下的文件数并列出不符合两位大写字母命名的文件 ls ./flags | wc -l ls ./flags | grep -vE ^[A-Z]{2}\.(svg|png)$逻辑说明第一行数总数第二行用正则筛出不符合「两位大写字母加扩展名」的文件。如果有输出说明命名有问题回去改画板名重新导出。这一步能拦住大部分低级错误。4. 把国旗接进前端从静态资源到组件化的落地方式导出只是中间产物真正要用起来还得接进代码。这一章讲三种落地方式纯静态资源、CSS Sprite、以及组件化封装。选哪种取决于你的项目规模和更新频率。4.1 静态资源直接引用最简单的方式是把导出的 SVG 放进public/flags/目录用的时候拼路径// 根据国家代码获取国旗图片路径 function getFlagUrl(countryCode) { // countryCode 必须是两位大写字母如 CN、US const code countryCode.toUpperCase(); // 简单校验防止路径注入 if (!/^[A-Z]{2}$/.test(code)) { console.warn(Invalid country code: ${countryCode}); return null; } return /flags/${code}.svg; }逻辑说明函数接收国家代码转大写后校验格式返回路径。参数上countryCode建议从后端接口拿不要在前端硬编码国家列表。这种方式的缺点是每次新增国家要重新部署静态资源优点是简单、无构建依赖。4.2 用构建工具批量导入如果项目用 Vite 或 Webpack可以用import.meta.glob或require.context批量导入避免手动维护列表// Vite 环境下批量导入所有国旗 SVG const flagModules import.meta.glob(/public/flags/*.svg, { eager: true }); // 构建国家代码到 URL 的映射 const flagMap {}; for (const path in flagModules) { // 从路径中提取文件名如 /public/flags/CN.svg - CN const code path.split(/).pop().replace(.svg, ); flagMap[code] flagModules[path].default; } export function getFlag(countryCode) { return flagMap[countryCode.toUpperCase()] || null; }逻辑说明import.meta.glob是 Vite 的批量导入 APIeager: true表示同步导入。参数上路径要写对/public在 Vite 里是特殊目录实际引用时可能不需要前缀具体看构建配置。这种方式适合国旗数量固定、不常更新的场景。4.3 封装成 React/Vue 组件如果多个页面都要用国旗封装成组件更合适。以 React 为例// Flag.jsx - 国旗组件 import React from react; // 预导入所有国旗实际项目可以用动态导入优化 const flags import.meta.glob(/public/flags/*.svg, { eager: true, as: url }); export function Flag({ code, size 24, alt }) { const upperCode code?.toUpperCase(); const src flags[/public/flags/${upperCode}.svg]; if (!src) { // 找不到国旗时渲染占位避免布局塌陷 return span style{{ width: size, height: size * 0.75, display: inline-block }} /; } return ( img src{src} width{size} height{size * 0.75} alt{alt || ${upperCode} flag} loadinglazy / ); }逻辑说明组件接收code、size、alt三个参数。size控制宽度高度按常见国旗比例 4:3 算。找不到国旗时渲染一个同尺寸占位防止列表布局跳动。参数上loadinglazy对长列表很重要能减少首屏请求。如果项目里国旗出现频率极高可以考虑用 CSS Sprite 替代单独请求。4.4 蓝湖等协作平台导入 Sketch 素材的注意点团队里如果设计稿走蓝湖这类协作平台把 Sketch 国旗素材导进去时要注意蓝湖对 Symbol 的支持和 Sketch 原生不完全一致导入后可能出现图层错位。常见做法是先把国旗画板导出成 PNG 或 SVG再作为图片上传到蓝湖而不是直接传 .sketch 源文件。另外蓝湖的标注功能对矢量图支持有限如果前端需要精确的颜色值建议在 Sketch 里先取色记录再对照蓝湖标注核对。5. 国旗素材落地避坑从授权到渲染的五个真实翻车点这一章全是血泪经验。国旗素材看着简单但涉及授权、政治敏感、渲染兼容、性能、更新维护五个维度每个都能让项目翻车。5.1 授权不明导致商用风险现象素材包下载页没写授权协议直接用在商业产品里后来收到版权方邮件。原因很多国旗素材是从维基百科或其他公开渠道收集的原始授权可能是 CC BY-SA 或公有领域但打包者没标注。解决用之前查每个国旗的来源。国旗本身多数属于公有领域但特定设计版本可能有版权。稳妥做法是用政府公开的国旗规范图或者选明确标注 MIT、CC0 的素材包。商用前让法务过一遍别省这一步。5.2 国家代码与地区标识混淆现象前端按TW拿国旗结果拿到的是错误标识或者某些地区代码在素材包里根本不存在。原因ISO 3166-1 有国家代码也有地区代码素材包可能只覆盖国家不覆盖地区。另外有些代码存在争议。解决先确认你的产品需要哪些代码和素材包的覆盖范围做一次 diff。缺失的代码要么补图要么用中性占位图。代码映射表要单独维护不要散落在各处。5.3 SVG 在部分浏览器渲染异常现象Chrome 里正常的国旗 SVG在 Safari 或某些安卓 WebView 里显示不全或颜色错乱。原因SVG 里用了filter、mask或复杂路径不同浏览器渲染引擎支持度不同。解决导出 SVG 后用 SVGOMG 这类工具优化去掉不必要的滤镜和元数据。如果还不行降级用 PNG。测试时至少覆盖 Chrome、Safari、Firefox 和主流安卓 WebView。5.4 长列表里几百个国旗同时渲染卡顿现象国家选择列表里 200 多个国旗同时加载页面滚动卡顿内存飙升。原因每个国旗一个独立请求加上没有懒加载浏览器同时处理几百个图片解码。解决用虚拟列表只渲染可视区域配合loadinglazy。或者把小尺寸国旗合成一张 Sprite 图用background-position定位。Sprite 方案适合尺寸固定的场景能显著减少请求数。5.5 素材更新后前端映射失效现象素材包更新了一版新增了几个国家但前端映射表没同步新国家显示占位图。原因素材和代码分离更新不同步。解决把素材导出和映射表生成做成一个脚本每次更新素材后自动重新生成映射文件。映射文件纳入版本控制更新时走 code review。这样素材和代码的变更能对应上不会漏。6. 国旗素材的进阶玩法自动化流水线与按需裁剪基础链路跑通后可以往上做一层自动化。我现在的习惯是素材包更新后跑一个脚本完成导出、优化、生成映射、校验四件事全程不用手动开 Sketch。下面是一个可复用的流水线思路。6.1 用脚本串起导出与优化核心是用sketchtool导出再用svgo优化 SVG最后生成映射文件。三步写成一条命令链#!/bin/bash # build-flags.sh - 国旗素材自动化流水线 set -e # 任何一步失败就退出 SOURCE./flags-source.sketch OUTPUT./public/flags TMP./tmp-flags # 1. 清理旧文件 rm -rf $OUTPUT $TMP mkdir -p $OUTPUT $TMP # 2. 从 Sketch 导出 SVG sketchtool export artboards \ --output$TMP \ --formatssvg \ --items* \ $SOURCE # 3. 用 svgo 优化并移动到目标目录 # --multipass 多次优化--pretty 保留可读性 npx svgo --folder$TMP --output$OUTPUT --multipass # 4. 生成映射文件 node -e const fs require(fs); const files fs.readdirSync($OUTPUT).filter(f f.endsWith(.svg)); const map {}; files.forEach(f { const code f.replace(.svg, ); map[code] /flags/ f; }); fs.writeFileSync($OUTPUT/../flag-map.json, JSON.stringify(map, null, 2)); console.log(Generated map with, files.length, flags); 逻辑说明脚本分四步清理、导出、优化、生成映射。set -e保证出错即停避免半成品。svgo的--multipass会多次优化直到体积不再减小对国旗这种路径较多的图效果明显。最后用 Node 生成 JSON 映射前端直接 import 这个 JSON 即可。参数上--folder和--output的路径要对应好svgo不会自动建目录。6.2 按需裁剪只打包用到的国旗如果产品只面向特定区域没必要把 260 多个国旗全打进包。可以在流水线里加一个白名单过滤// filter-flags.js - 按白名单过滤国旗 const fs require(fs); const path require(path); // 从配置读取需要的国家代码 const needed require(./needed-countries.json); // 如 [CN, US, JP] const sourceDir ./public/flags; const targetDir ./public/flags-filtered; fs.mkdirSync(targetDir, { recursive: true }); needed.forEach(code { const src path.join(sourceDir, ${code}.svg); if (fs.existsSync(src)) { fs.copyFileSync(src, path.join(targetDir, ${code}.svg)); } else { console.warn(Missing flag: ${code}); } }); console.log(Copied ${needed.length} flags);逻辑说明从needed-countries.json读白名单逐个复制到目标目录缺失的打印警告。参数上白名单可以按业务线拆成多个文件比如needed-asia.json、needed-europe.json构建时按需组合。这样能把包体积从几 MB 降到几百 KB。6.3 验证流水线是否可靠流水线跑完后做一次端到端验证随机抽几个国家代码检查文件存在、SVG 能打开、映射表里有对应项。我一般写一个简单的测试脚本接进 CI每次素材更新自动跑。这样素材包换版本时不会出现「设计说更新了前端说没生效」的扯皮。这套流水线我用了快两年最大的体会是国旗素材这种看似一次性的资源一旦接进产品就会反复用到前期把自动化做扎实后面每次新增国家或换素材包都是几分钟的事。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

机器视觉相机选型指南:从成像原理到工程实践的关键参数解析

机器视觉相机选型指南:从成像原理到工程实践的关键参数解析

1. 开篇:为什么学机器视觉,先要把相机这门"功课"补上接触《图像处理、分析与机器视觉 第四版》有一段时间了,每次翻到摄像机与相机概述这部分,总有一种"明明每个字都认识,可真正上手选型时还是两眼一抹…

2026/10/13 12:15:03 阅读更多 →
RAG系统从能跑到扛用:查询、检索、生成端的优化实践

RAG系统从能跑到扛用:查询、检索、生成端的优化实践

RAG这个词在圈子里已经被聊烂了,但真把它做成一个稳定能用的系统,又是另一回事。之前那篇把朴素RAG的底子过了一遍:切块、向量化、召回、拼上下文、生成,一条链路跑通不难,难的是它总在几个老毛病上翻车——该召回的没…

2026/10/13 12:15:03 阅读更多 →
数据仓库核心理论:维度建模、数仓分层与数据血缘

数据仓库核心理论:维度建模、数仓分层与数据血缘

先讲个真事。某团队一期数仓上线半年后,业务方问“4月销售额到底是多少”,数据组自己开了三次会都定不下最终口径——因为同一个销售额,在七八张表里能算出七八种结果。没人故意做错,只是这些表前后横跨了大半年开发周期&#xff…

2026/10/13 12:15:03 阅读更多 →

最新新闻

Agent上线最后一公里:评测门禁、可观测性埋点与AgentOps闭环落地指南

Agent上线最后一公里:评测门禁、可观测性埋点与AgentOps闭环落地指南

1. 从"能跑"到"敢上线":Agent 交付的最后一公里到底卡在哪做过 Agent 项目的人大概都有过这种体验:本地 Demo 跑得飞起,工具调用、多轮对话、RAG 检索全都正常,演示给同事看的时候掌声一片。可真到了要往生产…

2026/10/13 12:57:09 阅读更多 →
泰坦尼克生存分析:从数据清洗到业务决策的完整链路

泰坦尼克生存分析:从数据清洗到业务决策的完整链路

1. 这不是“电影彩蛋”,而是一份真实世界的生存决策模型“titanic生存率数据分析”——这六个字背后,藏着的不是沉船故事的怀旧回响,而是数据科学入门者真正踩进现实泥地的第一步。它不靠炫技的算法堆砌,也不依赖昂贵的GPU集群&am…

2026/10/13 12:57:09 阅读更多 →
Codex智能体实战:从零构建AI应用的核心循环与工程落地

Codex智能体实战:从零构建AI应用的核心循环与工程落地

开头 我一直觉得,2025年之后学编程,最大的分水岭不是会不会写代码,而是会不会“指挥代码”。标题里这个“闪学it-Codex智能体实战”,说白了就是教你一件事:把AI从“聊天机器人”变成“能干活的下属”。我从零开始踩了一…

2026/10/13 12:57:09 阅读更多 →
OGG Opus音频编码与容器格式解析实践

OGG Opus音频编码与容器格式解析实践

1. 音频编码技术背景与OGG Opus协议概述在实时音频传输领域,编码效率与音质平衡始终是核心技术挑战。2012年由IETF标准化的Opus编码器凭借其独特的多模式架构,在语音和音乐场景中均展现出卓越性能。而OGG作为Xiph.Org基金会推出的开源容器格式&#xff0…

2026/10/13 12:57:09 阅读更多 →
用Go从零写一个本地记账工具:SQLite+命令行实战

用Go从零写一个本地记账工具:SQLite+命令行实战

1. 为什么我劝你用Go写一个属于自己的收支记账工具1.1 从一张Excel表说起:记账这件事到底难在哪我身边有不少朋友,记账这件事前前后后启动过不下五次。第一次是下载某个记账App,记了三天,嫌广告多、启动慢,卸载了。第二…

2026/10/13 12:57:09 阅读更多 →
AI+低代码:元数据驱动与工程化兜底,如何让AI生成的应用真正可交付

AI+低代码:元数据驱动与工程化兜底,如何让AI生成的应用真正可交付

聊到AI和低代码结合,很多人第一反应是:是不是用自然语言说一句“给我做个进销存”,平台就能把页面、逻辑、数据库一次性生成。我做了多年低代码平台,看到这个说法的第一反应其实是警惕——AI生成页面这个事,很早就有各…

2026/10/13 12:56:07 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →