超实用漂亮精美HTML菜单源码:从看懂到改好再到复用的完整指南
简介这份资源面向前端开发者与网页设计学习者提供一组可直接套用的精美HTML菜单源码帮助解决导航栏样式单一、交互效果实现繁琐的问题。压缩包共38个文件约481KB以less与scss样式源文件为主便于按需修改变量、混入与图标样式同时包含3个js脚本、2个css文件以及otf、woff2、ttf、svg、eot、woff等字体图标资源另附1个html示例页面方便快速预览效果。内容涵盖基础菜单结构、下拉交互与动画过渡等常见场景样式层与脚本层分离适合初学者研读代码结构也可作为有经验开发者的项目模板。目前已有2595人学习下载读者可从中掌握菜单布局、状态切换与图标字体集成的实现思路并在此基础上快速搭建符合自身项目风格的导航组件。1. 从一份「超实用漂亮精美html菜单源码」说起为什么你抄的导航总差点意思做过前端的人大概都有过这种经历从某个源码站下载了一份「超实用漂亮精美html菜单源码」本地打开一看效果确实漂亮渐变、阴影、悬停动画一个不少。可一旦把它塞进自己的项目问题就来了——移动端点不动、键盘 Tab 键跳不出去、换个配色整个布局就塌了。这不是源码本身写得差而是绝大多数菜单源码只解决了「看起来好看」没解决「用起来能用」。这份标题里的「超实用」和「漂亮精美」其实是两个维度前者是可用性后者是视觉。真正能落地的 HTML 菜单必须同时满足三件事——结构语义正确、交互状态完整、样式可被覆盖。这篇文章就按这个思路把一份菜单从看懂到改好、从改好到复用的完整路径拆开讲。适合正在做后台系统、官网、活动页需要一套能直接改的导航组件的开发者新手能跟着敲熟手能直接跳到参数和避坑那几章。2. 拆解一份菜单源码结构、样式、交互到底该怎么分层拿到任何一份 HTML 菜单源码先别急着改颜色。花五分钟把它的三层结构理清楚后面改起来会省掉大量返工。菜单这种东西看着简单但它是 HTML、CSS、JS 三者耦合最紧的组件之一分层没理清改一处崩三处是常态。2.1 语义结构层ul/li 还是 div 堆叠决定了你的可访问性下限先看 HTML 骨架。一份合格的菜单源码导航容器应该是nav菜单项列表应该是ul套li每一项里的可点击区域是a。这套结构不是形式主义它直接决定了屏幕阅读器能不能读出「这是一个有 5 个选项的导航」也决定了键盘用户能不能用 Tab 逐个跳转。很多「漂亮」源码为了布局方便直接用一堆div加onclick堆出来。视觉上没差别但可访问性直接归零。我一般拿到源码第一件事就是搜div class后面跟menu-item这种写法如果有先把它改成ullia结构再谈样式。!-- 推荐的语义结构nav ul li a -- nav classsite-nav aria-label主导航 ul classnav-list li classnav-item a href/home classnav-link is-active首页/a /li li classnav-item has-submenu !-- aria-expanded 标记子菜单展开状态屏幕阅读器依赖它 -- a href/products classnav-link aria-expandedfalse aria-haspopuptrue 产品 /a ul classsubmenu lia href/products/a产品 A/a/li lia href/products/b产品 B/a/li /ul /li /ul /nav这段结构里aria-label给导航起了个名字aria-expanded和aria-haspopup是子菜单的标配。逻辑说明aria-expandedfalse表示子菜单当前收起JS 展开时要同步改成true否则屏幕阅读器用户永远不知道子菜单开没开。参数上aria-haspopuptrue告诉辅助设备这个链接会弹出内容值还可以是menu但导航场景用true更通用。2.2 样式层用 CSS 变量把「漂亮」变成可调参数「漂亮精美」的源码通常写死了大量颜色值#3b82f6、#1e293b散落在几十个规则里。你想换个品牌色得全局替换还容易漏。正确做法是把视觉参数抽成 CSS 自定义属性集中放在:root里。:root { /* 主色、悬停色、文字色、背景、圆角、动画时长全部参数化 */ --nav-bg: #ffffff; --nav-text: #1f2937; --nav-text-hover: #2563eb; --nav-active-bg: #eff6ff; --nav-radius: 8px; --nav-duration: 0.2s; --nav-gap: 4px; } .site-nav { background: var(--nav-bg); border-radius: var(--nav-radius); } .nav-link { color: var(--nav-text); padding: 10px 16px; border-radius: var(--nav-radius); /* 用 transition 统一控制动画避免每个属性各写一遍 */ transition: color var(--nav-duration), background-color var(--nav-duration); } .nav-link:hover, .nav-link:focus-visible { color: var(--nav-text-hover); background: var(--nav-active-bg); }逻辑说明把颜色、圆角、动画时长抽成变量后换肤只需要改:root里那几行不用碰具体规则。参数上--nav-duration建议控制在 0.15s 到 0.3s 之间太慢显得拖沓太快用户感知不到反馈。注意:focus-visible这个伪类它只在键盘聚焦时生效鼠标点击不触发这样既保留了键盘可见的焦点框又不会让鼠标用户看到难看的轮廓。2.3 交互层悬停展开和点击展开别混着用菜单交互最常见的翻车点是桌面端用 hover 展开子菜单移动端也照搬结果手机上点一下没反应再点一下跳走了。正确做法是按输入方式区分桌面端 hover 加 focus 展开移动端点击展开。// 根据指针类型决定子菜单展开方式 const nav document.querySelector(.site-nav); const hasSubmenu nav.querySelectorAll(.has-submenu); // matchMedia 判断是否支持悬停触屏设备通常为 false const canHover window.matchMedia((hover: hover)).matches; hasSubmenu.forEach((item) { const trigger item.querySelector(.nav-link); const submenu item.querySelector(.submenu); if (canHover) { // 桌面端鼠标进入展开离开收起 item.addEventListener(mouseenter, () { trigger.setAttribute(aria-expanded, true); }); item.addEventListener(mouseleave, () { trigger.setAttribute(aria-expanded, false); }); } else { // 触屏端点击切换阻止默认跳转 trigger.addEventListener(click, (e) { e.preventDefault(); const expanded trigger.getAttribute(aria-expanded) true; trigger.setAttribute(aria-expanded, String(!expanded)); }); } });逻辑说明matchMedia((hover: hover))是判断设备是否支持悬停的标准做法比判断屏幕宽度靠谱得多——有些平板宽度够大但不支持 hover。参数上aria-expanded的值必须是字符串true或false直接传布尔值在部分浏览器里会出问题所以这里用String()转一下。触屏端点击时preventDefault是为了防止父级链接直接跳转让用户先看到子菜单。3. 从零跑通一份菜单最小可运行版本与四个必调参数理解了分层接下来动手做一个能跑的最小版本。这一章给出一份完整的 HTML 文件复制下来存成.html就能在浏览器打开然后逐个调参数看效果。菜单这种东西光看代码没用必须边改边看。3.1 最小可运行文件一个文件搞定结构、样式、交互!DOCTYPE html html langzh-CN head meta charsetUTF-8 !-- viewport 是移动端菜单不崩的前提别漏 -- meta nameviewport contentwidthdevice-width, initial-scale1.0 title菜单 Demo/title style :root { --nav-bg: #ffffff; --nav-text: #1f2937; --nav-hover: #2563eb; --nav-active-bg: #eff6ff; --nav-radius: 8px; --nav-duration: 0.2s; } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: system-ui, sans-serif; padding: 24px; background: #f8fafc; } .site-nav { background: var(--nav-bg); border-radius: var(--nav-radius); box-shadow: 0 1px 3px rgba(0,0,0,.08); } .nav-list { display: flex; list-style: none; gap: 4px; padding: 8px; } .nav-item { position: relative; } .nav-link { display: block; padding: 10px 16px; color: var(--nav-text); text-decoration: none; border-radius: var(--nav-radius); transition: color var(--nav-duration), background-color var(--nav-duration); } .nav-link:hover, .nav-link:focus-visible { color: var(--nav-hover); background: var(--nav-active-bg); } .nav-link.is-active { color: var(--nav-hover); background: var(--nav-active-bg); font-weight: 600; } /* 子菜单默认隐藏用 opacity visibility 而非 display保留过渡动画 */ .submenu { position: absolute; top: 100%; left: 0; min-width: 160px; background: var(--nav-bg); border-radius: var(--nav-radius); box-shadow: 0 4px 12px rgba(0,0,0,.1); list-style: none; padding: 6px; opacity: 0; visibility: hidden; transform: translateY(-4px); transition: opacity var(--nav-duration), transform var(--nav-duration), visibility var(--nav-duration); } .has-submenu[aria-expandedtrue] .submenu, .has-submenu:hover .submenu { opacity: 1; visibility: visible; transform: translateY(0); } .submenu a { display: block; padding: 8px 12px; color: var(--nav-text); text-decoration: none; border-radius: 6px; } .submenu a:hover { background: var(--nav-active-bg); color: var(--nav-hover); } /style /head body nav classsite-nav aria-label主导航 ul classnav-list li classnav-itema href# classnav-link is-active首页/a/li li classnav-item has-submenu aria-expandedfalse a href# classnav-link aria-haspopuptrue aria-expandedfalse产品/a ul classsubmenu lia href#产品 A/a/li lia href#产品 B/a/li /ul /li li classnav-itema href# classnav-link关于/a/li /ul /nav script const canHover window.matchMedia((hover: hover)).matches; document.querySelectorAll(.has-submenu).forEach((item) { const trigger item.querySelector(.nav-link); if (canHover) { item.addEventListener(mouseenter, () item.setAttribute(aria-expanded, true)); item.addEventListener(mouseleave, () item.setAttribute(aria-expanded, false)); } else { trigger.addEventListener(click, (e) { e.preventDefault(); const open item.getAttribute(aria-expanded) true; item.setAttribute(aria-expanded, String(!open)); }); } }); /script /body /html逻辑说明整份文件不依赖任何外部库box-sizing: border-box保证 padding 不会撑破布局。子菜单用opacity visibility而不是display: none是因为display无法参与过渡动画切换时会生硬地闪现。参数上min-width: 160px是子菜单的最小宽度中文菜单项一般 4 到 6 个字160px 够用英文长词可以调到 200px。3.2 四个必调参数间距、圆角、动画时长、断点菜单好不好看八成取决于这四个参数。我把它们单独拎出来是因为改这四个值能覆盖绝大多数「感觉不对」的场景。参数变量名推荐范围调大后的效果调小后的效果菜单项间距--nav-gap2px ~ 8px项之间更松散适合项少的导航更紧凑适合项多的后台菜单圆角--nav-radius4px ~ 12px更圆润亲和适合 C 端产品更硬朗适合工具类后台动画时长--nav-duration0.15s ~ 0.3s更舒缓但超过 0.3s 显拖沓更干脆低于 0.1s 几乎无感知移动端断点媒体查询阈值640px ~ 768px更早切移动布局适合窄内容更晚切适合宽表格页面调参的时候有个血泪经验一次只改一个值改完刷新看效果。同时改三个参数最后你根本不知道是哪个起了作用。另外--nav-gap在 flex 布局里是gap属性在旧版浏览器里可能不生效如果项目要兼容很老的浏览器得改用margin手动控制间距。3.3 移动端折叠汉堡按钮的最小实现桌面菜单再漂亮到了手机上都得收起来。最小实现是一个按钮加一个类名切换。const toggle document.querySelector(.nav-toggle); const navList document.querySelector(.nav-list); toggle.addEventListener(click, () { // 切换 open 类由 CSS 控制展开收起 const isOpen navList.classList.toggle(is-open); // 同步 aria-expanded屏幕阅读器才知道当前状态 toggle.setAttribute(aria-expanded, String(isOpen)); });逻辑说明classList.toggle返回布尔值表示切换后是否包含该类直接拿来更新aria-expanded很省事。参数上汉堡按钮的点击区域建议不小于 44×44 像素这是移动端触控的最小推荐尺寸小于这个值用户容易点不中。CSS 里.nav-list.is-open控制display: flex或flex-direction: column具体写法取决于你的布局方向。4. 避坑指南菜单源码落地时最容易翻车的五个地方菜单这东西写出来容易写对难。下面这五条都是我在实际项目里踩过的每条按「现象 → 原因 → 解决」说清楚你对照着排查能省不少时间。4.1 现象移动端点击子菜单父级链接直接跳走了原因触屏端没有 hover 事件用户点击父级链接时浏览器默认执行了a的跳转子菜单还没来得及展开。很多源码只在桌面端做了 hover 逻辑移动端完全没处理。解决在触屏分支里对父级链接preventDefault先展开子菜单第二次点击再跳转。或者更彻底一点父级链接本身不设href只作为展开触发器子项才承担跳转职责。我一般用后者逻辑更干净。4.2 现象键盘 Tab 键跳不进子菜单或者跳进去出不来原因子菜单用visibility: hidden隐藏时里面的链接确实不可聚焦这是对的。但如果用opacity: 0加pointer-events: none隐藏链接仍然在 Tab 序列里用户会聚焦到一个看不见的链接上体验很诡异。解决隐藏状态统一用visibility: hidden它会把元素从可聚焦序列里移除。展开时再设visibility: visible。注意visibility是可以参与过渡的配合opacity一起用动画和可访问性两不误。4.3 现象换了品牌色菜单某些地方还是旧颜色原因源码里颜色写得太散有的用十六进制有的用rgb()还有的用了currentColor继承。你只替换了主色变量漏掉了那些硬编码的值。解决全局搜索#开头的颜色值和rgb(逐个替换成变量引用。更省事的办法是在:root里定义一套完整的色板然后所有规则只引用变量禁止出现字面颜色值。这条规矩定下来以后换肤就是改几行的事。4.4 现象菜单项多了以后桌面端一行放不下挤成两行很难看原因.nav-list用了flex但没设flex-wrap默认nowrap会压缩每项宽度文字换行。或者设了wrap直接折成两行。解决项多的时候桌面端应该考虑横向滚动或者收纳进「更多」菜单而不是硬挤。简单做法是给.nav-list加overflow-x: auto让它在窄屏下横向滚动。参数上配合scrollbar-width: thin让滚动条细一点视觉上不那么突兀。4.5 现象子菜单在页面右侧的菜单项上展开时超出了屏幕右边原因子菜单用了left: 0绝对定位父项靠近右边缘时子菜单自然溢出。解决给靠近右边缘的项加一个align-right类子菜单改成right: 0; left: auto。判断逻辑可以在 JS 里算也可以简单点手动给最后几项加类。我一般用 CSS 的:nth-last-child(-n2)选中最后两项自动右对齐省去 JS 计算。5. 进阶把菜单做成可复用组件与主题切换的实战技巧前面讲的都是单份菜单怎么改。但实际项目里你往往需要在多个页面复用同一套菜单还要支持亮色暗色切换。这一章讲两个进阶技巧都是能直接搬进项目的。5.1 用 CSS 变量做亮暗主题切换主题切换的核心是把所有颜色变量在:root和[data-themedark]下各定义一套切换时只改>:root { --nav-bg: #ffffff; --nav-text: #1f2937; --nav-hover: #2563eb; --nav-active-bg: #eff6ff; } [data-themedark] { --nav-bg: #1e293b; --nav-text: #e2e8f0; --nav-hover: #60a5fa; --nav-active-bg: #334155; }// 切换主题改 html 上的>/** * 初始化导航菜单 * param {string} selector - 菜单容器选择器 * param {Object} options - 配置项 * param {boolean} options.closeOnOutsideClick - 点击外部是否关闭子菜单 * param {number} options.hoverDelay - 悬停展开延迟毫秒 */ function initMenu(selector, options {}) { const { closeOnOutsideClick true, hoverDelay 0 } options; const nav document.querySelector(selector); if (!nav) return; const canHover window.matchMedia((hover: hover)).matches; const items nav.querySelectorAll(.has-submenu); items.forEach((item) { const trigger item.querySelector(.nav-link); let timer null; if (canHover) { item.addEventListener(mouseenter, () { // hoverDelay 用于防止鼠标快速划过时误触发 timer setTimeout(() item.setAttribute(aria-expanded, true), hoverDelay); }); item.addEventListener(mouseleave, () { clearTimeout(timer); item.setAttribute(aria-expanded, false); }); } else { trigger.addEventListener(click, (e) { e.preventDefault(); const open item.getAttribute(aria-expanded) true; item.setAttribute(aria-expanded, String(!open)); }); } }); // 点击菜单外部关闭所有子菜单 if (closeOnOutsideClick) { document.addEventListener(click, (e) { if (!nav.contains(e.target)) { items.forEach((item) item.setAttribute(aria-expanded, false)); } }); } } // 使用一行初始化 initMenu(.site-nav, { closeOnOutsideClick: true, hoverDelay: 100 });逻辑说明hoverDelay这个参数很实用鼠标快速划过菜单时不会触发一堆子菜单闪现设 100ms 左右体验最好。closeOnOutsideClick用nav.contains(e.target)判断点击是否在菜单内不在就全部收起。参数上hoverDelay设 0 表示立即展开设太大用户会觉得迟钝100 到 200ms 是甜区。5.3 验证菜单是否真的可用三个必做检查改完菜单别急着交付花两分钟做这三个检查能挡掉大部分低级问题。第一键盘走一遍。按 Tab 键从页面顶部开始看焦点能不能依次经过每个菜单项子菜单展开后能不能继续 Tab 进去Esc 键能不能收起。如果 Tab 跳不进去或者跳出来回去检查visibility和tabindex。第二缩放浏览器到 200%。菜单文字放大后不能重叠、不能溢出容器。这是无障碍的基本要求也是很多「精美」源码翻车的地方——它们用固定像素高度一放大就崩。第三手机横竖屏各看一次。竖屏下菜单折叠是否正常横屏下子菜单展开会不会超出屏幕。这两个场景覆盖了绝大多数移动端布局问题。我自己的习惯是每改一次菜单样式就把这三个检查跑一遍前后不超过三分钟但能省掉上线后被用户反馈「点不动」的尴尬。菜单这种组件用户不会夸你做得好但一旦不能用投诉来得比谁都快。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

J2ME游戏移植实战:从MIDlet到Canvas的9688雷霆战机适配指南

J2ME游戏移植实战:从MIDlet到Canvas的9688雷霆战机适配指南

简介:这份资源是JAVA ME游戏「9688雷霆战机」的个人移植源码包,面向希望入门J2ME移动游戏开发、想通过真实项目理解游戏框架的开发者与学习者。源码围绕KVM虚拟机、CLDC配置与MIDP简表展开,涵盖gameLogic、ui、sound、resource等模块&#xf…

2026/10/9 14:26:50 阅读更多 →
帝国CMS文章自动生成插件:标题+配图半自动生产实战指南

帝国CMS文章自动生成插件:标题+配图半自动生产实战指南

简介:这是一款专为帝国CMS内容管理系统定制的高效文章自动化生成插件,面向中小型网站运营者、SEO优化人员及缺乏设计资源的建站开发者,解决批量发布无图文章时标题枯燥、配图缺失、人工成本高等痛点。插件支持根据输入标题智能生成语义匹配的…

2026/10/9 14:26:50 阅读更多 →
从测距到空间定位:距离交会、最小二乘与锚点部署实战解析

从测距到空间定位:距离交会、最小二乘与锚点部署实战解析

先别急着写代码。我见过不少同学拿到测距模块的第一反应,是把距离值赶紧读出来,然后在屏幕上画几个圈,试试用初中几何求交点。单独测一个距离很容易,但真正把测距变成一套能用的空间定位算法,难点在于:单个…

2026/10/9 14:26:50 阅读更多 →

最新新闻

燃料智能化管理系统解决方案:从PPT到落地的数据链路与接口设计

燃料智能化管理系统解决方案:从PPT到落地的数据链路与接口设计

简介:这份PPT方案面向火力发电企业的燃料管理与信息化建设人员,系统梳理了燃料智能化管理的整体解决思路。内容从燃料成本约占火电总成本七成的行业背景切入,阐述自2012年以来各大发电集团推动燃料系统智能化升级的动因,并围绕业务…

2026/10/9 14:56:28 阅读更多 →
X切LNOI波导倍频仿真:COMSOL建模与相位匹配实战

X切LNOI波导倍频仿真:COMSOL建模与相位匹配实战

最近研究X切型绝缘体上铌酸锂薄膜(LNOI)的倍频(SHG)转化效率,COMSOL仿真前前后后跑了一个多月,越跑越觉得这东西比想象中有意思得多。LNOI这两年几乎是集成光子学里的“顶流”平台,几百纳米厚的…

2026/10/9 14:56:28 阅读更多 →
智慧零碳园区解决方案:从66页PPT到落地的四层架构与避坑指南

智慧零碳园区解决方案:从66页PPT到落地的四层架构与避坑指南

简介:这份《智慧零碳园区解决方案》PPT面向园区规划者、能源管理者、智慧城市方案商及政企数字化转型从业者,围绕“有温度、善感知、智生长”的数字生命体理念,系统梳理零碳园区从背景认知到落地运营的完整路径。资源包仅含1个pptx文件&#…

2026/10/9 14:56:28 阅读更多 →
信号完整性补充:从时序预算到实际工程排查

信号完整性补充:从时序预算到实际工程排查

写一篇关于"什么是信号完整性?补充"的技术博文,这事儿说难不难,说简单也不简单。因为在很多硬件工程师眼里,信号完整性(Signal Integrity)已经是个被讲烂了的话题,随便一搜就是一堆解…

2026/10/9 14:56:28 阅读更多 →
Altium Designer 17.0.6安装避坑指南:从环境检查到静默部署的完整方案

Altium Designer 17.0.6安装避坑指南:从环境检查到静默部署的完整方案

简介:Altium Designer 17.0.6安装教程PDF,面向电子设计工程师及PCB初学者,解决Altium Designer软件安装、破解与汉化流程不熟悉的问题。资源包内共1个pdf文件,整体大小3.03MB,内容紧凑,以图文步骤方式组织&…

2026/10/9 14:55:27 阅读更多 →
5G网络切片隔离性验证:从测试设计到pytest自动化落地

5G网络切片隔离性验证:从测试设计到pytest自动化落地

去年做5G行业专网交付的时候,客户在验收会上问了我一个很要命的问题:"你说切片隔离,那我车间里的视频监控流量和AGV控制流量在同一个基站下跑,监控业务能不能把控制业务挤垮?你拿什么证明它不会?"…

2026/10/9 14:55:27 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 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/8 21:13:17 阅读更多 →
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/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练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/9 6:17:20 阅读更多 →