相册分类导航栏设计:从建模到前端实现的完整指南
做相册分类导航栏看起来只是个不大的功能点但真正做起来就会发现它连着分类体系、前端渲染逻辑、交互反馈和后期维护一整条链路。很多人一开始只把它当成“顶部一排按钮”来做分类一多、照片一多马上就翻车。我说的相册分类导航栏常见于摄影作品站、商品图库、个人照片管理系统这类场景用户进页面先看到的导航结构就是它。能不能快速定位目标相册、能不能顺畅切换分类往往决定整套相册页面的可用性。这篇内容适合正在搭相册页面、想自己动手做分类导航的产品设计师和前端开发者也适合只想把本地照片整理成网页展示、又不希望被复杂框架绕晕的朋友。下面我把思路、建模、实现和踩坑记录完整过一遍。1. 相册分类导航栏的设计核心先别急着写代码1.1 你设计的不是按钮是用户的浏览地图很多人做分类导航第一反应是“给相册打个标签然后生成一排 tab”。这个方向没错但问题在于用户不是来欣赏你的导航设计而是来快速找到某张图片或某个系列的。如果分类导航本身需要思考用户就很容易流失。我习惯把相册浏览路径拆成三步用户先确认“我要找什么类别的照片”在对应分类下列表滚动做快速筛选命中目标后进入详情或大图预览。分类导航栏服务的是第一步。它承担的任务不是展示所有分类而是帮用户在最短时间内建立“这个页面有哪些大分区”的心智模型。因此导航结构必须和用户对内容的组织预期一致。举个例子你做一个旅行照片集用户预期看到的可能是“国内 / 国外”“城市 / 自然”“2023 / 2024”这类切分方式而不是“相机型号”“文件格式”。分类导航不是数据库字段的搬运它是用户理解内容的入口。设计前你可以先问自己一个问题如果用户只能看到一行分类标签我希望他最先看到什么这个问题会决定标签的排序逻辑和数量上限。1.2 三种常见结构选型标签式、下拉式、面包屑式相册分类导航栏不是只有一种形态。根据相册的数量和层级关系我常用三种结构它们的适用场景差别很大。结构形态适合场景优点潜在问题标签式Tab / 胶囊分类数量在 5-10 个层级浅直观、切换快、移动端友好分类一多就会溢出屏幕下拉分组式分类层级深子分类多节省空间能承载二级结构藏得太深点击路径变长面包屑式相册内容层级明确需要返回上级适合管理型页面位置感强不适合作为主导航展示标签式最适合大多数面向访客的相册页面比如作品集。它的信息暴露程度高用户不用点开任何菜单就能看到全部分类。但有一个硬性限制横向空间是有限的。超过十个标签后要么横向滚动要么折叠起来。下拉分组式适合内容管理系统或后台相册管理页面。比如“地区相册”下有“华东 / 华北 / 华南”每个地区再挂具体城市相册。这种情况下把地区作为一级下拉项比把所有城市平铺成一排要清晰得多。面包屑式则适合“详情页里需要返回上级分类”的场景。它不是主导航而是导航辅助线索。真正做得好的相册系统往往会混合使用顶部用标签做主分类页面内再用面包屑告诉用户当前位置。1.3 相册规模决定形态先数一数你有多少个分类我在实际项目里发现一个很实用的判断标准分类数量是导航形态的第一个决定因素。小于5个分类时标签式基本不会出问题甚至可以直接把导航做成居中的几个大按钮。5到10个分类仍然推荐标签式但要考虑移动端横向滚动。10到20个分类建议分组或加上“全部”之外的下拉筛选。超过20个分类顶部放标签会非常拥挤这时候更应该做“分类聚合页”把导航栏做成多维度筛选器而不是简单一行标签。还有一个经常被忽略的指标单个分类下的照片数量。如果“人物”这个分类有1000张照片而“静物”只有10张导航栏上这两个标签的视觉权重就不应该完全一样。你可以通过分类后面的数字角标来提示数量也可以在排序时把高频分类放在前面。我踩过的一个典型坑是一开始把所有分类都做成平级标签用户根本不知道“风景”和“人像”下面其实还有细分。后来改成“分组 子标签联动”的模式页面体验才明显好转。导航栏不是一个孤立组件它是内容结构的外显。把这层关系想清楚后面的代码写起来才顺。2. 分类建模先刻好数据骨架再加导航2.1 先回答“这些照片将来会被怎么找”技术实现之前分类导航的数据结构必须先确定。很多人直接在前端写死一组分类数组临时上线没问题一旦后期加分类、改排序、加图片就会变得非常痛苦。我习惯先画一张“数据关系图”把照片、相册、分类、标签四层关系拆开照片是物理文件有自己的元数据拍摄时间、地点、尺寸相册是一个集合里面装若干照片分类可以对应到相册或照片标签则是比分类更细的索引维度。如果只是做一个小站点不需要完全实体化四层结构但至少要在数据层区分“分类”和“标签”这两个概念。分类是固定有限的维度适合做导航项比如“城市 / 自然 / 人像”。标签是灵活的描述词适合做辅助筛选比如“夜景”“胶片感”“红色系”。把这两个混在一起导航栏会在后期变得极难维护。再想一个问题用户找照片的方式通常是“按主题”还是“按时间”这决定了分类的根维度。旅行相册按地点分类更自然活动相册按时间线分类更自然产品相册按品类分类更自然。根维度选错导航再怎么调都别扭。2.2 建立分类与子分类的层级关系分类层级不一定要很深。我见过一些相册项目把层级做到四层一级分类、二级分类、年份、再按拍摄地点细分最后用户自己都迷路了。导航栏设计上有一条经验法则用户能轻松理解的层级不超过两层。也就是说顶层分类之下最多再分一层子分类再深的内容应该靠搜索或标签承接。数据建模时可以采用自关联结构分类表里有一个父级ID字段分类ID 分类名称 父级ID 排序权重 1 旅行 0 1 2 城市 1 1 3 自然 1 2 4 人像 0 2这种方式的好处是不管做几层分类数据结构都能承接。前端拿到这个数组后再根据父级ID组装成树形结构。另一个重要字段是“排序权重”。很多人忽略了相册分类的顺序问题结果分类顺序完全由创建时间决定。用户是记不住这个顺序的分类排序必须可控。建议每个分类都加上一个数字类型的 sort 字段越小的越靠前。如果某些分类暂时没有照片是隐藏还是显示我建议永久分类先隐藏临时分类显示但置灰避免导航栏出现一堆空分类用户点进去只看到空页面。2.3 给每个分类配上可用状态和操作字段分类导航不只是显示名称那么简单。你还需要考虑几个附加状态是否启用是否默认展开是否显示照片数量角标是否允许匿名用户访问等等。这些状态最好在数据层定义而不是写在前端组件里。我看到过不少项目前端代码里写满了if (category.id 3)这种硬编码后期换个人来维护基本等于重建。推荐方案是给分类结构追加一个“配置项”对象类似这样{ id: 2, name: 城市, parentId: 1, sort: 1, status: enabled, showCount: true, description: 城市风光与建筑摄影 }其中description看起来很不起眼但实际很有用。分类导航栏可以做成带副标题的样式帮助用户理解这个分类里到底是什么内容。尤其是当分类名称比较抽象时一句简短描述能大幅降低用户的判断成本。我个人还有一个习惯重要分类配一个封面图。分类封面图不仅用于导航页的展示还能在分类内容未加载时作为占位提示视觉体验会好很多。分类建模做扎实后导航栏实现就变成了一件“取数据 渲染”的事情而不是“东拼西凑找字段”的事情。3. 实操实现5 步搭出可用的相册分类导航栏3.1 页面骨架先把数据结构和空态准备出来无论你用原生 JavaScript、Vue 还是 React第一步都是一样的先定义分类数据和当前激活状态。我用一个简单示例说明核心逻辑。假设有四个分类全部、城市、自然、人像。const categories [ { id: all, name: 全部 }, { id: city, name: 城市 }, { id: nature, name: 自然 }, { id: portrait, name: 人像 } ]; const photos [ { id: 1, category: city, url: city-1.jpg, title: 城市夜景 }, { id: 2, category: nature, url: nature-1.jpg, title: 森林小径 }, { id: 3, category: portrait, url: portrait-1.jpg, title: 人像写真 } ]; let currentCategory all;这里要注意一个关键点分类的 id 与照片上的分类字段必须完全一致。我见过不少项目导航栏上的分类名是中文但数据层存的是 id渲染时对不上结果就是“点击分类后一张照片也显示不出来”。规范的做法是前端展示 name筛选时用 id。页面结构用一个列表容器来承载相册卡片nav classcategory-nav idcategoryNav/nav div classphoto-grid idphotoGrid/div在实际项目里我还建议把“空数据”状态提前准备好。也就是当某个分类下没有照片时页面要显示“这个分类还没有内容”的提示而不是给用户一片空白。这个细节看起来小但对体验影响很大。3.2 Tab 样式与激活态用户就是靠这个知道自己在哪分类导航栏的激活态一定要清晰。用户需要一眼看出“我现在处于哪个分类”否则切换分类时会丧失位置感。我常用的样式是三段式底部色条、背景填充、文字颜色变化。底部色条比较克制适合作品展示型页面背景填充更醒目适合内容密集型的相册页。.category-nav { display: flex; gap: 8px; padding: 10px 16px; background: #fff; border-bottom: 1px solid #e5e5e5; position: sticky; top: 0; z-index: 10; } .nav-item { padding: 8px 16px; border-radius: 20px; font-size: 14px; color: #666; cursor: pointer; transition: background 0.2s, color 0.2s; } .nav-item.active { background: #333; color: #fff; font-weight: 500; }position: sticky是分类导航栏特别好用的一个属性。页面往下滚动时导航栏吸在顶部用户随时可以切换分类不需要再滚回页面顶端。这个体验在相册这种内容很长的页面里尤其明显。有一点要提醒sticky 不是对所有父容器都生效。如果父级元素有overflow: hidden吸顶会失效。这是我排查过很多次的经典问题。3.3 分类筛选逻辑数据过滤与空结果提示筛选逻辑最简单的写法是拿到当前分类 id然后过滤数据function render() { const visiblePhotos currentCategory all ? photos : photos.filter(photo photo.category currentCategory); photoGrid.innerHTML visiblePhotos.map(photo div classphoto-card>if (visiblePhotos.length 0) { photoGrid.innerHTML div classempty-tip这个分类下还没有照片/div; }这个空态提示文案可以按具体场景调整比如“暂未收录这个主题的作品”。如果你的相册数据是从接口加载的建议在数据到达后再渲染导航栏不要事先渲染空导航。分类顺序由接口保证前端不要自己重新排序否则会出现分类顺序跟前端逻辑不一致的坑。3.4 让导航栏记住位置用好 Hash 参数相册页面有一个常见痛点用户点进某个分类刷新页面后回退到默认的“全部”分类位置丢失。用户只能重新找一遍体验非常差。解决办法是为每个分类分配一个 hash 值例如#/category/city在初始化时读取 hash在切换分类时写入 hashfunction getCategoryFromHash() { const match location.hash.match(/category\/(.)/); return match ? match[1] : all; } function setHash(categoryId) { location.hash /category/${categoryId}; } window.addEventListener(hashchange, () { currentCategory getCategoryFromHash(); render(); });这样用户把带 hash 的链接分享给朋友时对方打开链接就能直接看到对应分类下的照片。这比单纯使用前端状态变量要友好得多。如果工程是 Vue Router 或 React Router逻辑同理只是把 hash 换成路由参数。关键思路是分类当前状态要体现在 URL 中而不是只存在于变量里。3.5 移动端适配横向滚动与安全区移动端的屏幕宽度有限分类一多导航栏必然放不下。推荐方案是让导航栏在移动端横向滚动而不是自动换行或压缩字体。.category-nav { overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; } .category-nav::-webkit-scrollbar { display: none; }隐藏滚动条后视觉上比较干净用户通过手势左右滑动来选择分类。这里有一个体验细节在初始渲染时可以让默认选中的分类自动滚动到可视区域中间让用户一进来就能看到当前所在的分类。requestAnimationFrame(() { const activeItem document.querySelector(.nav-item.active); if (activeItem) { activeItem.scrollIntoView({ inline: center, block: nearest }); } });另外底部虚拟导航键、全面屏手势区域会影响视觉导航栏如果是固定在顶部的倒不用太担心。但如果是底部 Tab 式导航就必须给padding-bottom加上env(safe-area-inset-bottom)适配。还有一个我反复强调的点移动端不要为了省空间把右侧的“更多”按钮做成一个没有文字说明的“...”。分类数量多时“...”很容易被忽略。更稳妥的做法是做一个“全部分类”入口让用户点进去看到完整的分类列表。4. 常见问题与排查分类导航最常翻车的 4 个位置4.1 点击分类后相册为空先查这三处这是出现频率最高的问题通常由三个原因导致。第一个是分类 id 不匹配。导航项上的>img srccity-1.jpg alt城市夜景 loadinglazy /浏览器会在图片接近可视区域时才加载资源这对相册页非常有效。如果你用框架做列表渲染可以考虑为照片列表加一个简单的分页或“加载更多”按钮。用户选择分类后先渲染前 20-30 张滚动到底部时再追加下一批体感上比一次性渲染几百张图片流畅得多。如果项目的交互要求更高比如需要快速切换分类并保留每个分类的滚动位置可以在切换时用display: none隐藏上一组照片而不是直接清空 DOM。但也要注意隐藏元素仍会占用内存照片总量特别大时还是建议清理掉不可见的 DOM 节点。我看到很多团队在这类问题上容易走极端要么一次渲染全部导致白屏要么每次切换都全量重新请求导致接口压力大。折中方案是带缓存的懒加载切换分类时先展示上一次的分类快照后台拉取新分类数据这样一个过渡体验会平滑很多。5. 样式细节与长期维护经验5.1 视觉优先级分类导航和搜索入口不要抢位置分类导航栏所在的位置通常是页面最核心的视觉区域。如果这个区域塞了搜索框、排序按钮、筛选图标、分类标签用户会非常困惑。我的建议是主导航只承担“选择分类”这一件事。搜索入口可以放在导航栏上方的独立区域或者固定在页面的另一个角落。排序功能更不建议放在分类导航同一行除非页面本身就是管理后台。导航栏的背景色建议和页面内容有明显的区隔但不要比内容本身更抢眼。最稳妥的配色是用深灰、黑、白这类中性色让照片本身的颜色去吸引注意力。如果相册页有品牌主色可以用主色作为激活态的下划线或背景但不要大面积铺满否则视觉噪音太重。5.2 名称长度、截断与排列顺序分类名称尽量控制在 4-8 个字以内。名称太长横向排列时占地方用户扫读也费劲。“夏日旅行摄影精选”这类名称在导航栏里就不合适改成“旅行精选”或“夏日出游”再通过副标题补充信息效果会好很多。如果分类名称确实过长可以设置最大宽度并省略.nav-item { max-width: 120px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }但要注意省略号在移动端影响识别能用短名称解决的问题就不要依赖截断。排列顺序上我通常把“全部”或“推荐”放在最前面然后按访问频率降序排列最后放低频分类。如果暂时没有访问数据可以按内容时间线排列最新分类靠前。分类排序不是一次性工作最好在后台可以配置避免为了调整一个分类顺序去改代码。5.3 暗色模式和无障碍可访问性相册页面在暗色模式下尤其常见用户看照片时往往不希望页面太亮。分类导航栏做暗色适配时不能用单一变量去调整背景色“按钮 hover 色”和“激活态颜色”要分别定义。推荐用 CSS 变量管理:root { --nav-bg: #ffffff; --nav-text: #333333; --nav-active-bg: #333333; --nav-active-text: #ffffff; } media (prefers-color-scheme: dark) { :root { --nav-bg: #1e1e1e; --nav-text: #cccccc; --nav-active-bg: #ffffff; --nav-active-text: #111111; } } .category-nav { background: var(--nav-bg); }这样暗色模式下导航栏变成深色背景、浅色文字激活项反过来变成亮色底、深色字对比关系清晰。无障碍方面分类导航一定要给键盘用户和屏幕阅读器提供可用性支持。每个导航项尽量使用真实的button标签并设置aria-selected表示当前选中状态。视觉上隐藏但屏幕阅读器能读到的提示文本也应该保留比如“当前分类城市”。这些细节做完之后整个导航栏的可访问性会有质的提升。写在最后的个人经验相册分类导航栏看着小但它几乎是整个相册项目里被用户接触最多的组件。我自己在几个不同类型项目里迭代过多次最大的体会是导航栏的成败不在于视觉效果有多炫而在于分类结构是否贴近用户预期、点击反馈是否及时、状态是否可靠。尤其是分类状态同步这件事一定不要图省事只存在内存变量里把它放进 URL刷新、分享、回退都能保持一致能少踩很多坑。另外移动端横向滚动和吸顶效果这两项最好在开发早期就验证不要等整个页面都写完再来补不然后期排查成本会高得多。如果你也正在做相册分类导航栏不妨从分类建模开始先把数据关系理清楚再写组件你会发现自己做出来的导航栏不仅好用而且后期维护特别省心。

相关新闻

jiuwensymbiosis 执行轨迹样例详解:sample_trace 目录与 jiuwensymbiosis-replay 回放实战

jiuwensymbiosis 执行轨迹样例详解:sample_trace 目录与 jiuwensymbiosis-replay 回放实战

具身智能人工智能AI Agent机器人计算机视觉Agent 编排 【免费下载链接】jiuwensymbiosis Jiuwen Symbiosis就是一个"能懂人话、看得见物理世界、长了四肢的智能助手"。用户不需要示教,不需要教它怎么抓东西,怎么走路,就像指挥一个经…

2026/10/14 22:11:32 阅读更多 →
降维方法全解析:PCA、LDA、t-SNE、UMAP与自编码器选型指南

降维方法全解析:PCA、LDA、t-SNE、UMAP与自编码器选型指南

1. 降维这件事,为什么值得单独拎出来讲降维(Dimensionality Reduction)在数据科学和机器学习领域里,算是一个“老生常谈但又常谈常新”的话题。我最初接触它的时候,以为无非就是把高维数据压缩成低维,方便画…

2026/10/14 22:11:32 阅读更多 →
design-motion-principles高级技巧:FLIP共享布局、scroll-driven动画与@property深度实战

design-motion-principles高级技巧:FLIP共享布局、scroll-driven动画与@property深度实战

【免费下载链接】design-motion-principles A motion design skill with two modes — build interactive components with purposeful motion, or audit existing animations. Context-aware, per-designer guidance distilled from the published work of Emil Kowalski, Jak…

2026/10/14 22:11:32 阅读更多 →

最新新闻

Vue工程实践进阶:组件通信、组合式函数与性能优化全解析

Vue工程实践进阶:组件通信、组合式函数与性能优化全解析

Vue 笔记写到第七篇,这次不聊基础语法,也不画响应式原理的图解,重点全部放在工程实践里真正卡过人的地方:组件通信方案怎么选、组合式函数怎么拆才不会拆出一堆烂代码、路由守卫的执行顺序为什么老和预期不一样、Pinia 到底管什么…

2026/10/14 22:56:44 阅读更多 →
AI招聘实战:半自动方案如何避免账号风控与提升回复率

AI招聘实战:半自动方案如何避免账号风控与提升回复率

1. 为什么“AI做招聘”这件事,值得认真聊一聊招聘这件事,表面上看是“发岗位、收简历、约面试”三步走,但真正干过的人都知道,它本质上是一个高频沟通、强情绪、重信任的活儿。候选人投完简历之后,心里其实一直在打鼓&…

2026/10/14 22:56:44 阅读更多 →
冷热电联供系统多目标优化调度:MOPSO算法Matlab实现与Pareto前沿分析

冷热电联供系统多目标优化调度:MOPSO算法Matlab实现与Pareto前沿分析

做综合能源系统运行优化这项工作,我接触最多的一条技术线就是冷热电联供(CCHP)。它把天然气发电后的余热回收起来,再通过吸收式制冷和热交换把冷、热、电一块供出去,能量梯级利用效率比单纯发电高不少。但真正落地的时…

2026/10/14 22:56:44 阅读更多 →
AutoTool 实战:如何省下 30% 的 Agent 推理成本

AutoTool 实战:如何省下 30% 的 Agent 推理成本

1. 从 Jev 爆火说起:Agent 效率焦虑到底卡在哪Jev 这类通用 Agent 框架火起来之后,我身边不少做应用落地的朋友都经历了同一个心路历程:Demo 阶段惊艳,接入真实业务之后开始肉疼。疼的不是模型能力不够,而是推理成本和…

2026/10/14 22:56:44 阅读更多 →
2026专科生降AI率工具测评:九款实测与选型指南

2026专科生降AI率工具测评:九款实测与选型指南

每年到了毕业设计季,我都会收到不少专科院校同学的私信,问“我写的文章老是被标记为疑似AI生成,该怎么办”“有没有靠谱的降AI率工具推荐”。我不是学校老师,也不是什么平台官方,就是纯粹在内容创作和论文辅导这行泡了…

2026/10/14 22:56:44 阅读更多 →
原生JS组态软件实战:无后台监控界面的数据格式与架构设计

原生JS组态软件实战:无后台监控界面的数据格式与架构设计

简介:一份基于原生JavaScript实现的组态软件源码包,面向Web前端与工业自动化开发者,用于在无后台依赖环境中通过拖拽方式快速构建电力一次接线图、工业流程图等图形界面。压缩包共1013个文件,约14.4MB,以svg、png、gif…

2026/10/14 22:55:37 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →