gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

詳解用SVG給 favicon 添加標(biāo)識(shí)

怎么使用SVG給 favicon 添加標(biāo)識(shí)?下面本篇文章給大家介紹一下使用 SVG 生成帶標(biāo)識(shí)的 favicon的方法,希望對(duì)大家有所幫助!

詳解用SVG給 favicon 添加標(biāo)識(shí)

前端(vue)入門到精通課程:進(jìn)入學(xué)習(xí)

之前做了一個(gè) Chrome 插件,可以根據(jù)地址的不同生成不同的圖標(biāo),這樣可以很方便的區(qū)分不同的開發(fā)環(huán)境,效果如下

詳解用SVG給 favicon 添加標(biāo)識(shí)

主要實(shí)現(xiàn)過(guò)程其實(shí)不復(fù)雜,首先獲取網(wǎng)站 favicon,然后給 favicon 添加標(biāo)識(shí),重新繪制生成就行了

詳解用SVG給 favicon 添加標(biāo)識(shí)

其中,這里的圖標(biāo)就是通過(guò) SVG 生成的,下面看看具體實(shí)現(xiàn)吧。【推薦學(xué)習(xí):css視頻教程】

一、favicon 的獲取方式

想知道獲取方式,可以先了解設(shè)置方式。

一般有兩種方式可以設(shè)置網(wǎng)站的 favicon

第一種,通過(guò) link 標(biāo)簽設(shè)置(需要rel="icon"屬性)

<link rel="icon" href="xxx.png">

第二種,直接在網(wǎng)站根目錄放一張favicon.ico(必須是這個(gè)名稱,瀏覽器默認(rèn)的),html 中什么也不用設(shè)置

- 網(wǎng)站目錄     index.html     favicon.ico

如果以上都沒有設(shè)置,那么大概率會(huì)看到以下錯(cuò)誤

詳解用SVG給 favicon 添加標(biāo)識(shí)

了解這些,獲取就簡(jiǎn)單了,先通過(guò)link獲取,只要rel包含icon就行了

const link = document.querySelector('link[rel~="icon"]');

如果找不到,可以請(qǐng)求/favicon.ico,這里直接添加一個(gè)link

function getLink(){     const link = document.querySelector('link[rel~="icon"]');     if (link) {         return link     } else {         const link = document.createElement('link');         link.rel = "icon";         link.href = "/favicon.ico"         document.head.append(link);         return link     } }

這樣獲取的link就保證存在了,然后就是繪制

二、利用 canvas 進(jìn)行繪制

由于需要合成圖像,所以需要先繪制原有圖像。提到圖像繪制,可以想到 canvas 繪制,只需要一點(diǎn)點(diǎn) canvas 基礎(chǔ)知識(shí)就足夠了。具體實(shí)現(xiàn)如下

const canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), img = new Image(); img.crossOrigin = 'anonymous'; img.onload = () => {     canvas.height = img.height;     canvas.width = img.width;     ctx.drawImage(img, 0, 0, canvas.width, canvas.height);     let dataURL = canvas.toDataURL("image/png");     resolve(dataURL);     canvas = null; }; img.src = url;

由于存在/favicon.ico沒有設(shè)置的情況,所以需要在 img 加載失敗的時(shí)候給一張默認(rèn)圖

img.onerror = () => {     resolve("默認(rèn)圖base64"); }

這樣就能獲取到 favicon 的圖像信息了

三、利用 SVG 進(jìn)行圖片合成

在上面的基礎(chǔ)上,其實(shí)可以繼續(xù)通過(guò) canvas 進(jìn)行繪制,再繪制一個(gè)標(biāo)簽也不是難事。不過(guò)這里可以采用 SVG 的方式來(lái)進(jìn)行繪制,有以下一些優(yōu)點(diǎn)

  • 成本更低,比 canvas 更易理解

  • 靈活性高,可以通過(guò) CSS 進(jìn)行一些樣式控制

首先,我們可以在 HTML 中自由的、像正常網(wǎng)頁(yè)開發(fā)一樣,繪制這樣一個(gè)布局,相信沒有什么難度

詳解用SVG給 favicon 添加標(biāo)識(shí)

<body>   <strong>local</strong>   <img src='xxx.png'> </body>

由于寬度有限,所以需要強(qiáng)制文本換行,超出隱藏,關(guān)鍵樣式如下

strong{   position: absolute;   bottom: 0;   left: 50%;   transform: translateX(-50%);   text-transform: uppercase;   background-color: orange;   color: #fff;   padding: 0px 2px;   border-radius: 2px;   font-size: 12px;   box-sizing: border-box;   max-width: 100%;   width: max-content;   height: 16px;   line-height: 16px;   word-break: break-all;   overflow: hidden; }

接著,將這一段 html 放入 foreignObject標(biāo)簽中,關(guān)于 foreignObject 的作用,有興趣的可以參考張?chǎng)涡窭蠋煹倪@篇文章 SVG 簡(jiǎn)介與截圖等應(yīng)用,在這里,你可以簡(jiǎn)單理解為是可以包含 HTML 的標(biāo)簽,而 SVG 本身也是一種圖片,這樣就達(dá)到了合成圖像的目的

詳解用SVG給 favicon 添加標(biāo)識(shí)

具體實(shí)現(xiàn)如下

const link = getLink(); const icon = await img2Base64(link.href); const favicon = `data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><foreignObject x="0" y="0" width="100%" height="100%"><body xmlns="http://www.w3.org/1999/xhtml">   <style>     html,body{       height: 100%;       margin: 0;       text-align: center;     }     img{       display: block;       width: 100%;       height: 100%;       object-fit: contain;     }     strong{       position: absolute;       bottom: 0;       left: 50%;       transform: translateX(-50%);       text-transform: uppercase;       background-color: ${color};       color: #fff;       padding: 0px 2px;       border-radius: 2px;       font-size: 12px;       box-sizing: border-box;       max-width: 100%;       width: max-content;       height: 16px;       line-height: 16px;       word-break: break-all;       overflow: hidden;     }   </style>   <strong>local</strong>   <img src='${icon}'></img>   </body></foreignObject></svg>`.replace(/n/g, '').replace(/t/g, '').replace(/#/g, '%23')

這里需要注意幾點(diǎn)

  • img 標(biāo)簽在 svg 中需要寫成<img></img>閉合形態(tài),不然會(huì)被認(rèn)為結(jié)構(gòu)錯(cuò)誤

  • img 只能使用內(nèi)聯(lián)圖片,比如 base64,這也是為何繪制原始 favicon 的原因

  • 如果使用內(nèi)聯(lián) svg,需要對(duì) svg 進(jìn)行轉(zhuǎn)義

  • 字符串中的單雙引號(hào)問題也需要注意一下

然后,將生成的 SVG 直接設(shè)置為 favicon

link.href= favicon;

詳解用SVG給 favicon 添加標(biāo)識(shí)

這樣就能正常的渲染了~

完整實(shí)現(xiàn)可以參考項(xiàng)目:https://github.com/XboxYan/auto-dev-favicon-chrome-plugin

四、一些局限性

首先是兼容性。

目前只有 Chrome 和 Firefox 是支持的,為了兼容其他瀏覽器,可以用一個(gè) .ico來(lái)兜底

<link rel="icon" href="/favicon.ico" sizes="any"> <link rel="icon" href="/favicon.svg" type="image/svg+xml">

另外,在 Chrome 上還有一個(gè)限制(不知道是不是Chrome 更新后的限制),當(dāng) favicon 使用 svg 格式圖片時(shí),此時(shí)的 svg 會(huì)處于一種secure-static-mode,在這種模式下,所有動(dòng)畫都不會(huì)執(zhí)行,會(huì)處于第一幀,比如下面這個(gè)例子

<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">   <foreignObject width="100%" height="100%">       <body xmlns="http://www.w3.org/1999/xhtml">         <style>         html,body{             margin: 0;             height: 100%         }         div{             height: 100%;             background: pink;             animation: hue 3s infinite;         }         @keyframes hue {             to {                 filter: hue-rotate(360deg)             }         }         </style>         <div></div>       </body>     </foreignObject> </svg>

很簡(jiǎn)單的一個(gè)背景顏色動(dòng)畫。在 Firefox 上是用作 favicon 是有動(dòng)畫的

詳解用SVG給 favicon 添加標(biāo)識(shí)

但是,Chrome 上卻不行,只有禁止的第一幀

詳解用SVG給 favicon 添加標(biāo)識(shí)

所以之前想實(shí)現(xiàn)標(biāo)識(shí)文本滾動(dòng)的效果可以就此打住了

比較類似的還有媒體查詢,之前在網(wǎng)上看到有這樣的實(shí)現(xiàn),直接在 SVG 中實(shí)現(xiàn)黑暗模式

<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">     <style>         path {             fill: #fff;         }         rect {             fill: #B09AFE;         }         @media (prefers-color-scheme: dark) {             path {                 fill: #B09AFE;             }             rect {                 fill: #fff;             }         }     </style>     <rect width="128" height="128" rx="64" fill="#B09AFE"/>     <path d="M32.375 37.5714H22C22 58.004 38.2596 74.5714 58.3125 74.5714V98.3571C58.3125 99.8107 59.4797 101 60.9062 101H66.0937C67.5203 101 68.6875 99.8107 68.6875 98.3571V74.5714C68.6875 54.1388 52.4279 37.5714 32.375 37.5714ZM94.625 27C80.9754 27 69.109 34.6808 62.9002 46.0286C67.3906 51.017 70.7139 57.079 72.4646 63.8018C90.7344 61.8692 105 46.1442 105 27H94.625Z" fill="white"/> </svg>

但是也是同樣的問題,只有 Firefox 下可行,Chrome是靜止不動(dòng)的

詳解用SVG給 favicon 添加標(biāo)識(shí)

總的來(lái)說(shuō),SVG 在繪制方面提供了無(wú)限可能,不僅僅是本文中的案例,覺得 canvas 過(guò)于復(fù)雜的都可以考慮這一方案

(學(xué)習(xí)視頻分享:web前端)

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
午夜久久久精品| 成人免费看片视频在线观看| 激情六月丁香婷婷| 日韩少妇内射免费播放| 日本在线视频www| 91人人澡人人爽人人精品| 亚洲高清免费在线观看| 久久久国产精华液999999 | 免费无码av片在线观看| mm1313亚洲国产精品无码试看| 亚洲欧美久久久久| 18视频在线观看娇喘| 黄色一级在线视频| 91制片厂毛片| 国产内射老熟女aaaa| 欧美女人性生活视频| 国产精品自在自线| 青春草国产视频| 日本爱爱免费视频| 九九久久九九久久| 成人免费毛片播放| 青青在线免费视频| 国产性生交xxxxx免费| 欧美专区第二页| 六月丁香婷婷在线| www.亚洲自拍| 久久精品国产精品亚洲色婷婷| 黄色aaaaaa| 欧美视频在线观看网站 | www.久久com| 波多野结衣家庭教师视频| 亚洲无在线观看| 激情六月丁香婷婷| 91.com在线| 免费黄频在线观看| 老司机午夜av| 精品国产av无码一区二区三区| 国产又黄又猛又粗又爽的视频| 丰满少妇大力进入| 午夜免费一级片| 日本激情视频在线| 欧美不卡在线播放| 激情五月五月婷婷| 中文字幕国产免费| 欧美视频免费播放| ww国产内射精品后入国产| www.-级毛片线天内射视视| 91国产精品视频在线观看| 日韩国产欧美亚洲| 丁香婷婷综合激情| 国产一二三四五| 欧美日韩精品区别| 五月婷婷狠狠操| 国产女女做受ⅹxx高潮| 99在线免费视频观看| 亚洲欧美日韩不卡| 性欧美18一19内谢| www.51色.com| 色婷婷一区二区三区在线观看| 天天影视综合色| 天天操天天摸天天爽| 欧美 激情 在线| 精品视频一区二区在线| 男女超爽视频免费播放| 夜夜添无码一区二区三区| 50度灰在线观看| 国产欧美久久久久| 久草视频这里只有精品| 日本aa在线观看| 日本男女交配视频| 免费看污污视频| 国产一二三区在线播放| www.xxx麻豆| 国产中文字幕二区| 亚洲乱码中文字幕久久孕妇黑人| 北条麻妃在线视频观看| 久久无码高潮喷水| 成人精品视频一区二区| www.激情小说.com| 天天综合天天添夜夜添狠狠添| 中文字幕 91| 日韩av福利在线观看| 潘金莲一级淫片aaaaa免费看| 女同性恋一区二区| 成人午夜视频在线观看免费| 男女日批视频在线观看| 免费黄色日本网站| www.日本xxxx| 欧洲美女亚洲激情| 日韩精品在线中文字幕| 北条麻妃在线视频观看| 另类小说第一页| 污视频在线观看免费网站| 草草草视频在线观看| 俄罗斯av网站| 最新天堂中文在线| 亚洲天堂第一区| 日韩中文字幕三区| 不卡中文字幕在线观看| 日本五级黄色片| 亚洲激情在线观看视频| 一本—道久久a久久精品蜜桃| 日韩一级性生活片| 热久久精品免费视频| 五月六月丁香婷婷| 国产一区二区网| 欧洲在线免费视频| 欧美成人三级在线视频| 亚洲欧美自偷自拍另类| 2022中文字幕| 手机看片福利日韩| 91网站在线观看免费| 国产女女做受ⅹxx高潮| 成人免费看片视频在线观看| 精品99在线视频| 欧美一级黄色录像片| 免费观看成人在线视频| 国产a级黄色大片| 国产wwwxx| 2018中文字幕第一页| www.日本一区| 黄色片视频在线免费观看| 超碰91在线播放| 成人精品视频一区二区| 97中文字幕在线| www.成年人| 激情内射人妻1区2区3区| 高清无码视频直接看| 五月天av在线播放| 久久久精品在线视频| av在线观看地址| 天天干天天色天天爽| 尤物国产在线观看| 久久无码高潮喷水| 日韩欧美不卡在线| 99中文字幕在线观看| 国产精品自在自线| 日本人视频jizz页码69| 黄www在线观看| 欧美高清中文字幕| 永久免费黄色片| 国产一伦一伦一伦| 亚洲视频在线观看一区二区三区| 日韩精品一区二区在线视频| 亚洲午夜精品一区| www.涩涩涩| 成人亚洲视频在线观看| 欧美成人一区二区在线观看| aa视频在线播放| 91精品国产91久久久久麻豆 主演| 97公开免费视频| 18禁网站免费无遮挡无码中文| 国产免费内射又粗又爽密桃视频| 日本中文字幕二区| 三级a三级三级三级a十八发禁止| 亚洲欧洲日产国码无码久久99| 国产二区视频在线| 国产a级片网站| 日韩精品 欧美| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 中文字幕在线中文| 久久香蕉视频网站| 成人免费网站入口| 欧美大黑帍在线播放| 成人免费在线网| 成年人深夜视频| 国产欧美日韩网站| 欧美性久久久久| 91看片就是不一样| 在线观看av网页| 午夜大片在线观看| 日韩视频 中文字幕| 男人天堂av片| 国内外成人激情视频| 日本男人操女人| 天天综合成人网| www.日本在线视频| 中文字幕无码精品亚洲35| 日本黄色三级大片| 亚洲高清在线不卡| 亚洲色成人www永久在线观看| 欧美色图色综合| 色片在线免费观看| 天天操天天干天天玩| 奇米影视亚洲色图| 日韩不卡一二三| 久久久久亚洲av无码专区喷水| 日韩精品在线观看av| 成人免费在线小视频| 色91精品久久久久久久久| 国产精品三级一区二区| 欧美黄色免费影院| 三级性生活视频| 亚洲 自拍 另类小说综合图区| 日本www在线播放| 亚洲三级在线观看视频| 福利视频免费在线观看| 一区二区三区免费播放| 欧美中文字幕在线观看视频| 亚洲精品中文字幕无码蜜桃|