登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  文章 >  前端

读取HTML文件内容技巧分享

时间:2026-05-25 10:17:14 373浏览 收藏

本文深入解析了在不同环境下安全、高效读取和解析HTML文件的核心技巧:针对浏览器中fetch加载本地HTML触发CORS错误的问题,明确指出file://协议被浏览器安全策略禁止,并给出部署本地HTTP服务或改用XMLHttpRequest的实用解决方案;强调DOMParser解析HTML字符串比innerHTML更安全可靠,避免脚本执行与DOM污染;在Node.js环境中则重点提醒fs读取时的编码与路径陷阱,并对比cheerio与jsdom在服务端批量处理HTML时的性能、兼容性与容错优势,同时点出编码识别这一常被忽视却至关重要的环节——真正帮你避开从读取到解析全流程中的典型坑。

如何读取html_读取HTML文件内容或元素的技巧【指南】

用 fetch 读取本地 HTML 文件会触发 CORS 错误

浏览器直接用 fetch('./page.html') 加载本地 HTML 文件时,如果页面是通过 file:// 协议打开的,绝大多数现代浏览器会拒绝请求,并抛出类似 Blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https. 的错误。

这不是代码写错了,而是浏览器安全策略限制——file:// 协议不被视作合法的跨域请求源。解决方法只有两个:

  • 把页面部署到本地 HTTP 服务上(推荐),比如用 npx serve、python3 -m http.server 或 VS Code 的 Live Server 插件
  • 改用 XMLHttpRequest 并设置 responseType = 'document'(仅限同源且非 file:// 场景)

别试图用 readAsText + FileReader 去读取用户选择的 HTML 文件——那只能用于 显式选取的场景,不适用于预设路径加载。

用 DOMParser 解析 HTML 字符串比 innerHTML 更安全可靠

当你拿到一段 HTML 字符串(比如从 fetch 返回的 text() 结果),想提取其中的 </code> 或某个 <code>class="content"</code> 元素,不要直接往 <code>div.innerHTML</code> 里塞再查——这会执行内联脚本、触发图片加载、污染当前页面 DOM。</p> <p><code>DOMParser</code> 是专为此设计的轻量级解析器,它生成的是独立文档对象,完全隔离:</p> <pre class="brush:php;toolbar:false">const parser = new DOMParser(); const doc = parser.parseFromString(htmlString, 'text/html'); const title = doc.querySelector('title')?.textContent; const mainContent = doc.querySelector('.content')?.outerHTML;</pre> <p>注意两点:</p> <ul><li>MIME 类型必须写成 <code>'text/html'</code>,写成 <code>'application/xml'</code> 或漏掉会导致解析失败或行为异常</li> <li><code>doc</code> 是完整文档,所以 <code>querySelector</code> 能直接匹配 <code><head></code> 和 <code><body></code> 下的元素,无需额外包裹</li> </ul><h3>Node.js 环境下读取 HTML 文件要用 <code>fs.readFileSync</code> 或 <code>fs.promises.readFile</code></h3> <p>在 Node.js 里没有 <code>fetch</code>,也不能用 <code>DOMParser</code>(原生不支持),得靠第三方库补全 DOM 能力。但第一步永远是把文件内容读成字符串:</p> <pre class="brush:php;toolbar:false">const fs = require('fs'); const html = fs.readFileSync('./index.html', 'utf8');</pre> <p>或者用 Promise 版本:</p> <pre class="brush:php;toolbar:false">const { readFile } = require('fs').promises; const html = await readFile('./index.html', 'utf8');</pre> <p>常见坑:</p> <ul><li>忘记传 <code>'utf8'</code> 编码参数,结果得到 <code>Buffer</code>,后续 <code>parseFromString</code> 会报错</li> <li>路径写相对路径却没注意工作目录(<code>process.cwd()</code>),建议用 <code>path.resolve(__dirname, 'index.html')</code> 定位</li> </ul><p>之后才能交给 <code>jsdom</code> 或 <code>cheerio</code> 处理。例如 cheerio 的典型用法:</p> <pre class="brush:php;toolbar:false">const $ = require('cheerio'); const html = fs.readFileSync('./index.html', 'utf8'); const $html = $.load(html); const title = $html('title').text();</pre> <h3>用 <code>cheerio</code> 提取元素比原生 DOM API 更适合服务端批量处理</h3> <p>如果你在 Node.js 中要批量分析几十个 HTML 文件、提取标题、链接、元数据,<code>cheerio</code> 是更优选择:它模拟了 jQuery API,语法简洁,不渲染、不执行 JS、内存占用低。</p> <p>对比 <code>jsdom</code>:</p> <ul><li><code>cheerio</code> 没有 <code>window</code>、<code>document</code> 全局对象,不能运行脚本,但解析速度通常快 3–5 倍</li> <li><code>cheerio.load()</code> 返回的是“伪 DOM”,所有选择器操作都基于字符串分析,因此不支持 <code>:has()</code>、<code>:nth-child(2n)</code> 等复杂 CSS4 伪类(除非升级到 v1.0+ 并启用 <code>xmlMode: false</code>)</li> <li>若 HTML 不规范(如自闭合标签写成 <code><img></code> 而非 <code><img/></code>),<code>cheerio</code> 默认能容错,<code>DOMParser</code> 在严格模式下可能报错</li> </ul><p>一个真实场景示例:提取所有带 <code>href</code> 的外链,并排除站内路径:</p> <pre class="brush:php;toolbar:false">const $ = require('cheerio'); const html = fs.readFileSync('page.html', 'utf8'); const $html = $.load(html); const externalLinks = []; $html('a[href]').each((i, el) => { const href = $html(el).attr('href'); if (href && /^https?:\/\//.test(href)) { externalLinks.push(href); } });</pre> 实际处理 HTML 时,最易被忽略的是编码识别——特别是老站点用 <code>gbk</code> 或 <code>big5</code> 编码却没声明 <code><meta charset></code>,这时 <code>fs.readFileSync</code> 或 <code>fetch</code> 拿到的内容会乱码,后续所有解析都失效。遇到这类情况,得先用 <code>iconv-lite</code> 或 <code>encoding-sniffer</code> 探测真实编码再转 UTF-8。<p>理论要掌握,实操不能落!以上关于《读取HTML文件内容技巧分享》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!</p> </div> <div class="labsList"> </div> </div> <!-- 最新阅读 --> <div class="contBoxNor"> <div class="contTit"> <div class="tit">相关阅读</div> <a href="/articlelist.html" class="more">更多></a> </div> <ul class="latestReadList"> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  1年前  |   <a href="javascript:;" class="aLightGray" title="提升">提升</a> <a href="javascript:;" class="aLightGray" title="箭头函数">箭头函数</a> <a href="javascript:;" class="aLightGray" title="函数表达式">函数表达式</a> <a href="javascript:;" class="aLightGray" title="函数声明">函数声明</a> <a href="javascript:;" class="aLightGray" title="Function构造函数">Function构造函数</a> </div> <div class="tit lineOverflow"><a href="/article/207000.html" title="JavaScript函数定义及示例详解" class="aBlack">JavaScript函数定义及示例详解</a></div> <div class="opt"> <span><i class="view"></i>502</span> <span class="collectBtn user_collection" data-id="207000" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  2个月前  |   <a href="javascript:;" class="aLightGray" title="智能体">智能体</a> </div> <div class="tit lineOverflow"><a href="/article/621422.html" title="智能体安全引领产业升级——国内AI安全产品市场深度分析" class="aBlack">智能体安全引领产业升级——国内AI安全产品市场深度分析</a></div> <div class="opt"> <span><i class="view"></i>501</span> <span class="collectBtn user_collection" data-id="621422" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  4个月前  |   </div> <div class="tit lineOverflow"><a href="/article/619053.html" title="CSS变量简化按钮悬停效果技巧" class="aBlack">CSS变量简化按钮悬停效果技巧</a></div> <div class="opt"> <span><i class="view"></i>501</span> <span class="collectBtn user_collection" data-id="619053" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  4个月前  |   </div> <div class="tit lineOverflow"><a href="/article/618916.html" title="JavaScript符号类型详解与应用" class="aBlack">JavaScript符号类型详解与应用</a></div> <div class="opt"> <span><i class="view"></i>501</span> <span class="collectBtn user_collection" data-id="618916" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  5个月前  |   </div> <div class="tit lineOverflow"><a href="/article/612539.html" title="HTML剪贴板复制粘贴怎么用" class="aBlack">HTML剪贴板复制粘贴怎么用</a></div> <div class="opt"> <span><i class="view"></i>501</span> <span class="collectBtn user_collection" data-id="612539" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> </ul> </div> <!-- 最新阅读 --> <div class="contBoxNor"> <div class="contTit"> <div class="tit">最新阅读</div> <a href="/articlelist.html" class="more">更多></a> </div> <ul class="latestReadList"> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  8小时前  |   <a href="javascript:;" class="aLightGray" title="CSS">CSS</a> <a href="javascript:;" class="aLightGray" title="animation">animation</a> <a href="javascript:;" class="aLightGray" title="transform">transform</a> <a href="javascript:;" class="aLightGray" title="前端动画">前端动画</a> <a href="javascript:;" class="aLightGray" title="animation-composition">animation-composition</a> </div> <div class="tit lineOverflow"><a href="/article/635001.html" title="CSS animation-composition 怎样叠加多个动画效果" class="aBlack">CSS animation-composition 怎样叠加多个动画效果</a></div> <div class="opt"> <span><i class="view"></i>221</span> <span class="collectBtn user_collection" data-id="635001" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  15小时前  |   </div> <div class="tit lineOverflow"><a href="/article/634947.html" title="Vite import.meta.glob 怎样批量加载模块" class="aBlack">Vite import.meta.glob 怎样批量加载模块</a></div> <div class="opt"> <span><i class="view"></i>157</span> <span class="collectBtn user_collection" data-id="634947" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  15小时前  |   <a href="/articletag/4701_new_0_1.html" class="aLightGray" title="javascript">javascript</a> · <a href="javascript:;" class="aLightGray" title="localStorage">localStorage</a> <a href="javascript:;" class="aLightGray" title="JSON.parse">JSON.parse</a> <a href="javascript:;" class="aLightGray" title="JSON.stringify">JSON.stringify</a> <a href="javascript:;" class="aLightGray" title="Web Storage">Web Storage</a> </div> <div class="tit lineOverflow"><a href="/article/634946.html" title="Web Storage 为什么 localStorage 不能保存对象" class="aBlack">Web Storage 为什么 localStorage 不能保存对象</a></div> <div class="opt"> <span><i class="view"></i>283</span> <span class="collectBtn user_collection" data-id="634946" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  15小时前  |   </div> <div class="tit lineOverflow"><a href="/article/634945.html" title="CSS line-clamp 怎样把多行文本限制在固定行数" class="aBlack">CSS line-clamp 怎样把多行文本限制在固定行数</a></div> <div class="opt"> <span><i class="view"></i>352</span> <span class="collectBtn user_collection" data-id="634945" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  15小时前  |   </div> <div class="tit lineOverflow"><a href="/article/634944.html" title="IntersectionObserver 怎样实现列表图片进入视口再加载" class="aBlack">IntersectionObserver 怎样实现列表图片进入视口再加载</a></div> <div class="opt"> <span><i class="view"></i>139</span> <span class="collectBtn user_collection" data-id="634944" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  15小时前  |   <a href="/articletag/4701_new_0_1.html" class="aLightGray" title="javascript">javascript</a> · <a href="javascript:;" class="aLightGray" title="ArrayBuffer">ArrayBuffer</a> <a href="javascript:;" class="aLightGray" title="TypedArray">TypedArray</a> <a href="javascript:;" class="aLightGray" title="Transferable">Transferable</a> <a href="javascript:;" class="aLightGray" title="Web Workers">Web Workers</a> </div> <div class="tit lineOverflow"><a href="/article/634943.html" title="Web Workers 怎样用 transferable 减少数组复制" class="aBlack">Web Workers 怎样用 transferable 减少数组复制</a></div> <div class="opt"> <span><i class="view"></i>218</span> <span class="collectBtn user_collection" data-id="634943" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  15小时前  |   <a href="/articletag/243_new_0_1.html" class="aLightGray" title="前端">前端</a> · <a href="/articletag/4701_new_0_1.html" class="aLightGray" title="javascript">javascript</a> · <a href="javascript:;" class="aLightGray" title="Fetch">Fetch</a> <a href="javascript:;" class="aLightGray" title="流式读取">流式读取</a> <a href="javascript:;" class="aLightGray" title="ReadableStream">ReadableStream</a> <a href="javascript:;" class="aLightGray" title="TextDecoder">TextDecoder</a> <a href="javascript:;" class="aLightGray" title="Response.Body">Response.Body</a> </div> <div class="tit lineOverflow"><a href="/article/634942.html" title="Fetch Response.body 怎样逐块读取文本流" class="aBlack">Fetch Response.body 怎样逐块读取文本流</a></div> <div class="opt"> <span><i class="view"></i>492</span> <span class="collectBtn user_collection" data-id="634942" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  15小时前  |   </div> <div class="tit lineOverflow"><a href="/article/634941.html" title="CSS transition-behavior 怎样让 display 切换也参与过渡" class="aBlack">CSS transition-behavior 怎样让 display 切换也参与过渡</a></div> <div class="opt"> <span><i class="view"></i>366</span> <span class="collectBtn user_collection" data-id="634941" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  15小时前  |   <a href="javascript:;" class="aLightGray" title="JavaScript">JavaScript</a> <a href="javascript:;" class="aLightGray" title="请求超时">请求超时</a> <a href="javascript:;" class="aLightGray" title="Fetch">Fetch</a> <a href="javascript:;" class="aLightGray" title="AbortController">AbortController</a> <a href="javascript:;" class="aLightGray" title="AbortSignal.timeout">AbortSignal.timeout</a> </div> <div class="tit lineOverflow"><a href="/article/634940.html" title="JavaScript AbortSignal.timeout 怎样取消超时请求" class="aBlack">JavaScript AbortSignal.timeout 怎样取消超时请求</a></div> <div class="opt"> <span><i class="view"></i>273</span> <span class="collectBtn user_collection" data-id="634940" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  15小时前  |   <a href="/articletag/243_new_0_1.html" class="aLightGray" title="前端">前端</a> · <a href="/articletag/4729_new_0_1.html" class="aLightGray" title="css">css</a> · <a href="javascript:;" class="aLightGray" title="CSS">CSS</a> <a href="javascript:;" class="aLightGray" title="中文排版">中文排版</a> <a href="javascript:;" class="aLightGray" title="text-spacing-trim">text-spacing-trim</a> <a href="javascript:;" class="aLightGray" title="CJK">CJK</a> <a href="javascript:;" class="aLightGray" title="标点间距">标点间距</a> </div> <div class="tit lineOverflow"><a href="/article/634939.html" title="CSS text-spacing-trim 怎样处理 CJK 标点两侧空隙" class="aBlack">CSS text-spacing-trim 怎样处理 CJK 标点两侧空隙</a></div> <div class="opt"> <span><i class="view"></i>406</span> <span class="collectBtn user_collection" data-id="634939" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  15小时前  |   </div> <div class="tit lineOverflow"><a href="/article/634938.html" title="CSS scroll-snap 怎样让横向列表停在卡片边缘" class="aBlack">CSS scroll-snap 怎样让横向列表停在卡片边缘</a></div> <div class="opt"> <span><i class="view"></i>471</span> <span class="collectBtn user_collection" data-id="634938" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  15小时前  |   <a href="/articletag/243_new_0_1.html" class="aLightGray" title="前端">前端</a> · <a href="/articletag/4729_new_0_1.html" class="aLightGray" title="css">css</a> · <a href="javascript:;" class="aLightGray" title="CSS">CSS</a> <a href="javascript:;" class="aLightGray" title="容器查询">容器查询</a> <a href="javascript:;" class="aLightGray" title="响应式组件">响应式组件</a> <a href="javascript:;" class="aLightGray" title="container-type">container-type</a> </div> <div class="tit lineOverflow"><a href="/article/634936.html" title="CSS container-type 怎样让组件按容器尺寸响应" class="aBlack">CSS container-type 怎样让组件按容器尺寸响应</a></div> <div class="opt"> <span><i class="view"></i>148</span> <span class="collectBtn user_collection" data-id="634936" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> </ul> </div> <!-- 课程推荐 --> <div class="contBoxNor"> <div class="contTit"> <div class="tit">课程推荐</div> <a href="/courselist.html" class="more">更多></a> </div> <ul class="classRecomList"> <li> <a href="/course/9.html" title="前端进阶之JavaScript设计模式" class="img_box"> <img src="/uploads/20221222/52fd0f23a454c71029c2c72d206ed815.jpg" onerror="this.onerror='';this.src='/assets/images/moren/morentu.png'" alt="前端进阶之JavaScript设计模式"> </a> <dl> <dt class="lineOverflow"> 前端进阶之JavaScript设计模式 </dt> <dd class="cont1 lineOverflow">设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。</dd> <dd class="cont2"> <a href="/course/9.html" title="前端进阶之JavaScript设计模式" class="toStudy">立即学习</a> <span>543次学习</span> </dd> </dl> </li> <li> <a href="/course/2.html" title="GO语言核心编程课程" class="img_box"> <img src="/uploads/20221221/634ad7404159bfefc6a54a564d437b5f.png" onerror="this.onerror='';this.src='/assets/images/moren/morentu.png'" alt="GO语言核心编程课程"> </a> <dl> <dt class="lineOverflow"> GO语言核心编程课程 </dt> <dd class="cont1 lineOverflow">本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。</dd> <dd class="cont2"> <a href="/course/2.html" title="GO语言核心编程课程" class="toStudy">立即学习</a> <span>516次学习</span> </dd> </dl> </li> <li> <a href="/course/74.html" title="简单聊聊mysql8与网络通信" class="img_box"> <img src="/uploads/20240103/bad35fe14edbd214bee16f88343ac57c.png" onerror="this.onerror='';this.src='/assets/images/moren/morentu.png'" alt="简单聊聊mysql8与网络通信"> </a> <dl> <dt class="lineOverflow"> 简单聊聊mysql8与网络通信 </dt> <dd class="cont1 lineOverflow">如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让</dd> <dd class="cont2"> <a href="/course/74.html" title="简单聊聊mysql8与网络通信" class="toStudy">立即学习</a> <span>500次学习</span> </dd> </dl> </li> <li> <a href="/course/57.html" title="JavaScript正则表达式基础与实战" class="img_box"> <img src="/uploads/20221226/bbe4083bb3cb0dd135fb02c31c3785fb.jpg" onerror="this.onerror='';this.src='/assets/images/moren/morentu.png'" alt="JavaScript正则表达式基础与实战"> </a> <dl> <dt class="lineOverflow"> JavaScript正则表达式基础与实战 </dt> <dd class="cont1 lineOverflow">在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。</dd> <dd class="cont2"> <a href="/course/57.html" title="JavaScript正则表达式基础与实战" class="toStudy">立即学习</a> <span>487次学习</span> </dd> </dl> </li> <li> <a href="/course/28.html" title="从零制作响应式网站—Grid布局" class="img_box"> <img src="/uploads/20221223/ac110f88206daeab6c0cf38ebf5fe9ed.jpg" onerror="this.onerror='';this.src='/assets/images/moren/morentu.png'" alt="从零制作响应式网站—Grid布局"> </a> <dl> <dt class="lineOverflow"> 从零制作响应式网站—Grid布局 </dt> <dd class="cont1 lineOverflow">本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。</dd> <dd class="cont2"> <a href="/course/28.html" title="从零制作响应式网站—Grid布局" class="toStudy">立即学习</a> <span>485次学习</span> </dd> </dl> </li> </ul> </div> </div> <!-- footer --> <div class="footer"> <ul> <li ><a href="/" class="aLightGray"><em class="navIcon navIconHome"></em><span>首页</span></a></li> <li class="curr"><a href="/articlelist.html" class="aLightGray"><em class="navIcon navIconRead"></em><span>阅读</span></a></li> <li ><a href="/courselist.html" class="aLightGray"><em class="navIcon navIconCourse"></em><span>课程</span></a></li> <li ><a href="/ai.html" class="aLightGray"><em class="navIcon navIconAi"></em><span>AI助手</span></a></li> <li ><a href="/user.html" class="aLightGray"><em class="navIcon navIconUser"></em><span>我的</span></a></li> </ul> </div> <script src="/assets/js/frontend/common.js" defer></script> <script src="/assets/js/juejin-theme.js?v=20260613b" defer></script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?e34c3e8ab31ba35d7e1c48ea8d77315f"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>