Emmet实战指南:用一行缩写生成HTML/CSS,前端效率翻倍

1. 为什么要掌握Emmet:我亲历的一次惨痛对比

先讲一个我真实的开发片段。前几年在公司写一个后台管理系统的列表页,数据表格要渲染七八列,每列还有筛选条件、排序按钮、操作按钮,外加表头工具栏和批量操作区。我当时的习惯是一个标签一个标签手敲,

、、
,一行一行复制粘贴再改内容。一个完整的列表模板写下来,加上弹窗表单部分,大概消耗了我四十多分钟。后来有位前辈路过,看了一眼屏幕,二话不说在我编辑器里敲了一行:

.toolbar>.btn-group+table.table>thead>tr>th*6+tbody>tr*10>td*6

然后按下快捷键,几十行HTML瞬间铺满屏幕。那个场面我到现在都记得,从那一刻起我开始系统学Emmet。今天这篇博客就是想把我在实际项目中用Emmet的经验沉淀下来,包含语法、配置、坑点和心得,给正在写页面但还没重视效率的朋友一份参考。

Emmet是一个文本编辑器插件,核心能力是把类似CSS选择器形式的缩写展开成完整的HTML结构,同时也在CSS属性书写上有大量缩写支持。它解决的本质问题非常直接:手写重复性标签代码耗时且容易出错,而Emmet把“描述结构”和“生成代码”分离,你只需要按思维习惯写出嵌套关系,剩下的机械劳动交给工具。适合谁?前端开发、后端偶尔碰页面的同学、写邮件模板的运营、甚至做静态原型的交互设计师,只要你的工作里离不开HTML和CSS,都值得花半小时读这篇。

2. 深度拆解Emmet的核心逻辑:为什么一套语法能吃遍HTML和CSS

2.1 Emmet的底层设计思路:用CSS选择器思维描述HTML

学Emmet最关键的一步是转换思维。你已经在写CSS选择器了,而Emmet无非是把同样的语法搬到“生成HTML”这个场景。比如你在CSS里写.box表示类名为box的节点,在Emmet里输入.box并展开,得到的就是<div class="box"></div>。同理#main对应<div id="main"></div>,ul.nav对应<ul class="nav"></ul>。

为什么这种映射能成立?因为HTML的绝大多数视觉区块都是用div包裹的,而类名和ID又是最常用的定位锚点。Emmet默认把不带标签名的缩写视为div,这恰好符合实际开发中“class和id比标签名更常变”的真实场景。这个设计的聪明之处在于,它不需要你额外学一套符号,而是直接复用你已经掌握的CSS知识,降低了学习门槛。

理解了底层映射,很多操作就顺理成章。比如p.content生成<p class="content"></p>,span.badge-danger生成<span class="badge-danger"></span>,规律一目了然。如果你哪天忘了某个标签名的缩写规则,只要回头想想CSS选择器的写法,基本就能猜出八分。与其说Emmet是一套新工具,不如说它重新组织了你已有的知识。

2.2 嵌套结构:>、+、^三个符号的组合逻辑

实际开发里的HTML几乎都是多层嵌套的,Emmet用三个符号表示节点间的结构关系:

  • >:后代关系,表示右边的元素是左边元素的子节点
  • +:兄弟关系,表示右边元素和左边元素是并列的
  • ^:爬升一层,从一个嵌套层级跳出到父级再继续写兄弟节点

举个例子,导航栏最常见的结构:

nav.navbar>ul.nav-list>li.nav-item*3>a[href="#"]

这段缩写的展开过程是:先创建<nav class="navbar">,里面放一个<ul class="nav-list">,这个ul里有3个<li class="nav-item">,每个li里有一个<a href="#">。符号>把层级关系串联起来,*3重复li节点三次。整个结构从顶层到底层一条线读完,视觉上就是一棵树。

^符号是很多新手容易忽略但实际很常用的。它的作用是返回到父级。看这个例子:

div.content>p.first^p.second

如果不加^,.second会变成p.first的子节点。加了^之后,p.second回到div.content级别,和p.first成为兄弟关系。我在写页脚、侧边栏和主体内容并列的布局时经常用到这个符号。

嵌套符号搭配分组括号使用威力更大。比如:

div.row>(div.col>span{$})*3

括号把div.col>span{$}当作一个整体分组,后面的*3作用于整个分组,生成三组包含span的col结构。这种写法在栅格布局、卡片列表、商品展示区等重复性区块里几乎天天用。

2.3 文本内容与数字递增:{}和$的配合用法

写了标签和结构,最终页面里要有文字。Emmet用大括号{}包裹要填入的文本内容,文本会自动放到当前节点的内部。你可能觉得这没什么稀奇,但配合*和$符号,它能直接生成有序的内容序列,比如表格、列表、分页按钮。

$是Emmet里的数字占位符,从1开始递增。最基础的用法:

ul>li.item$*5

生成五个li,类名分别是item1到item5。文本里的数字也同理:

p{第$段}*3

生成三段话,内容分别是“第1段”、“第2段”、“第3段”。多个$连用可以补零,比如$$生成01、02、03,这在做编号类内容时非常实用。

数字的起始值和步长也可以用@控制。$@3表示从3开始递增,$@-表示倒序,$@-3表示从3开始倒序。比如分页器:

ul.pagination>li.page-item*5>a[href="#"]>{$@-}

生成5个分页链接,数字从5递减到1。倒序在很多场景下都有奇效,比如时间线、倒序编号的文章列表,一行缩写就能搞定。

2.4 属性简写:快速给标签添加属性和值

属性写在方括号[]里,这是Emmet语法中最直白的一部分。a[href="#"]生成带href的链接,img[src="" alt=""]生成带src和alt的图片标签。但这里有个细节值得注意,某些高频标签的必需属性已经被Emmet内建默认值覆盖了,比如a自带href="",img自带src=""和alt="",link自带rel="stylesheet" href=""。所以你在编辑器输入a然后Tab展开,直接得到的是<a href=""></a>,不需要额外手写href。

这也解释了为什么很多教程都建议你少写属性简写——默认值已经帮你兜底。真正需要用方括号的场景,是补充默认值没覆盖的属性,比如input[type=email]、meta[charset=utf-8]、a[href="#">bxsh

展开结果:

box-shadow: inset 0 0 0 rgba(0, 0, 0, 0.5);

默认给了完整的参数结构,你只需要把inset删掉、改数值就行。再比如线性渐变:

lg()

展开为:

background: linear-gradient();

这样你填入角度和色值即可。虽然现在很多场景下我们直接在CSS文件里用变量或Tailwind类去代替手写样式,但在写Demo、邮件模板或者需要精细控制样式的场景,这些缩写仍然省力。

带单位的值也支持显示指定单位。默认数字不加单位时是px,这是Emmet的规定,如果你想要百分比、rem或em,直接在数字后面拼单位首字母。w50%生成width: 50%;,fz2r生成font-size: 2rem;,lh1.5生成line-height: 1.5;。长度类属性默认px,不需要额外声明,但lh这类无单位属性直接用数字就好。

CSS还有一种比较隐蔽的缩写规则,是针对!important的。给属性缩写后加一个感叹号,比如c#fff!,展开为color: #fff !important;。写覆盖样式时这个很有用,不用手动去行尾补感叹号。

CSS侧还有一个非常实用的点:@f和@m分别对应@font-face和@media的规则代码块。输入@m后按Tab,直接生成:

@media { }

配合变量名和选择器,比手敲方便很多。还有@i生成@import,@kf生成@keyframes,这些写动画和响应式时都是高频快捷键。

4. 实战落地:编辑器配置与一套完整的高效工作流

4.1 主流编辑器的启用与验证

Emmet现在基本成了各大编辑器的标配能力,不需要额外安装插件。Visual Studio Code在2020年以后内置了对Emmet的支持,默认启用;WebStorm和IntelliJ系列自带;Sublime Text需要装一个单独的Emmet插件包。这里我以VS Code为例说明配置步骤。

第一步,打开设置面板,搜索emmet,确认Emmet: Enabled目录下已经勾选对应语言。默认情况下HTML、CSS、JSX都是启用的,如果发现输入缩写按Tab没反应,大概率是这个开关被关掉了。第二步,为了让缩写能识别更多文件类型,可以在Emmet: Include Languages里配置映射,比如把vue文件映射到html。第三步,展开缩写的默认快捷键在VS Code里是Tab,也可以通过命令面板输入Emmet: Expand abbreviation手动触发。

不同编辑器的展开键略有差异,WebStorm默认也是Tab,Sublime用的是Ctrl+E。我自己的习惯是把VS Code的展开键保持Tab不动,因为Tab本身也是跳转光标用的,两者共存时Emmet会优先响应带缩写特征的内容,不太冲突。

4.2 自定义snippets:打造自己的代码片段库

内置语法覆盖的是通用场景,但真实项目里总有特定结构和固定片段反复出现。比如你所在团队的后台管理系统,每个列表页都由搜索栏、表格、分页器三件套组成,那就不必每次从头写三层结构,可以直接把这段结构做进自定义片段。

Emmet支持通过snippets.json扩展自己的缩写。VS Code里的路径是设置面板右上角“打开设置(JSON)”,追加一个emmet.extensionsPath字段,指向你存放snippets.json的目录。文件内容格式如下:

{ "html": { "snippets": { "adminList": "div.search-bar+div.table-wrapper>table.table>thead>tr>th*6+tbody>tr*5>td*6+div.pagination>ul>li*5" } } }

保存后重启编辑器,在HTML文件里输入adminList再按Tab,整个列表页骨架就出来了。这一步的意义不只是省时间,它把团队规范里的“标准结构”直接固化成了工具链的一部分。新同学上手项目时打开snippets.json看一遍,就知道列表页该长什么样,比看文档直观得多。

我自己维护了一个几十条的自定义片段库,涵盖表单、弹窗、分页、列表、导航、页脚、面包屑、数据空状态等高频结构。遇到相似的业务模块,先调片段生成骨架,再手动改类名和文本,整个页面从零到出的时间能压到原来的三分之一。

4.3 与编辑器其他能力组合的完整工作流

要真正让Emmet发挥效率,不是孤立地按Tab,而是把它跟编辑器的多光标、批量操作、格式化组合起来。我常用的流程是:先在脑子里把页面拆成几大块,用Emmet分别生成大块的结构缩写,然后利用多光标同时编辑多个位置的类名或文本内容,最后用格式化命令统一调整缩进。

具体举个例子。我要做一个用户列表页面,分为搜索区、按钮操作区、表格、分页。分别生成四段结构后,表格部分可能需要微调列数和行数,直接用多光标把th*6改成th*5,或者重新生成一次,比在生成后的代码里手动增删列要快得多。

另外我强烈建议把Emmet和代码格式化快捷键绑定。无论是VS Code的Shift+Alt+F还是WebStorm的Ctrl+Alt+L,展开后的代码缩进层级可能有些乱,尤其用了^爬升符号以后,一次格式化能让结构恢复清晰,同时你也能检查嵌套关系是否符合预期。

在写JSX时会用到Emmet的另一个特性:展开组件的类名和属性。输入div.card>h3{标题}+p{描述}+button.btn{确认}再按Tab,直接生成JSX结构。VS Code默认对JavaScript和TypeScript文件的Emmet支持是关闭的,需要在设置里把emmet.includeLanguages对应项加上"javascript": "javascriptreact"和"typescript": "typescriptreact"。React开发的同学把这一步做了,写组件的效率会明显上一个大台阶。

5. 常见问题与排查实录:那些年踩过的坑

5.1 缩写按Tab没反应,到底哪里出了问题

这是我被问得最多的问题。缩写没展开的原因通常集中在下面几个方面,我按出现频率排序:

第一,光标不在正确位置。Emmet展开要求光标停留在缩写末尾,也就是紧跟最后一个字符。如果你在单词中间或后面多按了个空格,Tab都不会触发展开。这是新手最容易犯的错误,解决方法是把光标移到缩写末尾,确认两边没有多余空格。

第二,缩写语法有误。比如用了中文括号、全角符号,或者嵌套符号敲错。div>ul>li*3和div>ul>li*3的区别很隐蔽,但乘号如果用了中文输入法的*字符,Emmet无法识别。另外>和+混排时要注意逻辑顺序,有些看起来合理的缩写实际上从根上就矛盾,比如div>span+p这个没问题,但div>span+p^a的爬升层级可能和你预期的不一样。

第三,文件类型不对。在.vue、.jsx文件里直接输入HTML缩写,如果没做includeLanguages映射,编辑器不会触发Emmet。在CSS文件里输入w100没反应,先去看文件的语法模式是不是CSS,有时候VS Code会误判文件类型。

第四,与代码片段冲突。如果你装了类似“HTML Snippets”、“Auto Complete Tag”这类插件,它们的自动补全建议覆盖了某些缩写,Tab被插件拦截。排查方法很粗暴,暂时禁用其他补全类插件,只用Emmet试试,如果恢复正常就知道是冲突了。

5.2 语法虽强大但别滥用:几个反面案例

有一种倾向是初学者觉得缩写越长越厉害,结果写出行一百多字符的嵌套。比如这种:

div.wrapper>header>nav>ul>li*5>a[href="#"]{Link $}^footer>p{版权信息}

看上去很酷,实际上可读性已经崩了。展开后要检查半天才知道结构什么样,如果中间写错一个符号,排查成本也不低。我的经验是,一组缩写超过二十个符号,就拆成两段来写。先写外层的div.wrapper>header>nav>ul>li*5,展开后再用光标操作补a标签和footer部分。效率不一定慢,但准确率高很多。

还有一个常见的坑:过多依赖Emmet生成后再去大改,反而不如直接手敲快。Emmet擅长的是生成重复性、规则性的结构。如果你要的结构每行都不一样,类名毫无规律,文本内容需要逐个斟酌,那直接用多光标或复制粘贴反而更快。工具是放大你的效率,不是替代你思考。我见过有人明明要写五个彼此之间差异巨大的表格行,硬要用tr*5生成再逐个改,那还不如直接写。

5.3 输入法冲突和其他环境问题

中文输入法在Emmet使用中会出现一个不大不小的问题:当你输入缩写后,候选词框可能遮挡代码提示,或者Tab键被输入法截获用于选词。解决办法是把输入法设为英文模式,或者调整编辑器的触发键。VS Code里可以通过修改emmet.triggerExpansionOnTab为false,换用Ctrl+E手动触发。我个人更推荐保留Tab触发,因为在英文输入状态下几乎没有冲突。

另一个环境问题是老版本编辑器对Emmet的支持不完整。某些轻量级编辑器或在线IDE里,Emmet只支持HTML不完全支持CSS缩写,或者不支持自定义snippets。如果你在某个环境里发现缩写规则不灵,先去查那个环境的文档,别在编辑器配置上浪费太多时间。

5.4 调试缩写:一步步验证生成结果

当我需要写一段比较复杂的嵌套结构时,我的习惯是先单独验证小型片段再组合。比如想生成一个带图标、标题、副标题和按钮的卡片:

div.card>div.card-body>i.icon+div.card-text>h5{标题}+p{这里是描述}^a.btn[href="#"]{查看详情}

这段缩写的难点在于^的使用位置。如果^放错,a.btn可能变成p的子标签。我的做法是先只写div.card>div.card-body>i.icon+div.card-text>h5{标题}+p{这里是描述},展开确认结构正确,再加上^a.btn[href="#"]。一次只处理一个难点,排查起来比对着几十行纯文本缩写发呆快得多。

每个编辑器里Emmet扩展出来的代码都会保留原始缩写的缩进层级,你可以在展开后先不格式化,直接看缩进判断嵌套关系是否正确。养成“缩写生成后先扫一眼缩进”的习惯,能避免绝大多数结构错误。

6. 进阶技巧:Emmet不止是HTML和CSS的玩具

6.1 缩写思维在JSX和模板语法中的延伸

前面提过JSX支持,这里说细一点。在React组件中,写列表渲染经常需要构建这样的结构:

<div className="list"> <div className="item">1</div> <div className="item">2</div> </div>

如果手动打,重复量很大。在配置好includeLanguages之后,输入div.list>div.item*3就能展开成对应的JSX。唯一要注意的是className的展开结果默认是class,手动改成className即可,或者通过snippets.json自定义一个div.item的变体。

Vue的单文件组件里也有类似用法,在<template>部分直接使用HTML缩写,在<script>和<style>部分使用对应语言的缩写。配置方式同样是includeLanguages映射,把vue映射为html。

6.2 用Emmet反向训练代码结构感

我个人认为Emmet最大的隐藏价值不是打字速度,而是它强迫你用极其精炼的方式描述DOM结构。当你习惯了用一行缩写表达一个完整的组件树,你在看别人的代码时也会更快抓取层级关系。我面试前端候选人时,会让对方写一段带弹窗和表单的页面结构,如果候选人能用Emmet快速生成,至少说明他理解结构抽象,而不仅仅是背标签。

新人在学习HTML时,我也建议他们故意用Emmet去“描述”自己想写的结构,然后展开对比,看自己的描述和真实结构之间的差异。这个过程有点像写作时先用提纲搭骨架,再填充细节,对培养结构化思维很有帮助。

6.3 项目中的实际收益和量化感受

我统计过自己在两个相似规模的后台页面上的耗时。第一个页面用传统手敲方式写HTML结构,差不多花了四十五分钟,其中大量时间消耗在重复复制、修改类名和检查标签闭合上。第二个页面在熟悉Emmet之后,缩写的构思加展开操作只花了大约十五分钟,接近三倍的时间差。虽然内容复杂度不完全一致,但量级差距足以说明问题。

如果你每天只写两三段小结构,感受可能不明显。但当你处理中大型页面、邮件模板、组件库文档这类HTML密集型工作时,节省的时间是按小时计算的。而且不要忘了,Emmet展开的代码天然没有漏闭合标签的问题,这直接减少了一类低级报错和修复成本。

7. 写在最后:一个老开发者的几点经验建议

回头再看这些年在编辑器里敲缩写的时间,我最大的感悟是:Emmet真正提升的其实是“思路显形”的速度。写HTML最大的痛点不是标签本身,而是你想到哪里要写到哪里,一旦思路被漫长的标签行打断,再找回来就要费不少工夫。用缩写把整个结构一次弹出,等于让大脑的思维链路保持连续,这对长时间写代码的舒适度影响很大。

我给新人的建议很简单:别急着背所有语法,先记七件事——.类名、#ID、>子级、+兄弟、*数量、{}文本、[]属性。把这七个符号用熟,你已经能解决大部分场景。然后再花半天时间把CSS缩写表过一遍,特别是df、jc、ai、bdr这种高频的,写页面时的流畅度会有质的提升。

如果你愿意更进一步,花一个周末整理自己项目里的高频结构,做成snippets.json自定义库,那相当于给自己装了一套专属的模板引擎。每个人写的代码风格不一样,最终打磨出的snippets也不一样,这套积累会在以后每个项目里持续产生复利。我自己的snippets文件已经迭代了五个版本,每次跳槽、换项目组都会往里补充新结构,它已经成了我比收藏夹更宝贵的个人资产。

相关新闻

数眼智能API接入实战:从鉴权到结构化数据提取全流程

数眼智能API接入实战:从鉴权到结构化数据提取全流程

刚接触这类数据分析API的时候&#xff0c;我踩的坑比谁都多。明明文档写得很清楚&#xff0c;接起来却总在各种奇奇怪怪的地方卡住&#xff1a;密钥格式不对、请求头少了字段、返回结果里嵌套了三四层结构……最后真正跑通之后回头一看&#xff0c;整个流程其实非常简单。这篇教…

2026/10/20 12:12:05 阅读更多 →
Modbus通信实战:RTU/TCP帧结构、CRC校验与调试排障全指南

Modbus通信实战:RTU/TCP帧结构、CRC校验与调试排障全指南

提到 Modbus&#xff0c;很多人第一反应是“老协议”“还能打吗”。实际在工厂现场、楼宇自控、新能源设备、农业物联网里&#xff0c;Modbus 依然是出镜率最高的通信语言。它在 2025 年不但没退场&#xff0c;反而随着设备联网改造和边缘计算下沉&#xff0c;重新成为从传感器…

2026/10/20 12:12:05 阅读更多 →
AI加速学习:四步法实现10倍速掌握新领域

AI加速学习:四步法实现10倍速掌握新领域

1. 为什么“10倍速学习”在AI时代突然变得可信了过去十几年里&#xff0c;“快速学习”这个概念一直有点尴尬。书店里摆满了《21天精通某某》之类的书&#xff0c;但真正试过的人都知道&#xff0c;21天顶多让你入个门&#xff0c;离“精通”差着十万八千里。学习这件事&#x…

2026/10/20 12:12:05 阅读更多 →

最新新闻

Spring Boot社区在线问诊系统实战:从需求到部署的完整技术拆解

Spring Boot社区在线问诊系统实战:从需求到部署的完整技术拆解

最近后台经常有人问社区家庭医生在线问诊系统怎么做&#xff0c;正好我前阵子完整跟过一个类似项目&#xff0c;从需求梳理到部署上线走了不少弯路。我干脆把这套系统的技术拆解和踩坑记录整理成一篇长文&#xff0c;一方面给自己做个复盘&#xff0c;另一方面给正在做毕业设计…

2026/10/20 13:09:01 阅读更多 →
Git克隆Demo代码仓库实战:从地址到跑通全流程

Git克隆Demo代码仓库实战:从地址到跑通全流程

1. 拿到仓库地址后&#xff0c;先别急着敲命令很多同学第一次接触代码仓库时&#xff0c;最容易犯的毛病就是&#xff1a;复制了地址&#xff0c;打开终端&#xff0c;直接输入git clone&#xff0c;回车&#xff0c;然后开始疯狂刷新浏览器看着进度条发呆。如果仓库小&#xf…

2026/10/20 13:09:01 阅读更多 →
OpenHarmony设备上Flutter淡出过渡动画移植实战与性能优化

OpenHarmony设备上Flutter淡出过渡动画移植实战与性能优化

上个月我把一个原本跑在标准Flutter环境里的页面过渡动画方案移植到OpenHarmony设备上&#xff0c;遇到的第一个问题倒不是动画本身&#xff0c;而是animations 这个官方维护的三方动画库直接编译不过。项目里本来打算用它实现页面切换时的淡出过渡效果&#xff0c;想着省一笔自…

2026/10/20 13:09:01 阅读更多 →
轻量级技能管理方案:从零搭建可量化可组合的技能表

轻量级技能管理方案:从零搭建可量化可组合的技能表

1. 从“skills”这个词说起&#xff1a;它到底指什么“skills”这个词看起来简单&#xff0c;但放在不同语境里&#xff0c;指向完全不同。做招聘的人看到它&#xff0c;想到的是岗位能力模型&#xff1b;做在线教育的人看到它&#xff0c;想到的是课程标签体系&#xff1b;做开…

2026/10/20 13:09:01 阅读更多 →
企业级RAG问答系统实战:知识库、检索链路与大模型应用的完整落地指南

企业级RAG问答系统实战:知识库、检索链路与大模型应用的完整落地指南

做了将近半年的基于大模型的智能问答系统&#xff0c;上线之后我最大的感受是&#xff1a;**决定这套系统好不好用的&#xff0c;往往不是大模型本身&#xff0c;而是知识库和检索链路。**模型答得再聪明&#xff0c;检索不到对的资料&#xff0c;它也只能一本正经地编。我们做…

2026/10/20 13:09:01 阅读更多 →
GraphRAG工程实践:知识图谱如何补足向量检索的推理短板

GraphRAG工程实践:知识图谱如何补足向量检索的推理短板

向量检索失效的那一刻&#xff0c;我才决定认真搞GraphRAG年初做过一个企业内部制度问答系统&#xff0c;刚开始用的是经典的向量库RAG方案&#xff1a;文档切块、embedding、top-k召回、拼prompt喂给大模型。原型阶段跑得很顺&#xff0c;演示的时候领导问了一个问题——"…

2026/10/20 13:08:00 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50: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/20 9:50:45 阅读更多 →