SVG精简压缩工具svgo简介和初体验


一、事情的起因

佛家讲求因果关系,种什么因,得什么果,比方说种了颗苹果树,就会结苹果。这里,扯到SVG的精简压缩也是有原因的,前年有分享过“PSD小图标变身SVG Sprites/font-face历险记”,其中展示了我处理SVG比较重要的一步,就是对设计师PSD源文件中的图标路径进行重新处理。在没有对设计师进行分享培训之前,有些细节可能就不会注意,例如,图形喜欢用路径叠加实现,而不是实实在在地勾勒出来;或者PSD看上去是好的,但是放大个100倍,就会发现,路径的转角和边缘都没对上。此时如果直接SVG,一是SVG文件大小大,二是最终的图像可能不是我们想要的。因此,需要在Adobe Illustrator中重新处理下,至少我是使用的这个软件。

有小伙伴可能会疑问:设计师自己挖的坑就让他自己去种苹果树好了,你佛光普照去帮忙光合作用干什么呢?

佛约:我不入地狱输入地狱。大家都听过这句话吧,所以,我们再看上面的疑问,怎么样,是不是听之有理,实则差矣!我呸……甩自己一个嘴巴子,“差”它个鬼大头……

“我不入地狱输入地狱”这种骗傻子自我安慰的话你也信,偶尔帮帮设计师同事那是可以的,搞搞关系以后有糖吃,虽然新郎不是你;但是,每每都是你来帮设计师修修补补设计失误,看上去是个好人,实际上,是拉低了整个团队的效率,你的时间应该用在更大价值的事情上。

当然,并不是要你直接撒手不管,而是直接授之以渔,你要做的事情,是好好地准备一次分享培训,在例会的时候给各位设计师GGMM科普下,首先SVG前程似锦,大家了解下面的技能以后好混饭吃;其次,大家作图要多多留心,路径细节,少用锚点;最后,传授AI处理细节和SVG导出大法。然后,把导出SVG的工作全部交给设计师同事,设计师玩AI很多年了,比你前端半吊子要强很多,效率也会高很多,物尽其用。身为前端的我们,就要做前端应该做的事情,什么呢,就是对设计师给我们的初稿SVG进行web化精简,当然是通过技术手段。

为何需要精简呢?因为,很多矢量编辑器,或者类似AI这样的矢量软件,导出来的SVG文件都会有很多其他冗余信息,举个例子,下面截图框框的这些鬼:

虽然icomoon.io这样的在线平台自动精简。

但是,1. 如果我们想要直接使用SVG文件怎么办?2. SVG文件需要频繁改动怎么办,每次都上传一边再下载很烦的?3. 你保证其他同事其他团队也乐于使用这些平台,而不是直接根植于项目中?

考虑到这些点,我们有必要在本地有一个可以方便对SVG进行精简的工具,最好,AI保存好,直接就出来精简版。有吗?有,就是本文要介绍的svgo, 精挑细选,业界比较认可,大家比较喜欢的SVG处理工具。

二、svgo简介

项目地址:https://github.com/svg/svgo, 目前4000+星星~ 随着SVG的高歌猛进,以后一定会平稳增加。

svgo是SVG Optimizer的简写,不过,我似乎更喜欢理解为SVG, go! 这是一个基于Nodejs的SVG文件优化工具。

为什么需要?
因为SVG文件,尤其从各种变假期导出的SVG,通常包含大量的无用信息,例如编辑器源信息,注释,因此元素,默认或者非最优值,以及其他一些不会影响渲染结果的可以移除或转换的内容。

能做什么?
SVGO基于插件模式构建,基本上所有的优化都是一个分离的插件。

目前有:

  • [ cleanupAttrs ] 清除换行,结束符以及重复空格
  • [ removeDoctype ] 删除文档声明
  • [ removeXMLProcInst ] 删除XML处理指令
  • [ removeComments ] 删除注释
  • [ removeMetadata ] 删除源信息
  • [ removeTitle ] 删除</code>标题(默认禁用)</li> <li>[ removeDesc ] 删除<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;"><desc></code>描述 (默认只有<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">desc</code>元素无意义的时候)</li> <li>[ removeUselessDefs ] 删除<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;"><defs></code>元素如果没有<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">id</code></li> <li>[ removeEditorsNSData ] 删除编辑器的命名空间,元素和属性</li> <li>[ removeEmptyAttrs ] 删除空属性</li> <li>[ removeHiddenElems ] 删除隐藏元素</li> <li>[ removeEmptyText ] 删除隐藏文本元素</li> <li>[ removeEmptyContainers ] 删除空的容器元素</li> <li>[ removeViewBox ]如果可以,删除<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">viewBox</code>属性(默认进行)</li> <li>[ cleanUpEnableBackground ] 如果可以,删除<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">enable-background</code>属性</li> <li>[ minifyStyles ] 使用CSSO最小化元素的<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;"><style></code>内容</li> <li>[ convertStyleToAttrs ] 转换样式为属性值</li> <li>[ convertColors ] 转换颜色(从<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">rgb()</code>到<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">#rrggbb</code>, 从 <code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">#rrggbb</code>到<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">#rgb</code>)</li> <li>[ convertPathData ] 将路径数据转换为的相对路径和绝对路径中简短的那一个,过滤无用的分隔符,智能四舍五入以及其他很多处理</li> <li>[ convertTransform ] 合并多个transforms为一个, 转换矩阵为短命名,以及其他很多处理</li> <li>[ removeUnknownsAndDefaults ] 删除未知的元素内容和属性,删除值为默认值的属性/li></li> <li>[ removeNonInheritableGroupAttrs ] 删除不可基础组的”presentation”属性</li> <li>[ removeUselessStrokeAndFill ] 删除无用的<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">stroke</code>和<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">fill</code>属性</li> <li>[ removeUnusedNS ] 删除没有使用的命名空间声明</li> <li>[ cleanupIDs ] 删除没有使用或者压缩使用的IDs</li> <li>[ cleanupNumericValues ] 数值四舍五入提高精度, 删除默认的’px’单位</li> <li>[ moveElemsAttrsToGroup ] 移动元素属性们到外面包裹的组元素上</li> <li>[ moveGroupAttrsToElems ] 移动一些组属性到内容元素上</li> <li>[ collapseGroups ] 合并无用的组</li> <li>[ removeRasterImages ] 删除点阵图像(默认禁用)</li> <li>[ mergePaths ] 合并多个路径为一个</li> <li>[ convertShapeToPath ] 转换一些基本图形为路径</li> <li>[ sortAttrs ] 元素属性排序使其像诗歌一样易读(默认禁用)</li> <li>[ transformsWithOnePath ] 通过里面一条路径实现transforms, 真实宽度剪裁, 垂直居中对齐以及SVG缩放拉伸(默认禁用)</li> <li>[ removeDimensions ] 如果<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">viewBox</code>就是当下尺寸限定,删除<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">width</code>/<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">height</code>属性(默认禁用)</li> <li>[ removeAttrs ] 通过正则删除属性 (默认禁用)</li> <li>[ addClassesToSVGElement ] 添加类名给外面的<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;"><svg></code>元素 (默认禁用)</li> <li>[ removeStyleElement ] 删除元素的<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;"><style></code> (默认禁用)</li> </ul> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);"><strong>如何使用?</strong><br>首先是安装,连我都驾轻就熟了,如下:</p> <div class="highlight highlight-source-shell" style="color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);"> <pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ [sudo] npm install -g svgo</pre> </div> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">使用:</p> <pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;"> svgo [OPTIONS] [ARGS] Options: -h, --help : Help 帮助 -v, --version : Version版本 -i INPUT, --input=INPUT : 输入的文件, "-" 为标准输入 -s STRING, --string=STRING : 输入SVG数据字符串 -f FOLDER, --folder=FOLDER : 输入的文件夹,会优化与重写所有的*.svg文件 -o OUTPUT, --output=OUTPUT : 输入的文件或文件夹 (默认同输入), "-" 标准输出 -p PRECISION, --precision=PRECISION : 设置数字的小数部分,重写插件参数 --config=CONFIG : 配置文件扩展或替换默认设置 --disable=DISABLE : 根据名字禁用插件 --enable=ENABLE : 根据名字开启插件 --datauri=DATAURI : 输入文件以Data URI字符串形式(base64, URI encoded or unencoded) -q, --quiet : 仅输出错误信息,不包括正常状态消息 --pretty : 让SVG漂亮的打印 --show-plugins : 显示可用和存在的插件 Arguments: INPUT : 别名 --input OUTPUT : 别名 --output </pre> <ul style="margin-bottom:0px;padding-left:35px;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);"> <li><p style="margin-top:16px;list-style-type:none;">单个文件使用举例:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo test.svg</pre><p style="margin-top:16px;list-style-type:none;">或者:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo test.svg test.min.svg</pre></li> <li><p style="margin-top:16px;list-style-type:none;">使用STDIN / STDOUT(标准输入输出):</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ cat test.svg | svgo -i - -o - > test.min.svg</pre></li> <li><p style="margin-top:16px;list-style-type:none;">文件夹举例:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo -f ../path/to/folder/with/svg/files</pre><p style="margin-top:16px;list-style-type:none;">或者:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo -f ../path/to/folder/with/svg/files -o ../path/to/folder/with/svg/output </pre></li> <li><p style="margin-top:16px;list-style-type:none;">使用字符串:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo -s '<svg version="1.1">test</svg>' -o test.min.svg </pre><p style="margin-top:16px;list-style-type:none;">或者甚至是Data URI base64:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo -s 'data:image/svg+xml;base64,…' -o test.min.svg </pre></li> <li><p style="margin-top:16px;list-style-type:none;">SVGZ使用:</p><p style="margin-top:16px;list-style-type:none;">从<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">.svgz</code>到<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">.svg</code>:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ gunzip -c test.svgz | svgo -i - -o test.min.svg </pre><p style="margin-top:16px;list-style-type:none;">从.svg到.svgz:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo test.svg -o - | gzip -cfq9 > test.svgz </pre></li> <li><p style="margin-top:16px;list-style-type:none;">带操作界面的GUI – svgo-gui</p></li> <li>作为web app – SVGOMG</li> <li>作为Nodejs模块 – examples</li> <li>作为Grunt任务 – grunt-svgmin</li> <li>作为Gulp任务 – gulp-svgmin</li> <li>作为Mimosa模块 – mimosa-minify-svg</li> <li>作为OSX文件夹Action – svgo-osx-folder-action</li> <li>作为webpack loader – image-webpack-loader</li> </ul> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">这里出现了一个<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">svgz</code>格式的文件,这是什么鬼呢?实际上是SVG的gzip压缩文件,Illustrator是可以直接导出的,如下示意:<br></p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">根据我的测试,Chrome浏览器是可以直接打开的,FireFox浏览器不行(FireFox 44),直接下载,而IE11浏览器是个大白板,一看控制台,报错了:<br> </p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">虽然svgz的压缩比很厉害,是真正意义上的压缩,但是,实际上,应用价值并不大,因为类似JS, CSS字符集类型文本文件,可以通过服务器开启gzip实现传输,SVG也在其中,SO, …</p> <h3 style="font-size:1.5em;padding:0px;margin-top:18px;margin-bottom:0px;font-family:'Source Han Sans CN', 'PingFang SC', 'Myriad Pro', 'Hiragino Sans GB', SimHei;color:rgb(51,51,51);background-color:rgb(255,255,255);">三、svgo初体验</h3> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">看上去很厉害,我就先自己试用下,看看是不是用来解决自己的需求的。如下代码截图:</p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);"></p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">就是所有SVG精简到另外一个平级的名为output的文件夹,于是乎,得到:<br></p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">从精简效率来看,很惊人,有50%~60%的精简率。</p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">拿其中一个SVG代码(就是svgz示意的钩钩)前后对比下吧:</p> <div class="zxx_code" style="color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);"> <pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;"><?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="200px" height="200px" viewBox="0 0 200 200" enable-background="new 0 0 200 200" xml:space="preserve"> <path fill="#FFFFFF" d="M147.566,67.575c-3.979-3.24-4.355-3.337-8.9-5.64c-2.043-1.043-5.057,1.646-6.529,3.636L92,117.73 L65.85,83.972c-1.478-1.988-4.205-2.72-6.25-1.782c-4.658,2.408-4.19,2.327-8.168,5.467c-1.817,1.466-1.932,4.082-0.456,6.065 c0,0,28.183,36.5,31.592,40.896c5,6.274,14.09,5.965,18.864,0c3.521-4.498,46.59-61.078,46.59-61.078 C149.499,71.55,149.385,68.937,147.566,67.575z"/> </svg> </pre> </div> <div class="zxx_code" style="color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);"> <pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;"><svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200"><path fill="#FFF" d="M147.566 67.575c-3.98-3.24-4.355-3.337-8.9-5.64-2.043-1.043-5.057 1.646-6.53 3.636L92 117.73 65.85 83.972c-1.478-1.988-4.205-2.72-6.25-1.782-4.658 2.408-4.19 2.327-8.168 5.467-1.817 1.466-1.932 4.082-.456 6.065 0 0 28.183 36.5 31.592 40.896 5 6.274 14.09 5.965 18.864 0 3.52-4.498 46.59-61.078 46.59-61.078 1.477-1.99 1.363-4.603-.456-5.965z"/></svg></pre> </div> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">恩,有种胖妞变靓妹的即视感:<br></p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">喔噢,很酷啊,正是自己想要的,而且貌似还可以通过设置让值保留2位小数,又可以进一步精简大小,不过现在这样已经足够了!</p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">好的,不错,这就加入项目的豪华午餐阵营!</p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">恭喜你,svgo, 你得到了评委的一致认可!<img src="http://img.e-com-net.com/image/info8/d0b94462e2e847a6991fc032a49d7568.gif" style="border:0px;" alt="" width="24" height="24"></p> <br> </div> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1177019553213919232"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(svg)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1892403467411058688.htm" title="网页中加载 SVG 的七大方式" target="_blank">网页中加载 SVG 的七大方式</a> <span class="text-muted">前端熊猫</span> <a class="tag" taget="_blank" href="/search/Svg/1.htm">Svg</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/svg/1.htm">svg</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a> <div>一、直接使用标签加载外部SVG文件优点:简单易用:与加载其他图片格式(如PNG、JPEG)相同。浏览器支持良好:现代浏览器普遍支持。可缓存:SVG文件可以被浏览器缓存,减少重复请求。缺点:无法直接操作SVG内部元素:如果需要对SVG内部的元素进行交互或样式修改,这种方法不适用。适用场景:静态图像展示:仅需要展示SVG图像,不需要与之交互。二、将SVG作为CSS背景图片.icon{width:100</div> </li> <li><a href="/article/1892312438930468864.htm" title="CSS 修改 SVG图标的颜色" target="_blank">CSS 修改 SVG图标的颜色</a> <span class="text-muted">小达学徒</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/svg/1.htm">svg</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E6%A0%87%E9%A2%9C%E8%89%B2%E6%94%B9%E5%8F%98/1.htm">图标颜色改变</a> <div>方法1、利用filter中的drop-shadow给icon加样式(利用原图标的阴影区域,同时将原图标移动超过之前父元素范围)filter:drop-shadow(red80px0);transform:translateX(-80px);给父元素加样式(父元素超范围隐藏,正好把原图标的隐藏掉,显示阴影区域)overflow:hidden;filter的drop-shadow标准用法drop-sh</div> </li> <li><a href="/article/1892310800052318208.htm" title="i css svg,如何设置 CSS 背景图中的 SVG 的颜色" target="_blank">i css svg,如何设置 CSS 背景图中的 SVG 的颜色</a> <span class="text-muted">魔法少女皮皮瞎</span> <a class="tag" taget="_blank" href="/search/i/1.htm">i</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/svg/1.htm">svg</a> <div>ColoringSVGsinCSSBackgroundImages如何设置CSS背景图中的SVG的颜色IloveusingSVGinCSSbackgroundimagesbutitsucksthatyoucan'talterthefillcoloreasilywithinyourCSS.Hereareafewwaysaroundthat.在CSS背景中我喜欢用SVG,但是,这会导致你无法用CSS很</div> </li> <li><a href="/article/1892308146966294528.htm" title="css给网页添加 黑白滤镜" target="_blank">css给网页添加 黑白滤镜</a> <span class="text-muted">nqxcwl</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E7%BB%99%E7%BD%91%E9%A1%B5%E6%B7%BB%E5%8A%A0%E9%BB%91%E7%99%BD%E6%BB%A4%E9%95%9C/1.htm">给网页添加黑白滤镜</a> <div>/*给网页添加黑白滤镜*/html{/*兼容FF*/filter:url("data:image/svgxml;utf8,#grayscale");/*兼容IE内核*/filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);/*兼容其它,谷歌之类的*/-webkit-filter:grayscale(1);}</div> </li> <li><a href="/article/1892136749694513152.htm" title="HTMl5新增特性有哪些?" target="_blank">HTMl5新增特性有哪些?</a> <span class="text-muted">番茄牛腩汤</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>(1)新增了语义化标签(2)新增了音频视频标签(3)新增了canvas和svg绘图(4)新增了地理定位(navigator.geolocation)(5)新增了拖拽API(drapable)(6)新增了多线程技术webworker(7)新增了即时通讯websocket</div> </li> <li><a href="/article/1891058239622148096.htm" title="轻量级CAD编辑器CADEditorX发布15.2新版本,新增3D模型爆炸视图新工具等" target="_blank">轻量级CAD编辑器CADEditorX发布15.2新版本,新增3D模型爆炸视图新工具等</a> <span class="text-muted">CodeCraft Studio</span> <a class="tag" taget="_blank" href="/search/3D%2F2D/1.htm">3D/2D</a><a class="tag" taget="_blank" href="/search/CAD/1.htm">CAD</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86/1.htm">图像处理</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E8%BE%91%E5%99%A8/1.htm">编辑器</a><a class="tag" taget="_blank" href="/search/3d/1.htm">3d</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a> <div>CADEditorX是一个ActiveX组件,用于在支持ActiveX和COM技术的任何开发环境中,将CAD功能添加到网页或正在开发的应用程序中。同时可以查看、编辑、转换、打印和测量DWG、DXF、SVG、HPGL、PDF、STEP、IGES、STL和其他CAD文件。CADEditorX15.2版本现已全新发布,包含许多增强功能和有价值的新功能。下面,让我们看看新版本都有哪些更新:CADEdito</div> </li> <li><a href="/article/1890622069893296128.htm" title="vue3使用svg图标的方式总结" target="_blank">vue3使用svg图标的方式总结</a> <span class="text-muted">lizi88888</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>1.使用标签可以直接在Vue模板中使用标签来插入SVG图标代码。将SVG图标代码复制到模板中,并根据需要添加样式和属性。1234567891011121314.icon{width:24px;height:24px;fill:currentColor;}2.使用Vue组件可以将SVG图标封装为Vue组件,以便在应用程序中多次使用。创建一个新的Vue组件,并在模板中使用标签来插入SVG图标代码。12</div> </li> <li><a href="/article/1890311346516455424.htm" title="开发应用程序时调用ISVG和ISVA减少工作量探讨" target="_blank">开发应用程序时调用ISVG和ISVA减少工作量探讨</a> <span class="text-muted">自由鬼</span> <a class="tag" taget="_blank" href="/search/IBM%E4%BA%A7%E5%93%81%E6%8A%80%E6%9C%AF/1.htm">IBM产品技术</a><a class="tag" taget="_blank" href="/search/Java%E7%A8%8B%E5%BA%8F/1.htm">Java程序</a><a class="tag" taget="_blank" href="/search/IT%E5%BA%94%E7%94%A8%E6%8E%A2%E8%AE%A8/1.htm">IT应用探讨</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/ibm/1.htm">ibm</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%82%B9%E7%99%BB%E5%BD%95/1.htm">单点登录</a><a class="tag" taget="_blank" href="/search/%E7%BB%9F%E4%B8%80%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86/1.htm">统一用户管理</a> <div>一、可行性分析IBMSecurityVerifyGovernance(ISVG)和IBMSecurityVerifyAccess(ISVA)的集成可以有效减少第三方应用程序的开发工作量,尤其是在统一身份管理和单点登录(SSO)方面。ISVG主要负责身份治理和合规性管理,而ISVA负责身份验证、授权和访问控制。因此,将两者结合起来,可以提供一个完整的解决方案,简化第三方应用程序的身份管理工作。实现步</div> </li> <li><a href="/article/1889929263444979712.htm" title="vant4组件库van-tabbar底部栏使用" target="_blank">vant4组件库van-tabbar底部栏使用</a> <span class="text-muted">LiliRush</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>在van-tabbar-item标签属性to值为要跳转的路由,增加图标使用命名插槽#icon,当点击是获取插槽active的值,当点击这个选择时获取active是true,相反不点击时是false,根据active更改组件cp-icon传值从而更改当前的图标。ps:cp-icon图标组件在使用svg插件</div> </li> <li><a href="/article/1889485446963064832.htm" title="前端-导出png,jpg,pptx,svg" target="_blank">前端-导出png,jpg,pptx,svg</a> <span class="text-muted">zhenryx</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>两款比较主流的截图工具特性dom-to-imagehtml2canvas体积几KB几十KB速度非常快较慢浏览器兼容性与所有现代浏览器兼容与部分浏览器兼容性较差跨域截图不支持支持自定义截图区域不支持支持CSS属性支持不支持某些CSS属性支持所有CSS属性dom-to-image该库自2020年后基本处于维护状态,更新频率较低。这意味着它可能不会再添加新的功能,更多是对现有问题进行修复。html-to</div> </li> <li><a href="/article/1889354056502145024.htm" title="react入门笔记" target="_blank">react入门笔记</a> <span class="text-muted">2201_75694264</span> <a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>1.JSX的用法functionApp(){letmsg='react的插值';return({msg})}jsx中也可以绑定属性,绑定属性时不能加引号functionApp(){leturl='https://baikebcs.bdimg.com/baike-react/common/logo-baike.svg';return()}jsx中也支持一些简单的js运算,也支持条件运算符(react</div> </li> <li><a href="/article/1888968629412753408.htm" title="最好的svg使用方案(个人觉得)" target="_blank">最好的svg使用方案(个人觉得)</a> <span class="text-muted"></span> <div>方案1:img将svg作为img的srcimporticonfrom'./xxx.svg'无法很好的自定义尺寸,图片会模糊(使用了img后,会丧失svg的特性)无法指定颜色方案2:插件添加vite-svg-loader插件找了好几个常见的插件,比如vite-plugin-svg-icons、vite-plugin-svg-loader、unplugin-icons、iconify,感觉都不太好用,</div> </li> <li><a href="/article/1888263543896207360.htm" title="分享一些免费可商用的SVG资源网站" target="_blank">分享一些免费可商用的SVG资源网站</a> <span class="text-muted">摸五休二</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a> <div>这里是一些提供免费且可商用的SVG文件的资源网站,你可以自由下载并在项目中使用:1.Undraw特点:提供丰富的插图,简洁而现代,所有插图都可以自定义颜色,适合各种场景。许可:完全免费,无需署名,允许商用。2.Openclipart特点:拥有庞大的公共领域剪贴画库,适合各种用途。许可:所有图像都在公共领域,完全免费,无需署名。3.Flaticon特点:提供丰富的图标库,大多数图标可以免费下载为SV</div> </li> <li><a href="/article/1888204166065614848.htm" title="APK打包优化-图片、资源、so、混淆" target="_blank">APK打包优化-图片、资源、so、混淆</a> <span class="text-muted">Forget_Sky</span> <a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E6%89%93%E5%8C%85%E4%BC%98%E5%8C%96/1.htm">打包优化</a><a class="tag" taget="_blank" href="/search/%E6%B7%B7%E6%B7%86/1.htm">混淆</a><a class="tag" taget="_blank" href="/search/%E8%B5%84%E6%BA%90%E4%BC%98%E5%8C%96/1.htm">资源优化</a><a class="tag" taget="_blank" href="/search/so%E5%BA%93%E4%BC%98%E5%8C%96/1.htm">so库优化</a> <div>1.图片优化(1)图标使用矢量图(svg转成android支持的vector)vector5.0+兼容配置android{defaultConfig{vectorDrawables.useSupportLibrary=true}}//app:srcCompat替换android:srcapp:srcCompat="@drawable/back"//着色器(改变矢量图的颜色)android:tint</div> </li> <li><a href="/article/1886770575716708352.htm" title="unocss 添加支持使用本地 svg 预设图标,并支持更改大小" target="_blank">unocss 添加支持使用本地 svg 预设图标,并支持更改大小</a> <span class="text-muted">TangAcrab</span> <a class="tag" taget="_blank" href="/search/unocss/1.htm">unocss</a><a class="tag" taget="_blank" href="/search/miniapp/1.htm">miniapp</a> <div>安装pnpminstall@iconify/utils在配置文件unocss.config.ts:presets>presetIcons选项中通过FileSystemIconLoader加载本地图标,并指定目录。importpresetWeappfrom'unocss-preset-weapp'import{extractorAttributify,transformerClass}from'un</div> </li> <li><a href="/article/1886611302160330752.htm" title="Three.js + React + Echart(折线图 光线流动效果,柱状图数据动态更新动画) + Svga-Web应用之数据大屏(适配1920*1080 2560*1440 3840*2160)" target="_blank">Three.js + React + Echart(折线图 光线流动效果,柱状图数据动态更新动画) + Svga-Web应用之数据大屏(适配1920*1080 2560*1440 3840*2160)</a> <span class="text-muted">ConstSuccess</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%9E%B6%E6%9E%84/1.htm">前端架构</a><a class="tag" taget="_blank" href="/search/3D%E6%A8%A1%E5%9E%8B/1.htm">3D模型</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%A4%A7%E5%B1%8F/1.htm">数据大屏</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a> <div>Web应用之数据大屏一、技术栈React17.0.0搭建脚手架Eahcrt常规图表Svga动画3D模型-Three.Js大屏适配-目标大屏(4K-3840*2160)二、React17.0.0脚手架搭建npxcreate-react-appmy-appcdmy-appnpmstart具体详细情况,自行官网查看React官网三、Echarts常规图表1、echarts-for-reactEchart</div> </li> <li><a href="/article/1886339656363077632.htm" title="HTML5 Canvas 与 SVG:让网页图形与动画活跃起来" target="_blank">HTML5 Canvas 与 SVG:让网页图形与动画活跃起来</a> <span class="text-muted">吴师兄大模型</span> <a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Canvas/1.htm">Canvas</a><a class="tag" taget="_blank" href="/search/SVG/1.htm">SVG</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E9%A1%B5%E5%9B%BE%E5%BD%A2%E4%B8%8E%E5%8A%A8%E7%94%BB/1.htm">网页图形与动画</a><a class="tag" taget="_blank" href="/search/HTML5/1.htm">HTML5</a> <div>系列文章目录01-从零开始学HTML:构建网页的基本框架与技巧02-HTML常见文本标签解析:从基础到进阶的全面指南03-HTML从入门到精通:链接与图像标签全解析04-HTML列表标签全解析:无序与有序列表的深度应用05-HTML表格标签全面解析:从基础到高级优化技巧06-HTML表单深度解析:GET和POST提交方法07-HTML表单控件类型大全:文本框、密码框、文件上传全掌握08-前端表单验</div> </li> <li><a href="/article/1886221991690694656.htm" title="VUE代码架构浅谈" target="_blank">VUE代码架构浅谈</a> <span class="text-muted">tongliuwei</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>VUE目录架构概述-mockmock可以不需要后台,自动拦截ajax返回测试数据-public公共目录-srcapi用于存放网络请求文件的目录index.tsxxx目录assets存放静态文件的目录components存放自定义组件的目录filter过滤器的使用(例如时间data格式化)index.tsicons图标库引入svgindex.tslang语言包引入(用于项目中多语言切换)en.jsz</div> </li> <li><a href="/article/1886132968116776960.htm" title="HTML5+SVG+CSS3 雪中点亮的圣诞树" target="_blank">HTML5+SVG+CSS3 雪中点亮的圣诞树</a> <span class="text-muted">坏男孩!</span> <a class="tag" taget="_blank" href="/search/css3/1.htm">css3</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div>HTML5+SVG+CSS3雪中点亮的圣诞树源码下载地址:HTML5+SVG+CSS3雪中点亮的圣诞树css3:body{background:-webkit-linear-gradient(top,#235,#22240%,#fff50%,#fff);background:linear-gradient(tobottom,#235,#22240%,#fff50%,#fff);overflow:h</div> </li> <li><a href="/article/1885786960333697024.htm" title="CSS3优秀动画代码示例" target="_blank">CSS3优秀动画代码示例</a> <span class="text-muted">天涯学馆</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%89%8D%E7%AB%AF%26amp%3B%E7%A7%BB%E5%8A%A8%E7%AB%AF%E5%85%A8%E6%A0%88%E6%9E%B6%E6%9E%84/1.htm">大前端&移动端全栈架构</a><a class="tag" taget="_blank" href="/search/css3/1.htm">css3</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div>目录旋转立方体悬停效果动画路径动画纯CSS进度条文字打字机效果3D翻转卡片SVG路径跟随动画SVG心跳动画</div> </li> <li><a href="/article/1885473514643845120.htm" title="【OpenGL】使用 python + Qt + OpenGL 的现代渲染" target="_blank">【OpenGL】使用 python + Qt + OpenGL 的现代渲染</a> <span class="text-muted">无水先生</span> <a class="tag" taget="_blank" href="/search/3D%E5%9B%BE%E5%BD%A2%E6%B8%B2%E6%9F%93%E5%92%8COpenGL%E7%BC%96%E7%A8%8B/1.htm">3D图形渲染和OpenGL编程</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A2%E5%AD%A6/1.htm">计算机图形学</a> <div>伴随资源目录一、说明二、关于PyQt6.x2.1QOpenGLWidget详细说明2.2绘画技巧三、PyOpenGL四、OpenGL管线五、Python集成开发环境5.1Emacs配置5.2pycharm环境六、你好,OpenGL!七、QGL控件八、平截头体.svg九、定义几何9.1立即模式与保留模式9.2使用VBO定义Cube十、渲染立方体十一、渲染循环十二、添加旋转滑块一、说明在本教程中,我们</div> </li> <li><a href="/article/1885020598439047168.htm" title="selenium定位svg元素(原来如此简单)" target="_blank">selenium定位svg元素(原来如此简单)</a> <span class="text-muted">sineiy</span> <a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/pytest/1.htm">pytest</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a> <div>1、前言最近在实现UI自动化测试,发现有些元素定位不了,特此来记录一下,也许有不对的地方,欢迎指正。我说定位不了的元素正是svg,在网上查了一通,发现也有很多小伙伴遇到这个问题。然后试了各种方法,什么By.CLASS_NAME;By.CSS_SELECTOR等等都定位不了,后面是使用了Selenium库中的ActionChains类来模拟鼠标点击操作才把这个问题解决了。2、网页结构先来看一下网页结</div> </li> <li><a href="/article/1883347990924554240.htm" title="BPMN.js详解" target="_blank">BPMN.js详解</a> <span class="text-muted">GISer_Jinger</span> <a class="tag" taget="_blank" href="/search/Javascript/1.htm">Javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%9F%BA%E7%A1%80/1.htm">前端基础</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE/1.htm">项目</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a> <div>bpmn.js是一个基于JavaScript的开源库,它允许开发者在Web应用程序中创建、查看和编辑BPMN2.0流程图。以下是对bpmn.js的详细解析:一、基本概念与功能定义:bpmn.js是bpmn-io团队开发的一个JavaScript库,它专注于BPMN(业务流程模型和标记法)2.0标准的实现。主要功能:渲染BPMN图表:bpmn.js能够将BPMN2.0的XML文件渲染成SVG格式的图</div> </li> <li><a href="/article/1883319742844956672.htm" title="JS在HTML页面内动态创建SVG元素" target="_blank">JS在HTML页面内动态创建SVG元素</a> <span class="text-muted">一粒马豆</span> <a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96/1.htm">数据可视化</a><a class="tag" taget="_blank" href="/search/SVG/1.htm">SVG</a><a class="tag" taget="_blank" href="/search/JS/1.htm">JS</a><a class="tag" taget="_blank" href="/search/D3/1.htm">D3</a><a class="tag" taget="_blank" href="/search/WEB/1.htm">WEB</a> <div>最近在学习数据可视化,深入了解了如何在网页上实现数据的动态可视化。比如D3.JS主要应用JS在HTML页面内动态生成SVG元素并绑定数据。以下是我的例程://通过createElementNS创建svg元素并设置属性varsvg=document.createElementNS('http://www.w3.org/2000/svg','svg');svg.setAttribute("style"</div> </li> <li><a href="/article/1881785346035871744.htm" title="Python(四)——SVG 图坐标轴数字和其他文本设置总结" target="_blank">Python(四)——SVG 图坐标轴数字和其他文本设置总结</a> <span class="text-muted">八年。。</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>在学术论文中,图像的质量和规范性直接影响文章的专业性和表达效果。尤其是在使用Python绘制SVG图时,图像的字体选择、大小设置、以及整体样式需要符合期刊或会议的要求。这不仅能提升视觉呈现的清晰度,还能增强论文内容的可读性和说服力。因此,合理设置坐标轴字体(如数字使用“TimesNewRoman”、文字使用“宋体”)和调整图像细节是学术制图中不可忽视的重要环节。1.设置全局字体frommatplo</div> </li> <li><a href="/article/1880155672683802624.htm" title="2024最新前端面试题(八股文)一阶段总结(html,css)!!!!新手必看必背!通俗易通!全面!全是干货!" target="_blank">2024最新前端面试题(八股文)一阶段总结(html,css)!!!!新手必看必背!通俗易通!全面!全是干货!</a> <span class="text-muted">沐光M</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">前端面试题</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/es6/1.htm">es6</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>1.网络中使用最多的图片格式有哪些•gif支持动画,只有全透明和不透明两种模式,只有256种颜色,适用于简单动画、徽标和简单图形等应用场景。•jpeg常见格式,采用有损压缩算法,保持图像质量的同时减小文件大小,体积较小,不支持透明,不支持动画•png采用无损压缩算法,体积也相对较小,支持透明背景,不支持动画•svg一般会保存颜色及形状相对简单的图片,可任意放大图形显示,边缘异常清晰•BMP画质最好</div> </li> <li><a href="/article/1879895090017660928.htm" title="Python实现系统桌面时钟" target="_blank">Python实现系统桌面时钟</a> <span class="text-muted">也是醉了醉了</span> <div>用Python+PyQT写的一个系统桌面时钟,刚学习Python,写的比较简陋,但是基本的功能还可以。功能:①窗体在应用程序最上层,不用但是打开其他应用后看不到时间②左键双击全屏,可以做小屏保使用,再次双击退出全屏。③系统托盘图标,主要参考PyQt4源码目录中的PyQt4\examples\desktop\systray下的程序④鼠标右键,将程序最小化使用时需要heart.svg放在源代码同级目录</div> </li> <li><a href="/article/1835373236217540608.htm" title="360前端星计划-动画可以这么玩" target="_blank">360前端星计划-动画可以这么玩</a> <span class="text-muted">马小蜗</span> <div>动画的基本原理定时器改变对象的属性根据新的属性重新渲染动画functionupdate(context){//更新属性}constticker=newTicker();ticker.tick(update,context);动画的种类1、JavaScript动画操作DOMCanvas2、CSS动画transitionanimation3、SVG动画SMILJS动画的优缺点优点:灵活度、可控性、性能</div> </li> <li><a href="/article/1835326359614877696.htm" title="svg图片兼容性和用法优缺点" target="_blank">svg图片兼容性和用法优缺点</a> <span class="text-muted">独行侠_ef93</span> <div>svg图片的使用方法第一次来认认真真的研究了下svg图片,之前只是在网上见过,但都是一晃而过也没当回事,最近网站改版看到同事有用到svg格式的图片,想想自己干了几年的重构也没用过,这些细节的知识是应该好好研究研究了。暂时还没研究得完全透切,先记下目前为止所看到的吧不然又给忘了。svg可缩放矢量图形(ScalableVectorGraphics),顾名思义就是任意改变其大小也不会变形,是基于可扩展标</div> </li> <li><a href="/article/1835118231979913216.htm" title="HighCharts图表自动化简介" target="_blank">HighCharts图表自动化简介</a> <span class="text-muted">知识的宝藏</span> <a class="tag" taget="_blank" href="/search/Selenium%E9%AB%98%E7%BA%A7%E7%AF%87/1.htm">Selenium高级篇</a><a class="tag" taget="_blank" href="/search/Selenium%E5%9B%BE%E8%A1%A8%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">Selenium图表自动化测试</a><a class="tag" taget="_blank" href="/search/highcharts%E5%9B%BE%E8%A1%A8%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">highcharts图表自动化</a><a class="tag" taget="_blank" href="/search/Selenium%E5%9B%BE%E8%A1%A8%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">Selenium图表自动化</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E8%A1%A8%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">图表自动化测试</a><a class="tag" taget="_blank" href="/search/highcharts/1.htm">highcharts</a><a class="tag" taget="_blank" href="/search/Selenium/1.htm">Selenium</a> <div>什么是分析数据?在任何应用程序中捕获并以图形或图表形式显示的分析数据是任何产品或系统的关键部分,因为它提供了对实时数据的洞察。验证此类分析数据非常重要,因为不准确的数据可能会在报告中产生问题,并可能影响应用程序/系统的其他相关领域。什么是HighChart?Highcharts是一个用纯JavaScript编写的j基于SVG成图技术的图表库,提供了一种简单的方法来向您的网站或Web应用程序添加交互</div> </li> <li><a href="/article/67.htm" title="jvm调优总结(从基本概念 到 深度优化)" target="_blank">jvm调优总结(从基本概念 到 深度优化)</a> <span class="text-muted">oloz</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">虚拟机</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a> <div>JVM参数详解:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html   Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 </div> </li> <li><a href="/article/194.htm" title="【Scala十六】Scala核心十:柯里化函数" target="_blank">【Scala十六】Scala核心十:柯里化函数</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a> <div>本篇文章重点说明什么是函数柯里化,这个语法现象的背后动机是什么,有什么样的应用场景,以及与部分应用函数(Partial Applied Function)之间的联系   1. 什么是柯里化函数 A way to write functions with multiple parameter lists. For instance def f(x: Int)(y: Int) is a </div> </li> <li><a href="/article/321.htm" title="HashMap" target="_blank">HashMap</a> <span class="text-muted">dalan_123</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>HashMap在java中对很多人来说都是熟的;基于hash表的map接口的非同步实现。允许使用null和null键;同时不能保证元素的顺序;也就是从来都不保证其中的元素的顺序恒久不变。 1、数据结构     在java中,最基本的数据结构无外乎:数组 和 引用(指针),所有的数据结构都可以用这两个来构造,HashMap也不例外,归根到底HashMap就是一个链表散列的数据</div> </li> <li><a href="/article/448.htm" title="Java Swing如何实时刷新JTextArea,以显示刚才加append的内容" target="_blank">Java Swing如何实时刷新JTextArea,以显示刚才加append的内容</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9B%B4%E6%96%B0/1.htm">更新</a><a class="tag" taget="_blank" href="/search/swing/1.htm">swing</a><a class="tag" taget="_blank" href="/search/JTextArea/1.htm">JTextArea</a> <div>在代码中执行完textArea.append("message")后,如果你想让这个更新立刻显示在界面上而不是等swing的主线程返回后刷新,我们一般会在该语句后调用textArea.invalidate()和textArea.repaint()。 问题是这个方法并不能有任何效果,textArea的内容没有任何变化,这或许是swing的一个bug,有一个笨拙的办法可以实现</div> </li> <li><a href="/article/575.htm" title="servlet或struts的Action处理ajax请求" target="_blank">servlet或struts的Action处理ajax请求</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a> <div>其实处理ajax的请求非常简单,直接看代码就行了: //如果用的是struts //HttpServletResponse response = ServletActionContext.getResponse(); // 设置输出为文字流 response.setContentType("text/plain"); // 设置字符集 res</div> </li> <li><a href="/article/702.htm" title="FineReport的公式编辑框的语法简介" target="_blank">FineReport的公式编辑框的语法简介</a> <span class="text-muted">老A不折腾</span> <a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/%E5%85%AC%E5%BC%8F/1.htm">公式</a><a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a> <div>FINEREPORT用到公式的地方非常多,单元格(以=开头的便被解析为公式),条件显示,数据字典,报表填报属性值定义,图表标题,轴定义,页眉页脚,甚至单元格的其他属性中的鼠标悬浮提示内容都可以写公式。 简单的说下自己感觉的公式要注意的几个地方:   1.if语句语法刚接触感觉比较奇怪,if(条件式子,值1,值2),if可以嵌套,if(条件式子1,值1,if(条件式子2,值2,值3)</div> </li> <li><a href="/article/829.htm" title="linux mysql 数据库乱码的解决办法" target="_blank">linux mysql 数据库乱码的解决办法</a> <span class="text-muted">墙头上一根草</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B9%B1%E7%A0%81/1.htm">数据库乱码</a> <div>linux 上mysql数据库区分大小写的配置 lower_case_table_names=1 1-不区分大小写 0-区分大小写   修改/etc/my.cnf 具体的修改内容如下:   [client] default-character-set=utf8   [mysqld] datadir=/var/lib/mysql socket=/va</div> </li> <li><a href="/article/956.htm" title="我的spring学习笔记6-ApplicationContext实例化的参数兼容思想" target="_blank">我的spring学习笔记6-ApplicationContext实例化的参数兼容思想</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/Spring+3/1.htm">Spring 3</a> <div>ApplicationContext能读取多个Bean定义文件,方法是: ApplicationContext appContext = new ClassPathXmlApplicationContext( new String[]{“bean-config1.xml”,“bean-config2.xml”,“bean-config3.xml”,“bean-config4.xml</div> </li> <li><a href="/article/1083.htm" title="mysql 基准测试之sysbench" target="_blank">mysql 基准测试之sysbench</a> <span class="text-muted">annan211</span> <a class="tag" taget="_blank" href="/search/%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95/1.htm">基准测试</a><a class="tag" taget="_blank" href="/search/mysql%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95/1.htm">mysql基准测试</a><a class="tag" taget="_blank" href="/search/MySQL%E6%B5%8B%E8%AF%95/1.htm">MySQL测试</a><a class="tag" taget="_blank" href="/search/sysbench/1.htm">sysbench</a> <div>1 执行如下命令,安装sysbench-0.5: tar xzvf sysbench-0.5.tar.gz  cd sysbench-0.5  chmod +x autogen.sh  ./autogen.sh  ./configure --with-mysql --with-mysql-includes=/usr/local/mysql</div> </li> <li><a href="/article/1210.htm" title="sql的复杂查询使用案列与技巧" target="_blank">sql的复杂查询使用案列与技巧</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0/1.htm">函数</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E9%A1%B5/1.htm">数据分页</a><a class="tag" taget="_blank" href="/search/%E5%90%88%E5%B9%B6%E6%9F%A5%E8%AF%A2/1.htm">合并查询</a> <div>  本片博客使用的数据库表是oracle中的scott用户表;          -------------------  自然连接查询           查询 smith 的上司(两种方法) &</div> </li> <li><a href="/article/1337.htm" title="深入学习Thread类" target="_blank">深入学习Thread类</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a> <div>一.             线程的名字 下面来看一下Thread类的name属性,它的类型是String。它其实就是线程的名字。在Thread类中,有String getName()和void setName(String)两个方法用来设置和获取这个属性的值。 同时,Thr</div> </li> <li><a href="/article/1464.htm" title="JSON串转换成Map以及如何转换到对应的数据类型" target="_blank">JSON串转换成Map以及如何转换到对应的数据类型</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/fastjson/1.htm">fastjson</a><a class="tag" taget="_blank" href="/search/net.sf.json/1.htm">net.sf.json</a> <div>        在实际开发中,难免会碰到JSON串转换成Map的情况,下面来看看这方面的实例。另外,由于fastjson只支持JDK1.5及以上版本,因此在JDK1.4的项目中可以采用net.sf.json来处理。 一.fastjson实例 JsonUtil.java package com.study; impor</div> </li> <li><a href="/article/1591.htm" title="【RPC框架HttpInvoker一】HttpInvoker:Spring自带RPC框架" target="_blank">【RPC框架HttpInvoker一】HttpInvoker:Spring自带RPC框架</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>HttpInvoker是Spring原生的RPC调用框架,HttpInvoker同Burlap和Hessian一样,提供了一致的服务Exporter以及客户端的服务代理工厂Bean,这篇文章主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成   在 【RPC框架Hessian二】Hessian 对象序列化和反序列化一文中</div> </li> <li><a href="/article/1718.htm" title="【Mahout二】基于Mahout CBayes算法的20newsgroup的脚本分析" target="_blank">【Mahout二】基于Mahout CBayes算法的20newsgroup的脚本分析</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Mahout/1.htm">Mahout</a> <div>#!/bin/bash # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information re</div> </li> <li><a href="/article/1845.htm" title="nginx三种获取用户真实ip的方法" target="_blank">nginx三种获取用户真实ip的方法</a> <span class="text-muted">ronin47</span> <div>随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户的真实IP地址,如果后端是apache,请跳转到<apache获取用户真实IP地址>,如果是后端真实服务器是nginx,那么继续往下看。 实例环境: 用户IP 120.22.11.11 </div> </li> <li><a href="/article/1972.htm" title="java-判断二叉树是不是平衡" target="_blank">java-判断二叉树是不是平衡</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>参考了 http://zhedahht.blog.163.com/blog/static/25411174201142733927831/ 但是用java来实现有一个问题。 由于Java无法像C那样“传递参数的地址,函数返回时能得到参数的值”,唯有新建一个辅助类:AuxClass import ljn.help.*; public class BalancedBTree { </div> </li> <li><a href="/article/2099.htm" title="BeanUtils.copyProperties VS PropertyUtils.copyProperties" target="_blank">BeanUtils.copyProperties VS PropertyUtils.copyProperties</a> <span class="text-muted">诸葛不亮</span> <a class="tag" taget="_blank" href="/search/PropertyUtils/1.htm">PropertyUtils</a><a class="tag" taget="_blank" href="/search/BeanUtils/1.htm">BeanUtils</a> <div> BeanUtils.copyProperties VS  PropertyUtils.copyProperties  作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然;比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bean时,没有考虑到会将null转换为0,而后面的业</div> </li> <li><a href="/article/2226.htm" title="[金融与信息安全]最简单的数据结构最安全" target="_blank">[金融与信息安全]最简单的数据结构最安全</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>       现在最流行的数据库的数据存储文件都具有复杂的文件头格式,用操作系统的记事本软件是无法正常浏览的,这样的情况会有什么问题呢?        从信息安全的角度来看,如果我们数据库系统仅仅把这种格式的数据文件做异地备份,如果相同版本的所有数据库管理系统都同时被攻击,那么</div> </li> <li><a href="/article/2353.htm" title="vi区段删除" target="_blank">vi区段删除</a> <span class="text-muted">Cwind</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/vi/1.htm">vi</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E6%AE%B5%E5%88%A0%E9%99%A4/1.htm">区段删除</a> <div>区段删除是编辑和分析一些冗长的配置文件或日志文件时比较常用的操作。简记下vi区段删除要点备忘。   vi概述    引文中并未将末行模式单独列为一种模式。单不单列并不重要,能区分命令模式与末行模式即可。   vi区段删除步骤: 1. 在末行模式下使用:set nu显示行号 非必须,随光标移动vi右下角也会显示行号,能够正确找到并记录删除开始行</div> </li> <li><a href="/article/2480.htm" title="清除tomcat缓存的方法总结" target="_blank">清除tomcat缓存的方法总结</a> <span class="text-muted">dashuaifu</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a> <div>用tomcat容器,大家可能会发现这样的问题,修改jsp文件后,但用IE打开 依然是以前的Jsp的页面。 出现这种现象的原因主要是tomcat缓存的原因。 解决办法如下: 在jsp文件头加上 <meta http-equiv="Expires" content="0"> <meta http-equiv="kiben&qu</div> </li> <li><a href="/article/2607.htm" title="不要盲目的在项目中使用LESS CSS" target="_blank">不要盲目的在项目中使用LESS CSS</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/less/1.htm">less</a> <div> 如果你还不知道LESS CSS是什么东西,可以看一下这篇文章,是我一朋友写给新人看的《CSS——LESS》   不可否认,LESS CSS是个强大的工具,它弥补了css没有变量、无法运算等一些“先天缺陷”,但它似乎给我一种错觉,就是为了功能而实现功能。   比如它的引用功能 ? .rounded_corners{     </div> </li> <li><a href="/article/2734.htm" title="[入门]更上一层楼" target="_blank">[入门]更上一层楼</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/yii2/1.htm">yii2</a> <div>更上一层楼 通篇阅读完整个“入门”部分,你就完成了一个完整 Yii 应用的创建。在此过程中你学到了如何实现一些常用功能,例如通过 HTML 表单从用户那获取数据,从数据库中获取数据并以分页形式显示。你还学到了如何通过 Gii 去自动生成代码。使用 Gii 生成代码把 Web 开发中多数繁杂的过程转化为仅仅填写几个表单就行。 本章将介绍一些有助于更好使用 Yii 的资源: </div> </li> <li><a href="/article/2861.htm" title="Apache HttpClient使用详解" target="_blank">Apache HttpClient使用详解</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/httpclient/1.htm">httpclient</a><a class="tag" taget="_blank" href="/search/http%E5%8D%8F%E8%AE%AE/1.htm">http协议</a> <div>Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会</div> </li> <li><a href="/article/2988.htm" title="zxing二维码扫描功能" target="_blank">zxing二维码扫描功能</a> <span class="text-muted">gundumw100</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/zxing/1.htm">zxing</a> <div>经常要用到二维码扫描功能 现给出示例代码 import com.google.zxing.WriterException; import com.zxing.activity.CaptureActivity; import com.zxing.encoding.EncodingHandler; import android.app.Activity; import an</div> </li> <li><a href="/article/3115.htm" title="纯HTML+CSS带说明的黄色导航菜单" target="_blank">纯HTML+CSS带说明的黄色导航菜单</a> <span class="text-muted">ini</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/hovertree/1.htm">hovertree</a> <div>HoverTree带说明的CSS菜单:纯HTML+CSS结构链接带说明的黄色导航   在线体验效果:http://hovertree.com/texiao/css/1.htm代码如下,保存到HTML文件可以看到效果:   <!DOCTYPE html > <html > <head> <title>HoverTree</div> </li> <li><a href="/article/3242.htm" title="fastjson初始化对性能的影响" target="_blank">fastjson初始化对性能的影响</a> <span class="text-muted">kane_xie</span> <a class="tag" taget="_blank" href="/search/fastjson/1.htm">fastjson</a><a class="tag" taget="_blank" href="/search/%E5%BA%8F%E5%88%97%E5%8C%96/1.htm">序列化</a> <div>之前在项目中序列化是用thrift,性能一般,而且需要用编译器生成新的类,在序列化和反序列化的时候感觉很繁琐,因此想转到json阵营。对比了jackson,gson等框架之后,决定用fastjson,为什么呢,因为看名字感觉很快。。。   网上的说法:   fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。 </div> </li> <li><a href="/article/3369.htm" title="基于Mybatis封装的增删改查实现通用自动化sql" target="_blank">基于Mybatis封装的增删改查实现通用自动化sql</a> <span class="text-muted">mengqingyu</span> <a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a> <div>1.基于map或javaBean的增删改查可实现不写dao接口和实现类以及xml,有效的提高开发速度。 2.支持自定义注解包括主键生成、列重复验证、列名、表名等 3.支持批量插入、批量更新、批量删除 <bean id="dynamicSqlSessionTemplate" class="com.mqy.mybatis.support.Dynamic</div> </li> <li><a href="/article/3496.htm" title="js控制input输入框的方法封装(数字,中文,字母,浮点数等)" target="_blank">js控制input输入框的方法封装(数字,中文,字母,浮点数等)</a> <span class="text-muted">qifeifei</span> <a class="tag" taget="_blank" href="/search/javascript+js/1.htm">javascript js</a> <div>在项目开发的时候,经常有一些输入框,控制输入的格式,而不是等输入好了再去检查格式,格式错了就报错,体验不好。 /** 数字,中文,字母,浮点数(+/-/.) 类型输入限制,只要在input标签上加上 jInput="number,chinese,alphabet,floating" 备注:floating属性只能单独用*/     funct</div> </li> <li><a href="/article/3623.htm" title="java 计时器应用" target="_blank">java 计时器应用</a> <span class="text-muted">tangqi609567707</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/timer/1.htm">timer</a> <div>mport java.util.TimerTask;   import java.util.Calendar;   public class MyTask extends TimerTask {        private static final int </div> </li> <li><a href="/article/3750.htm" title="erlang输出调用栈信息" target="_blank">erlang输出调用栈信息</a> <span class="text-muted">wudixiaotie</span> <a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a> <div>在erlang otp的开发中,如果调用第三方的应用,会有有些错误会不打印栈信息,因为有可能第三方应用会catch然后输出自己的错误信息,所以对排查bug有很大的阻碍,这样就要求我们自己打印调用的栈信息。用这个函数:erlang:process_display (self (), backtrace).需要注意这个函数只会输出到标准错误输出。 也可以用这个函数:erlang:get_s</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>