当前位置:首页 > 文章列表 > 文章 > 前端 > HTML中如何实现SVG图形

HTML中如何实现SVG图形

2025-10-17 10:56:09 0浏览 收藏
热门推荐
漫画APP
动画内容聚合,热门资源快捷查看
立即下载

一分耕耘,一分收获!既然打开了这篇文章《HTML中如何实现SVG图形》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

在HTML中实现SVG图形主要有内联和外部引用两种方式,内联SVG便于通过CSS和JavaScript操作,适合需要交互的小型图形;外部引用利于缓存和维护,适用于重复使用的静态图标,选择应基于性能、交互需求与可维护性的权衡。

HTML中如何实现SVG图形

在HTML中实现SVG图形,最直接也最常用的方式就是将其作为内联元素直接嵌入HTML文档中,或者通过外部文件引用的方式。这两种方法各有其适用场景和优缺点,理解它们能帮助我们更灵活地在网页中运用矢量图形。

SVG,即“可缩放矢量图形”,本质上是一种基于XML的标记语言。它最大的优势在于,无论如何缩放,图形都不会失真,这对于响应式设计和高分辨率屏幕来说简直是福音。

解决方案

在HTML中实现SVG图形主要有两种途径:

  1. 内联SVG(Inline SVG): 直接将标签及其内部的图形定义(如, , 等)写入HTML文档的部分。这种方式的好处是SVG图形直接成为DOM的一部分,可以方便地通过CSS和JavaScript进行操作和动画。

    
    
    
        
        
        内联SVG示例
        
    
    
        

    我的第一个内联SVG

    这是一个简单的蓝色圆圈,鼠标悬停时会变色。

  2. 外部SVG引用: 将SVG图形保存为独立的.svg文件,然后在HTML中通过不同的标签进行引用。这类似于引入图片或外部资源。

    • 标签: 最简单直接的方式,就像引用任何其他图片格式一样。

      我的SVG图标

      缺点是无法直接通过CSS或JavaScript操作其内部元素。

    • 标签: 提供更好的内容回退机制,且允许脚本访问SVG的DOM(如果SVG文件和HTML文件同源)。

      
          
          SVG加载失败
      
    • 标签: 一种更通用的嵌入外部内容的方式,但不如语义化清晰。

    • CSS background-image: 将SVG作为元素的背景图片。

      .my-div {
          background-image: url('path/to/your/image.svg');
          background-size: contain;
          width: 50px;
          height: 50px;
      }

      同样,这种方式也无法直接操作SVG内部元素。


    • SVG内联与外部引用:我该如何选择最适合的方案?

      在我看来,选择内联SVG还是外部引用,这并非简单的“哪个更好”,而是要看你的具体需求和对项目的考量。这就像你决定是把家具直接设计在房子里(内联),还是买现成的家具回来摆放(外部引用)。

      内联SVG最大的魅力在于它的灵活性。因为SVG代码直接写在HTML里,它就成了DOM的一部分。这意味着你可以像操作任何其他HTML元素一样,用CSS给它上色、描边,甚至通过JavaScript实现复杂的交互和动画。比如,我曾经做过一个数据可视化项目,需要根据用户操作实时改变图表的颜色和形状,内联SVG简直是天作之合。它省去了HTTP请求,对于一些小的、关键的图标,也能减少页面加载时的闪烁。但凡事都有两面,内联SVG会显著增加HTML文件的大小,对于那些重复出现多次的复杂图形,这无疑会造成代码冗余,让HTML文件变得臃肿,不利于维护。而且,浏览器无法缓存内联SVG,每次页面加载都需要重新解析。

      反观外部引用,它更侧重于可维护性和缓存。当你的网站有大量重复使用的图标,或者这些图标本身比较复杂时,将它们作为独立的.svg文件引用,可以极大地简化HTML结构,并利用浏览器的缓存机制。用户访问一次后,SVG文件就会被缓存,下次访问其他页面时无需再次下载,提升了加载速度。用标签引入是最常见的,它简单直接,但缺点是无法通过CSS或JS修改SVG的内部样式或结构。如果需要更高级的控制,比如让图标在不同状态下有不同的颜色,或者在鼠标悬停时触发动画,你就得考虑使用,甚至是用JavaScript动态加载SVG内容到DOM中,但这又增加了复杂性。

      所以,我的建议是:

      • 小型、独特、需要高度交互或动态变化的图形(如自定义图标、图表、动画Logo),优先考虑内联SVG。你可以直接利用CSS和JS的强大能力。
      • 大型、重复使用、不常变化或不需要复杂交互的图形(如网站导航图标、背景图案),或者你希望利用浏览器缓存来优化性能时,选择外部引用。特别是配合SVG Sprite技术(将多个SVG图标合并成一个文件,通过标签引用),能进一步提升效率。

      最终的选择,往往是性能、可维护性、交互需求和开发便利性之间的一个权衡。


      动态SVG交互:如何通过CSS和JavaScript赋予SVG生命力?

      让SVG动起来,或者响应用户的操作,这就像给它注入了灵魂。CSS和JavaScript是实现这一目标的“魔法棒”,它们各自在不同的场景下发挥着独特的作用。

      CSS在SVG动画和交互方面,提供了一种相对声明式且性能优异的方式。你可以用它来改变SVG元素的颜色、透明度、位置、大小,甚至实现复杂的路径动画。比如,transition属性可以平滑地过渡元素的样式变化,animation属性则能定义更复杂的关键帧动画。我特别喜欢用CSS的stroke-dasharraystroke-dashoffset属性来制作“线条绘制”的动画效果,这在展示Logo或手写文字时非常酷炫。当用户鼠标悬停时,改变SVG元素的填充色或边框,这都是CSS的拿手好戏。它简单、直接,而且通常由浏览器底层优化,性能表现不俗。

      
      
          
      

      而JavaScript则提供了无与伦比的控制力灵活性。当动画或交互逻辑变得复杂,需要根据用户输入、数据变化或更复杂的条件来动态生成、修改SVG元素时,JavaScript就成了不可或缺的工具。你可以用它监听SVG元素的事件(点击、鼠标移入移出等),然后根据这些事件来改变SVG的属性,甚至动态创建或删除SVG元素。例如,实现一个可拖拽的SVG图形,或者根据后端数据实时更新的仪表盘,这些都离不开JavaScript对SVG DOM的直接操作。我经常用JavaScript来处理SVG的事件委托,或者结合一些动画库(如GSAP、D3.js)来制作更流畅、更复杂的基于物理的动画或数据驱动的图形。

      
          
      
      

      简单来说,对于样式变化、过渡效果等相对“静态”的动画,CSS是首选;而对于需要复杂逻辑、数据驱动或用户高度参与的交互,JavaScript则是实现动态SVG的强大引擎。两者结合使用,往往能达到最佳效果。


      SVG在不同浏览器中的兼容性与常见问题解决

      谈到SVG的兼容性,我得说,现代浏览器对SVG的支持已经相当成熟了。从IE9开始,主流浏览器如Chrome、Firefox、Safari、Edge等都提供了良好的SVG渲染能力。这使得我们现在可以放心地在大部分项目中采用SVG。但“成熟”不代表“完美”,在实际开发中,还是会遇到一些小插曲。

      最常见的兼容性问题往往出现在一些老旧的浏览器上,比如IE8及更早的版本,它们压根就不支持SVG。对于这类用户,我们通常会提供一个回退方案。最简单的方法是使用标签,并在其内部或者通过JavaScript判断,如果浏览器不支持SVG,就加载一个PNG或JPG格式的栅格图。像标签,它天生就支持回退内容,这在使用时可以省去一些判断逻辑。

      另一个我常遇到的问题是viewBox的理解和使用viewBox定义了SVG画布的用户坐标系统,它对于SVG的缩放行为至关重要。但有时候,设计师导出的SVG文件可能没有正确设置viewBox,或者我们在HTML中设置的widthheightviewBox的比例不符,导致SVG在不同尺寸下显示异常。解决这个问题,需要我们理解viewBox的四个参数(min-x, min-y, width, height)以及preserveAspectRatio属性。通常,保持viewBox的宽高比与SVG元素的实际宽高比一致,并合理设置preserveAspectRatio,就能解决大部分缩放问题。

      还有,字体渲染在SVG中也可能带来一些麻烦。如果SVG中使用了自定义字体,而用户浏览器没有安装该字体,或者没有正确嵌入字体文件,那么文本就会以默认字体显示,这会破坏设计。我的做法是,要么将SVG中的文本转换为路径(path),但这会增加文件大小且失去文本的可访问性;要么确保自定义字体通过CSS @font-face正确加载,并且在SVG中引用。

      可访问性是另一个需要关注的点。虽然SVG是图像,但它也应该对屏幕阅读器等辅助技术友好。这意味着我们需要使用</code>和<code><desc></code>标签为SVG提供描述性文本,并通过<code>aria-labelledby</code>、<code>aria-describedby</code>和<code>role="img"</code>等ARIA属性来增强其语义。这不仅仅是兼容性问题,更是用户体验和无障碍设计的重要组成部分。</p><p>最后,为了确保SVG在各种环境下的最佳表现,我通常会使用<strong>SVGO</strong>这样的工具来优化SVG文件。它能移除不必要的元数据、注释、隐藏元素等,显著减小文件大小,提高加载速度。虽然这不直接是兼容性问题,但优化后的SVG文件在传输和渲染上更高效,间接提升了用户体验。</p><p>总而言之,SVG的兼容性已经非常出色,大多数问题都可以通过理解其工作原理、合理设置属性和提供回退方案来解决。</p><hr><h3>SVG图形的性能优化与最佳实践</h3><p>优化SVG图形的性能,就像打磨一件艺术品,不是一蹴而就,而是在每个环节都力求精进。这不仅仅关乎加载速度,更影响着用户体验和网站的整体表现。</p><p>在我看来,首要且最直接的优化手段是<strong>SVG文件本身的精简</strong>。设计师导出的SVG文件往往包含大量不必要的元数据、注释、空白符、编辑器信息甚至隐藏元素。这些“垃圾”会显著增加文件大小。我强烈推荐使用<strong>SVGO</strong>(SVG Optimizer)这样的命令行工具或在线服务来自动化这个过程。它能智能地移除冗余信息,合并路径,优化坐标精度,通常能将文件大小减少20%到80%,效果立竿见影。我曾经优化过一个复杂的Logo,文件大小从100KB直接降到了20KB,加载速度提升肉眼可见。</p><p><strong>复用性</strong>是另一个提升性能的关键。如果你的页面中有多个相同的SVG图标,不要每次都复制粘贴内联SVG代码。这不仅增加了HTML的体积,也让维护变得困难。更好的做法是使用SVG的<code><defs></code>和<code><use></code>标签。你可以将通用的图形定义放在<code><defs></code>中,然后通过<code><use xlink:href="#id_of_your_shape"></code>在文档的任何地方引用它。这样,SVG的定义只存在一份,而引用则非常轻量。这就像是创建了一个组件库,极大地提高了效率和可维护性。</p><pre class="brush:language-html;toolbar:false;"><svg width="0" height="0" style="position:absolute;"> <defs> <symbol id="icon-star" viewBox="0 0 24 24"> <path d="M12 .587l3.668 7.568 8.332 1.151-6.064 5.828 1.48 8.279-7.416-3.922-7.416 3.922 1.48-8.279-6.064-5.828 8.332-1.151z"/> </symbol> </defs> </svg> <!-- 在需要的地方引用 --> <svg class="star-icon" width="24" height="24"> <use xlink:href="#icon-star"></use> </svg> <svg class="star-icon large" width="48" height="48"> <use xlink:href="#icon-star"></use> </svg></pre><p>对于那些不在首屏显示或者用户不立即需要的SVG图形,可以考虑<strong>懒加载(Lazy Loading)</strong>。这可以通过JavaScript实现,只在SVG进入视口时才加载或渲染它。这能有效减少页面首次加载时的资源消耗,提升用户感知速度。</p><p><strong>避免过度复杂</strong>的SVG图形也是一个重要原则。虽然SVG是矢量图,理论上可以无限复杂,但过于精细的路径、大量的滤镜效果或复杂的渐变,都会增加浏览器渲染的负担。如果一个SVG图形在视觉上已经非常复杂,而且它的矢量特性并非不可替代(比如它是一个非常精细的插画,而不是一个需要无限缩放的图标),那么有时将其导出为优化的栅格图片(如WebP或JPG)反而能获得更好的性能。</p><p>最后,不要忽视<strong>语义化和可访问性</strong>。虽然这不直接影响性能,但一个结构良好、带有<code>title</code>、<code>desc</code>和ARIA属性的SVG,不仅对辅助技术友好,也更容易被团队成员理解和维护。这在长期项目中,能减少因理解偏差导致的错误和返工,间接提升了开发效率和“性能”。</p><p>总之,SVG的优化是一个多维度的过程,从文件创建到最终部署,每个环节都有可以提升的空间。</p><p>文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《HTML中如何实现SVG图形》文章吧,也可关注golang学习网公众号了解相关技术文章。</p> </div> <div class="labsList"> </div> <div class="cateBox"> <div class="cateItem"> <a href="/article/349830.html" title="windows10怎么开启telnet客户端_windows10开启Telnet客户端教程" class="img_box"> <img src="/uploads/20251017/176066970768f1b00bf3779.jpg" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="windows10怎么开启telnet客户端_windows10开启Telnet客户端教程">windows10怎么开启telnet客户端_windows10开启Telnet客户端教程 </a> <dl> <dt class="lineOverflow"><a href="/article/349830.html" title="windows10怎么开启telnet客户端_windows10开启Telnet客户端教程" class="aBlack">上一篇<i></i></a></dt> <dd class="lineTwoOverflow">windows10怎么开启telnet客户端_windows10开启Telnet客户端教程</dd> </dl> </div> <div class="cateItem"> <a href="/article/349832.html" title="PHP环境如何搭建_PHP开发环境快速配置教程" class="img_box"> <img src="/uploads/20251017/176066982868f1b0842ee09.jpg" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="PHP环境如何搭建_PHP开发环境快速配置教程"> </a> <dl> <dt class="lineOverflow"><a href="/article/349832.html" class="aBlack" title="PHP环境如何搭建_PHP开发环境快速配置教程">下一篇<i></i></a></dt> <dd class="lineTwoOverflow">PHP环境如何搭建_PHP开发环境快速配置教程</dd> </dl> </div> </div> </div> </div> <div class="leftContBox pt0"> <div class="pdl20"> <div class="contTit"> <a href="/articlelist.html" class="more" title="查看更多">查看更多<i class="iconfont"></i></a> <div class="tit">最新文章</div> </div> </div> <ul class="newArticleList"> <li> <div class="contBox"> <a href="/article/620092.html" class="img_box" title="前端批量导出接口怎么设计:异步任务、状态查询和下载链接"> <img src="/uploads/20260629/1782718967-export-api-error-panel.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="前端批量导出接口怎么设计:异步任务、状态查询和下载链接"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  17小时前  |   <a href="/articletag/2436_new_0_1.html" class="aLightGray" title="异步任务">异步任务</a> · <a href="/articletag/5401_new_0_1.html" class="aLightGray" title="前端开发">前端开发</a> · <a href="/articletag/39770_new_0_1.html" class="aLightGray" title="接口设计">接口设计</a> · <a href="/articletag/40045_new_0_1.html" class="aLightGray" title="后台系统">后台系统</a> · <a href="/articletag/40046_new_0_1.html" 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="前端导出">前端导出</a> <a href="javascript:;" class="aLightGray" title="状态查询">状态查询</a> <a href="javascript:;" class="aLightGray" title="报表导出">报表导出</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620092.html" class="aBlack" target="_blank" title="前端批量导出接口怎么设计:异步任务、状态查询和下载链接">前端批量导出接口怎么设计:异步任务、状态查询和下载链接</a> </dt> <dd class="cont2"> <span><i class="view"></i>296浏览</span> <span class="collectBtn user_collection" data-id="620092" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620091.html" class="img_box" title="前端表格列设置刷新后丢失怎么办:可见列、列宽和顺序这样保存"> <img src="/uploads/20260629/1782717813-frontend-table-columns-lifecycle.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="前端表格列设置刷新后丢失怎么办:可见列、列宽和顺序这样保存"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  17小时前  |   <a href="/articletag/5401_new_0_1.html" class="aLightGray" title="前端开发">前端开发</a> · <a href="/articletag/39813_new_0_1.html" class="aLightGray" title="localStorage">localStorage</a> · <a href="/articletag/40043_new_0_1.html" class="aLightGray" title="表格配置">表格配置</a> · <a href="/articletag/40044_new_0_1.html" class="aLightGray" title="用户偏好">用户偏好</a> · <a href="/articletag/40045_new_0_1.html" class="aLightGray" title="后台系统">后台系统</a> · <a href="javascript:;" class="aLightGray" title="用户偏好">用户偏好</a> <a href="javascript:;" class="aLightGray" title="localStorage">localStorage</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="列宽保存">列宽保存</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620091.html" class="aBlack" target="_blank" title="前端表格列设置刷新后丢失怎么办:可见列、列宽和顺序这样保存">前端表格列设置刷新后丢失怎么办:可见列、列宽和顺序这样保存</a> </dt> <dd class="cont2"> <span><i class="view"></i>351浏览</span> <span class="collectBtn user_collection" data-id="620091" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620087.html" class="img_box" title="前端实时通知方案选型:短轮询、SSE、WebSocket 怎么选"> <img src="/uploads/20260629/1782712475-frontend-notify-choice-timeline.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="前端实时通知方案选型:短轮询、SSE、WebSocket 怎么选"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  19小时前  |   <a href="/articletag/1017_new_0_1.html" class="aLightGray" title="websocket">websocket</a> · <a href="/articletag/5401_new_0_1.html" class="aLightGray" title="前端开发">前端开发</a> · <a href="/articletag/27659_new_0_1.html" class="aLightGray" title="sse">sse</a> · <a href="/articletag/40036_new_0_1.html" class="aLightGray" title="实时通知">实时通知</a> · <a href="/articletag/40037_new_0_1.html" class="aLightGray" title="方案选型">方案选型</a> · <a href="javascript:;" class="aLightGray" title="websocket">websocket</a> <a href="javascript:;" class="aLightGray" title="消息推送">消息推送</a> <a href="javascript:;" class="aLightGray" title="EventSource">EventSource</a> <a href="javascript:;" class="aLightGray" title="SSE">SSE</a> <a href="javascript:;" class="aLightGray" title="前端实时通知">前端实时通知</a> <a href="javascript:;" class="aLightGray" title="短轮询">短轮询</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620087.html" class="aBlack" target="_blank" title="前端实时通知方案选型:短轮询、SSE、WebSocket 怎么选">前端实时通知方案选型:短轮询、SSE、WebSocket 怎么选</a> </dt> <dd class="cont2"> <span><i class="view"></i>498浏览</span> <span class="collectBtn user_collection" data-id="620087" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620079.html" class="img_box" title="前端接口超时告警运行手册:从瀑布图到降级回滚"> <img src="/uploads/20260629/1782702426-frontend-api-timeout-alert-flow.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="前端接口超时告警运行手册:从瀑布图到降级回滚"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  22小时前  |   <a href="/articletag/243_new_0_1.html" class="aLightGray" title="前端">前端</a> · <a href="/articletag/40002_new_0_1.html" class="aLightGray" title="接口排查">接口排查</a> · <a href="/articletag/40021_new_0_1.html" class="aLightGray" title="运维手册">运维手册</a> · <a href="/articletag/40024_new_0_1.html" class="aLightGray" title="性能告警">性能告警</a> · <a href="javascript:;" class="aLightGray" title="前端">前端</a> <a href="javascript:;" class="aLightGray" title="AbortController">AbortController</a> <a href="javascript:;" class="aLightGray" title="接口超时">接口超时</a> <a href="javascript:;" class="aLightGray" title="Network瀑布图">Network瀑布图</a> <a href="javascript:;" class="aLightGray" title="降级回滚">降级回滚</a> <a href="javascript:;" class="aLightGray" title="线上告警">线上告警</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620079.html" class="aBlack" target="_blank" title="前端接口超时告警运行手册:从瀑布图到降级回滚">前端接口超时告警运行手册:从瀑布图到降级回滚</a> </dt> <dd class="cont2"> <span><i class="view"></i>287浏览</span> <span class="collectBtn user_collection" data-id="620079" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620076.html" class="img_box" title="CSS sticky 不生效排查清单:从 top、overflow 到滚动容器逐层定位"> <img src="/uploads/20260629/1782698249-css-sticky-failure-check.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="CSS sticky 不生效排查清单:从 top、overflow 到滚动容器逐层定位"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  23小时前  |   <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="/articletag/9935_new_0_1.html" class="aLightGray" title="sticky">sticky</a> · <a href="/articletag/40022_new_0_1.html" class="aLightGray" title="布局调试">布局调试</a> · <a href="javascript:;" class="aLightGray" title="CSS">CSS</a> <a href="javascript:;" class="aLightGray" title="Overflow">Overflow</a> <a href="javascript:;" class="aLightGray" title="position sticky">position sticky</a> <a href="javascript:;" class="aLightGray" title="滚动容器">滚动容器</a> <a href="javascript:;" class="aLightGray" title="前端调试">前端调试</a> <a href="javascript:;" class="aLightGray" title="吸顶布局">吸顶布局</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620076.html" class="aBlack" target="_blank" title="CSS sticky 不生效排查清单:从 top、overflow 到滚动容器逐层定位">CSS sticky 不生效排查清单:从 top、overflow 到滚动容器逐层定位</a> </dt> <dd class="cont2"> <span><i class="view"></i>179浏览</span> <span class="collectBtn user_collection" data-id="620076" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620069.html" class="img_box" title="前端静态资源上云部署选型:对象存储、CDN 和容器服务怎么选"> <img src="/uploads/20260627/1782572123-frontend-static-cache-architecture.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="前端静态资源上云部署选型:对象存储、CDN 和容器服务怎么选"> </a> <dl> <dd class="cont1"> <span> <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="/articletag/243_new_0_1.html" class="aLightGray" title="前端">前端</a> · <a href="/articletag/652_new_0_1.html" class="aLightGray" title="静态资源">静态资源</a> · <a href="/articletag/5322_new_0_1.html" class="aLightGray" title="cdn">cdn</a> · <a href="/articletag/40011_new_0_1.html" 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="cdn">cdn</a> <a href="javascript:;" class="aLightGray" title="前端部署">前端部署</a> <a href="javascript:;" class="aLightGray" title="容器服务">容器服务</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620069.html" class="aBlack" target="_blank" title="前端静态资源上云部署选型:对象存储、CDN 和容器服务怎么选">前端静态资源上云部署选型:对象存储、CDN 和容器服务怎么选</a> </dt> <dd class="cont2"> <span><i class="view"></i>433浏览</span> <span class="collectBtn user_collection" data-id="620069" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620045.html" class="img_box" title="前端表单重复提交防护工作流:从按钮状态到请求取消和幂等键"> <img src="/uploads/20260622/1782110788-frontend-idempotent-key-flow.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="前端表单重复提交防护工作流:从按钮状态到请求取消和幂等键"> </a> <dl> <dd class="cont1"> <span> <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="/articletag/243_new_0_1.html" class="aLightGray" title="前端">前端</a> · <a href="/articletag/39982_new_0_1.html" class="aLightGray" title="接口联调">接口联调</a> · <a href="/articletag/39989_new_0_1.html" class="aLightGray" title="表单交互">表单交互</a> · <a href="/articletag/39990_new_0_1.html" class="aLightGray" title="重复提交">重复提交</a> · <a href="/articletag/39991_new_0_1.html" 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="AbortController">AbortController</a> <a href="javascript:;" class="aLightGray" title="幂等键">幂等键</a> <a href="javascript:;" class="aLightGray" title="按钮禁用">按钮禁用</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620045.html" class="aBlack" target="_blank" title="前端表单重复提交防护工作流:从按钮状态到请求取消和幂等键">前端表单重复提交防护工作流:从按钮状态到请求取消和幂等键</a> </dt> <dd class="cont2"> <span><i class="view"></i>374浏览</span> <span class="collectBtn user_collection" data-id="620045" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620039.html" class="img_box" title="前端 CORS 预检失败排查流程:从请求头到网关响应"> <img src="/uploads/20260618/1781767364-frontend-cors-flow.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="前端 CORS 预检失败排查流程:从请求头到网关响应"> </a> <dl> <dd class="cont1"> <span> <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="/articletag/243_new_0_1.html" class="aLightGray" title="前端">前端</a> · <a href="/articletag/4720_new_0_1.html" class="aLightGray" title="cors">cors</a> · <a href="/articletag/39980_new_0_1.html" class="aLightGray" title="跨域排查">跨域排查</a> · <a href="/articletag/39981_new_0_1.html" class="aLightGray" title="浏览器网络">浏览器网络</a> · <a href="/articletag/39982_new_0_1.html" class="aLightGray" title="接口联调">接口联调</a> · <a href="javascript:;" class="aLightGray" title="前端">前端</a> <a href="javascript:;" class="aLightGray" title="cors">cors</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="Options">Options</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620039.html" class="aBlack" target="_blank" title="前端 CORS 预检失败排查流程:从请求头到网关响应">前端 CORS 预检失败排查流程:从请求头到网关响应</a> </dt> <dd class="cont2"> <span><i class="view"></i>422浏览</span> <span class="collectBtn user_collection" data-id="620039" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620035.html" class="img_box" title="前端 position sticky 不生效排查:从滚动容器到 overflow 限制"> <img src="/uploads/20260618/1781761300-frontend-sticky-check-flow.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="前端 position sticky 不生效排查:从滚动容器到 overflow 限制"> </a> <dl> <dd class="cont1"> <span> <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="/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="/articletag/9935_new_0_1.html" class="aLightGray" title="sticky">sticky</a> · <a href="/articletag/39972_new_0_1.html" class="aLightGray" title="布局排查">布局排查</a> · <a href="/articletag/39973_new_0_1.html" class="aLightGray" title="滚动容器">滚动容器</a> · <a href="javascript:;" class="aLightGray" title="CSS">CSS</a> <a href="javascript:;" class="aLightGray" title="前端">前端</a> <a href="javascript:;" class="aLightGray" title="Overflow">Overflow</a> <a href="javascript:;" class="aLightGray" title="position sticky">position sticky</a> <a href="javascript:;" class="aLightGray" title="滚动容器">滚动容器</a> <a href="javascript:;" class="aLightGray" title="吸顶失效">吸顶失效</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620035.html" class="aBlack" target="_blank" title="前端 position sticky 不生效排查:从滚动容器到 overflow 限制">前端 position sticky 不生效排查:从滚动容器到 overflow 限制</a> </dt> <dd class="cont2"> <span><i class="view"></i>449浏览</span> <span class="collectBtn user_collection" data-id="620035" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620015.html" class="img_box" title="前端图片懒加载实战:首屏 LCP 与滚动加载完整流程"> <img src="/uploads/20260617/1781673768-frontend-image-lazyload-flow.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="前端图片懒加载实战:首屏 LCP 与滚动加载完整流程"> </a> <dl> <dd class="cont1"> <span> <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="/articletag/243_new_0_1.html" class="aLightGray" title="前端">前端</a> · <a href="/articletag/729_new_0_1.html" class="aLightGray" title="性能优化">性能优化</a> · <a href="/articletag/39948_new_0_1.html" 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="IntersectionObserver">IntersectionObserver</a> <a href="javascript:;" class="aLightGray" title="LCP">LCP</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620015.html" class="aBlack" target="_blank" title="前端图片懒加载实战:首屏 LCP 与滚动加载完整流程">前端图片懒加载实战:首屏 LCP 与滚动加载完整流程</a> </dt> <dd class="cont2"> <span><i class="view"></i>105浏览</span> <span class="collectBtn user_collection" data-id="620015" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620013.html" class="img_box" title="前端表单联动校验失效排查:旧状态、重复提交和提交锁"> <img src="/uploads/20260617/1781671884-frontend-form-bug-flow.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="前端表单联动校验失效排查:旧状态、重复提交和提交锁"> </a> <dl> <dd class="cont1"> <span> <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="/articletag/243_new_0_1.html" class="aLightGray" title="前端">前端</a> · <a href="/articletag/729_new_0_1.html" class="aLightGray" title="性能优化">性能优化</a> · <a href="/articletag/39947_new_0_1.html" class="aLightGray" title="表单校验">表单校验</a> · <a href="javascript:;" class="aLightGray" title="JavaScript">JavaScript</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="提交锁">提交锁</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620013.html" class="aBlack" target="_blank" title="前端表单联动校验失效排查:旧状态、重复提交和提交锁">前端表单联动校验失效排查:旧状态、重复提交和提交锁</a> </dt> <dd class="cont2"> <span><i class="view"></i>285浏览</span> <span class="collectBtn user_collection" data-id="620013" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620012.html" class="img_box" title="前端长列表虚拟滚动实战:从可视区计算到滚动流畅"> <img src="/uploads/20260617/1781670928-frontend-virtual-list-before-after.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="前端长列表虚拟滚动实战:从可视区计算到滚动流畅"> </a> <dl> <dd class="cont1"> <span> <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="/articletag/243_new_0_1.html" class="aLightGray" title="前端">前端</a> · <a href="/articletag/729_new_0_1.html" class="aLightGray" title="性能优化">性能优化</a> · <a href="/articletag/39783_new_0_1.html" class="aLightGray" title="虚拟列表">虚拟列表</a> · <a href="javascript:;" class="aLightGray" title="JavaScript">JavaScript</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="长列表优化">长列表优化</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620012.html" class="aBlack" target="_blank" title="前端长列表虚拟滚动实战:从可视区计算到滚动流畅">前端长列表虚拟滚动实战:从可视区计算到滚动流畅</a> </dt> <dd class="cont2"> <span><i class="view"></i>111浏览</span> <span class="collectBtn user_collection" data-id="620012" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> </ul> </div> </div> <div class="mainRight"> <!-- 右侧广告位banner --> <div class="rightContBox" style="margin-top: 0px;"> <div class="rightTit"> <a href="/courselist.html" class="more" title="查看更多">查看更多<i class="iconfont"></i></a> <div class="tit lineOverflow">课程推荐</div> </div> <ul class="lessonRecomRList"> <li> <a href="/course/9.html" class="img_box" target="_blank" title="前端进阶之JavaScript设计模式"> <img src="/uploads/20221222/52fd0f23a454c71029c2c72d206ed815.jpg" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="前端进阶之JavaScript设计模式"> </a> <dl> <dt class="lineTwoOverflow"><a href="/course/9.html" target="_blank" class="aBlack" title="前端进阶之JavaScript设计模式">前端进阶之JavaScript设计模式</a></dt> <dd class="cont1 lineTwoOverflow"> 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。 </dd> <dd class="cont2">543次学习</dd> </dl> </li> <li> <a href="/course/2.html" class="img_box" target="_blank" title="GO语言核心编程课程"> <img src="/uploads/20221221/634ad7404159bfefc6a54a564d437b5f.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="GO语言核心编程课程"> </a> <dl> <dt class="lineTwoOverflow"><a href="/course/2.html" target="_blank" class="aBlack" title="GO语言核心编程课程">GO语言核心编程课程</a></dt> <dd class="cont1 lineTwoOverflow"> 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。 </dd> <dd class="cont2">516次学习</dd> </dl> </li> <li> <a href="/course/74.html" class="img_box" target="_blank" title="简单聊聊mysql8与网络通信"> <img src="/uploads/20240103/bad35fe14edbd214bee16f88343ac57c.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="简单聊聊mysql8与网络通信"> </a> <dl> <dt class="lineTwoOverflow"><a href="/course/74.html" target="_blank" class="aBlack" title="简单聊聊mysql8与网络通信">简单聊聊mysql8与网络通信</a></dt> <dd class="cont1 lineTwoOverflow"> 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让 </dd> <dd class="cont2">500次学习</dd> </dl> </li> <li> <a href="/course/57.html" class="img_box" target="_blank" title="JavaScript正则表达式基础与实战"> <img src="/uploads/20221226/bbe4083bb3cb0dd135fb02c31c3785fb.jpg" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="JavaScript正则表达式基础与实战"> </a> <dl> <dt class="lineTwoOverflow"><a href="/course/57.html" target="_blank" class="aBlack" title="JavaScript正则表达式基础与实战">JavaScript正则表达式基础与实战</a></dt> <dd class="cont1 lineTwoOverflow"> 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。 </dd> <dd class="cont2">487次学习</dd> </dl> </li> <li> <a href="/course/28.html" class="img_box" target="_blank" title="从零制作响应式网站—Grid布局"> <img src="/uploads/20221223/ac110f88206daeab6c0cf38ebf5fe9ed.jpg" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="从零制作响应式网站—Grid布局"> </a> <dl> <dt class="lineTwoOverflow"><a href="/course/28.html" target="_blank" class="aBlack" title="从零制作响应式网站—Grid布局">从零制作响应式网站—Grid布局</a></dt> <dd class="cont1 lineTwoOverflow"> 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。 </dd> <dd class="cont2">485次学习</dd> </dl> </li> </ul> </div> <div class="rightContBox"> <div class="rightTit"> <a href="/ai.html" class="more" title="查看更多">查看更多<i class="iconfont"></i></a> <div class="tit lineOverflow">AI推荐</div> </div> <ul class="lessonRecomRList"> <li> <a href="/ai/13109.html" target="_blank" title="ljg-skills - "Prompt之神"李继刚开源的 AI 技能集" class="img_box"> <img src="/uploads/ai/20260616/ljg-skills-icon-8bbe1468e5.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="ljg-skills - "Prompt之神"李继刚开源的 AI 技能集" style="object-fit:cover;width:100%;height:100%;"> </a> <dl> <dt class="lineTwoOverflow"><a href="/ai/13109.html" class="aBlack" target="_blank" title="ljg-skills">ljg-skills</a></dt> <dd class="cont1 lineTwoOverflow"> ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。 </dd> <dd class="cont2">2897次使用</dd> </dl> </li> <li> <a href="/ai/13108.html" target="_blank" title="MELO音乐 - AI 音乐生成平台,支持多模态创作能力" class="img_box"> <img src="/uploads/ai/20260616/melo-icon-10bf590762.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="MELO音乐 - AI 音乐生成平台,支持多模态创作能力" style="object-fit:cover;width:100%;height:100%;"> </a> <dl> <dt class="lineTwoOverflow"><a href="/ai/13108.html" class="aBlack" target="_blank" title="MELO音乐">MELO音乐</a></dt> <dd class="cont1 lineTwoOverflow"> MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款! </dd> <dd class="cont2">2685次使用</dd> </dl> </li> <li> <a href="/ai/13107.html" target="_blank" title="UniScribe - AI 免费在线音视频转文字平台" class="img_box"> <img src="/uploads/ai/20260616/uniscribe-icon-3c88366a15.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="UniScribe - AI 免费在线音视频转文字平台" style="object-fit:cover;width:100%;height:100%;"> </a> <dl> <dt class="lineTwoOverflow"><a href="/ai/13107.html" class="aBlack" target="_blank" title="UniScribe">UniScribe</a></dt> <dd class="cont1 lineTwoOverflow"> UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。 </dd> <dd class="cont2">2617次使用</dd> </dl> </li> <li> <a href="/ai/13106.html" target="_blank" title="剧云 - 免费 AI 智能中文剧本创作平台" class="img_box"> <img src="/uploads/ai/20260615/d36c7176-icon-2b0cd581ce.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="剧云 - 免费 AI 智能中文剧本创作平台" style="object-fit:cover;width:100%;height:100%;"> </a> <dl> <dt class="lineTwoOverflow"><a href="/ai/13106.html" class="aBlack" target="_blank" title="剧云">剧云</a></dt> <dd class="cont1 lineTwoOverflow"> 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。 </dd> <dd class="cont2">2850次使用</dd> </dl> </li> <li> <a href="/ai/13105.html" target="_blank" title="万象有声 - AI 一站式有声内容创作平台" class="img_box"> <img src="/uploads/ai/20260615/50267bac-icon-c146b001b5.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="万象有声 - AI 一站式有声内容创作平台" style="object-fit:cover;width:100%;height:100%;"> </a> <dl> <dt class="lineTwoOverflow"><a href="/ai/13105.html" class="aBlack" target="_blank" title="万象有声">万象有声</a></dt> <dd class="cont1 lineTwoOverflow"> 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单! </dd> <dd class="cont2">2793次使用</dd> </dl> </li> </ul> </div> <!-- 相关文章 --> <div class="rightContBox"> <div class="rightTit"> <a href="/articlelist.html" class="more" title="查看更多">查看更多<i class="iconfont"></i></a> <div class="tit lineOverflow">相关文章</div> </div> <ul class="aboutArticleRList"> <li> <dl> <dt class="lineTwoOverflow"><a href="/article/207000.html" class="aBlack" title="JavaScript函数定义及示例详解">JavaScript函数定义及示例详解</a></dt> <dd> <span class="left">2025-05-11</span> <span class="right">502浏览</span> </dd> </dl> </li> <li> <dl> <dt class="lineTwoOverflow"><a href="/article/619053.html" class="aBlack" title="CSS变量简化按钮悬停效果技巧">CSS变量简化按钮悬停效果技巧</a></dt> <dd> <span class="left">2026-05-31</span> <span class="right">501浏览</span> </dd> </dl> </li> <li> <dl> <dt class="lineTwoOverflow"><a href="/article/618916.html" class="aBlack" title="JavaScript符号类型详解与应用">JavaScript符号类型详解与应用</a></dt> <dd> <span class="left">2026-05-31</span> <span class="right">501浏览</span> </dd> </dl> </li> <li> <dl> <dt class="lineTwoOverflow"><a href="/article/612539.html" class="aBlack" title="HTML剪贴板复制粘贴怎么用">HTML剪贴板复制粘贴怎么用</a></dt> <dd> <span class="left">2026-05-26</span> <span class="right">501浏览</span> </dd> </dl> </li> <li> <dl> <dt class="lineTwoOverflow"><a href="/article/611774.html" class="aBlack" title="data-*属性详解:HTML数据存储与DOM操作技巧">data-*属性详解:HTML数据存储与DOM操作技巧</a></dt> <dd> <span class="left">2026-05-25</span> <span class="right">501浏览</span> </dd> </dl> </li> </ul> </div> </div> </div> <div class="footer"> <div class="footerIn"> <div class="footLeft"> <div class="linkBox"> <a href="/about/1.html" target="_blank" class="aBlack" title="关于我们">关于我们</a> <a href="/about/5.html" target="_blank" class="aBlack" title="免责声明">免责声明</a> <a href="#" class="aBlack" title="意见反馈">意见反馈</a> <a href="/about/2.html" class="aBlack" target="_blank" title="联系我们">联系我们</a> <a href="/send.html" class="aBlack" title="广告合作">内容提交</a> <a href="/manual/go/" target="_blank" class="aBlack" title="手册">手册</a> </div> <div class="footTip">Golang学习网:公益在线Go学习平台,帮助Go学习者快速成长!</div> <div class="shareBox"> <span><i class="qq"></i>技术交流群</span> </div> <div class="copyRight"> Copyright 2023 http://www.17golang.com/ All Rights Reserved | <a href="https://beian.miit.gov.cn/" target="_blank" title="备案">苏ICP备2023003363号-1</a> </div> </div> <div class="footRight"> <ul class="encodeList"> <li> <div class="encodeImg"> <img src="/assets/examples/qrcode_for_gh.jpg" alt="Golang学习网"> </div> <div class="tit">关注公众号</div> <div class="tip">Golang学习网</div> </li> <div class="clear"></div> </ul> </div> <div class="clear"></div> </div> </div> <!-- 微信登录弹窗 --> <style> .popupBg .n-error{ color: red; } </style> <div class="popupBg"> <div class="loginBoxBox"> <div class="imgbg"> <img src="/assets/images/leftlogo.jpg" alt=""> </div> <!-- 微信登录 --> <div class="loginInfo encodeLogin" style="display: none;"> <div class="closeIcon" onclick="$('.popupBg').hide();"></div> <div class="changeLoginType cursorPointer create_wxqrcode" onclick="$('.loginInfo').hide();$('.passwordLogin').show();"> <div class="tip">密码登录在这里</div> </div> <div class="encodeInfo"> <div class="tit"><i></i> 微信扫码登录或注册</div> <div class="encodeImg"> <span id="wx_login_qrcode"><img src="/assets/examples/code.png" alt="二维码"></span> <!-- <div class="refreshBox"> <p>二维码失效</p> <button type="button" class="create_wxqrcode">刷新1111</button> </div> --> </div> <div class="tip">打开微信扫一扫,快速登录/注册</div> </div> <div class="beforeLoginTip">登录即同意 <a href="#" class="aBlue" title="用户协议">用户协议</a> 和 <a href="#" class="aBlue" title="隐私政策">隐私政策</a></div> </div> <!-- 密码登录 --> <div class="loginInfo passwordLogin"> <div class="closeIcon" onclick="$('.popupBg').hide();"></div> <div class="changeLoginType cursorPointer create_wxqrcode" onclick="$('.loginInfo').hide();$('.encodeLogin').show();"> <div class="tip">微信登录更方便</div> </div> <div class="passwordInfo"> <ul class="logintabs selfTabMenu"> <li class="selfTabItem loginFormLi curr">密码登录</li> <li class="selfTabItem registerFormBox ">注册账号</li> </ul> <div class="selfTabContBox"> <div class="selfTabCont loginFormBox" style="display: block;"> <form name="form" id="login-form" class="form-vertical form" method="POST" action="/index/user/login"> <input type="hidden" name="url" value="//17golang.com/article/349831.html"/> <input type="hidden" name="__token__" value="abbc5a5aa0609516a9d539088c9e5dde" /> <div class="form-group" style="height:70px;"> <input class="form-control" id="account" type="text" name="account" value="" data-rule="required" placeholder="邮箱/用户名" autocomplete="off"> </div> <div class="form-group" style="height:70px;"> <input class="form-control" id="password" type="password" name="password" data-rule="required;password" placeholder="密码" autocomplete="off"> </div> <div class="codeBox" style="height:70px;"> <div class="form-group" style="height:70px; width:205px; float: left;"> <input type="text" name="captcha" class="form-control" placeholder="验证码" data-rule="required;length(4)" /> </div> <span class="input-group-btn" style="padding:0;border:none;"> <img src="/captcha.html" width="100" height="45" onclick="this.src = '/captcha.html?r=' + Math.random();"/> </span> </div> <div class="other"> <a href="#" class="forgetPwd aGray" onclick="$('.loginInfo').hide();$('.passwordForget').show();" title="忘记密码">忘记密码</a> </div> <div class="loginBtn mt25"> <button type="submit">登录</button> </div> </form> </div> <div class="selfTabCont registerFormBox" style="display: none;"> <form name="form1" id="register-form" class="form-vertical form" method="POST" action="/index/user/register"> <input type="hidden" name="invite_user_id" value="0"/> <input type="hidden" name="url" value="//17golang.com/article/349831.html"/> <input type="hidden" name="__token__" value="abbc5a5aa0609516a9d539088c9e5dde" /> <div class="form-group" style="height:70px;"> <input type="text" name="email" id="email2" data-rule="required;email" class="form-control" placeholder="邮箱"> </div> <div class="form-group" style="height:70px;"> <input type="text" id="username" name="username" data-rule="required;username" class="form-control" placeholder="用户名必须3-30个字符"> </div> <div class="form-group" style="height:70px;"> <input type="password" id="password2" name="password" data-rule="required;password" class="form-control" placeholder="密码必须6-30个字符"> </div> <div class="codeBox" style="height:70px;"> <div class="form-group" style="height:70px; width:205px; float: left;"> <input type="text" name="captcha" class="form-control" placeholder="验证码" data-rule="required;length(4)" /> </div> <span class="input-group-btn" style="padding:0;border:none;"> <img src="/captcha.html" width="100" height="45" onclick="this.src = '/captcha.html?r=' + Math.random();"/> </span> </div> <div class="loginBtn"> <button type="submit">注册</button> </div> </form> </div> </div> </div> <div class="beforeLoginTip">登录即同意 <a href="https://www.17golang.com/about/3.html" target="_blank" class="aBlue" title="用户协议">用户协议</a> 和 <a href="https://www.17golang.com/about/4.html" target="_blank" class="aBlue" title="隐私政策">隐私政策</a></div> </div> <!-- 重置密码 --> <div class="loginInfo passwordForget"> <div class="closeIcon" onclick="$('.popupBg').hide();"></div> <div class="returnLogin cursorPointer" onclick="$('.passwordForget').hide();$('.passwordLogin').show();">返回登录</div> <div class="passwordInfo"> <ul class="logintabs selfTabMenu"> <li class="selfTabItem">重置密码</li> </ul> <div class="selfTabContBox"> <div class="selfTabCont"> <form id="resetpwd-form" class="form-horizontal form-layer nice-validator n-default n-bootstrap form" method="POST" action="/api/user/resetpwd.html" novalidate="novalidate"> <div style="height:70px;"> <input type="text" class="form-control" id="email" name="email" value="" placeholder="输入邮箱" aria-invalid="true"> </div> <div class="codeBox" style="height:70px;"> <div class="form-group" style="height:70px; width:205px; float: left;"> <input type="text" name="captcha" class="form-control" placeholder="验证码" /> </div> <span class="input-group-btn" style="padding:0;border:none;"> <a href="javascript:;" class="btn btn-primary btn-captcha cursorPointer" style="background: #2080F8; border-radius: 4px; color: #fff; padding: 12px; position: absolute;" data-url="/api/ems/send.html" data-type="email" data-event="resetpwd">发送验证码</a> </span> </div> <input type="password" class="form-control" id="newpassword" name="newpassword" value="" placeholder="请输入6-18位密码"> <div class="loginBtn mt25"> <button type="submit">重置密码</button> </div> </form> </div> </div> </div> </div> </div> </div> <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?3dc5666f6478c7bf39cd5c91e597423d"; hm.async = true; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <script src="/assets/js/frontend/common.js"></script> </body> </html>