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一区二区
国产成人无码av在线播放dvd| 国产免费色视频| 欧美aaa在线观看| 亚洲精品手机在线观看| 午夜免费一区二区| 欧美aⅴ在线观看| 国产 日韩 欧美在线| 男人天堂新网址| 成人小视频在线观看免费| 懂色av粉嫩av蜜臀av| 手机av在线网站| 中文字幕一区二区三区四区五区人| www.国产福利| 欧美精品久久96人妻无码| 女人床在线观看| 欧美久久久久久久久久久久久久| 国产人妻人伦精品| 黄色激情在线视频| 爱福利视频一区二区| 老司机午夜av| 欧美在线a视频| 人人妻人人澡人人爽欧美一区 | 精品无码一区二区三区爱欲| 男人天堂网站在线| 日韩在线综合网| 男女男精品视频站| 亚洲18在线看污www麻豆| 欧美日韩视频免费在线观看| 免费看欧美一级片| 精品www久久久久奶水| 不卡中文字幕在线观看| www污在线观看| 成人亚洲视频在线观看| 一级全黄肉体裸体全过程| 一二三四视频社区在线| www.激情小说.com| 日本男女交配视频| 手机版av在线| 欧美成人三级在线视频| 日韩av卡一卡二| 欧美乱大交xxxxx潮喷l头像| 国产精品一区二区小说| 日本wwwcom| 国产999免费视频| 国产精品333| 伊人网在线免费| 亚洲综合欧美在线| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 最新天堂在线视频| 国产最新免费视频| 成人小视频在线观看免费| 国产高潮免费视频| 亚洲人成色77777| 欧美中文字幕在线观看视频| 中文字幕中文在线| 韩国一区二区av| 欧美a级免费视频| 97超碰人人爱| 欧美视频亚洲图片| 另类小说第一页| 大肉大捧一进一出好爽动态图| 黄色成人在线免费观看| 欧美性受xxxx黑人猛交88| www.国产视频.com| www.亚洲高清| 一本一道久久a久久综合蜜桃| 日本黄色三级大片| 国产免费黄色av| 黄色一级视频片| 干日本少妇首页| 激情网站五月天| 熟女少妇精品一区二区| 国产aaa一级片| 91福利国产成人精品播放| 网站一区二区三区| 91小视频在线播放| www.午夜色| 亚洲国产一二三精品无码| 黄色影视在线观看| av女优在线播放| 播放灌醉水嫩大学生国内精品| 日本精品免费在线观看| 亚洲 中文字幕 日韩 无码| 日日躁夜夜躁aaaabbbb| 国产美女视频免费看| 超碰10000| 啊啊啊一区二区| 亚洲午夜激情影院| 国产成人生活片| 无码aⅴ精品一区二区三区浪潮 | 国产原创popny丨九色| 国产欧美在线一区| 手机在线视频一区| 超碰超碰超碰超碰超碰| 国产精品亚洲a| 日本老太婆做爰视频| 日本wwww视频| 欧美日韩午夜爽爽| 波多野结衣作品集| 欧美激情第四页| 欧美私人情侣网站| 日本女人高潮视频| 国产成人亚洲精品无码h在线| 成人不卡免费视频| 亚洲熟妇av一区二区三区漫画| 国产高清视频网站| 久在线观看视频| 久久av喷吹av高潮av| 亚洲视频在线观看一区二区三区| av不卡在线免费观看| 男人靠女人免费视频网站| 美女黄色片网站| 校园春色 亚洲色图| www在线观看免费| 偷拍盗摄高潮叫床对白清晰| 欧美国产激情视频| 久久av综合网| 免费观看黄色大片| 亚洲欧美日韩精品一区| 亚洲色成人一区二区三区小说| www.99riav| 亚洲国产精品女人| 日本一二三四区视频| 五月婷婷六月合| 日本成人在线免费视频| 国产肥臀一区二区福利视频| 国内自拍中文字幕| 天天想你在线观看完整版电影免费| 天天操天天爱天天爽| 不卡影院一区二区| 99热成人精品热久久66| 成年人观看网站| 精品少妇一区二区三区在线| 成人在线播放网址| 久久国产精品网| 欧美黑人经典片免费观看| 青青青青在线视频| 欧美成人三级在线视频| 日本韩国欧美在线观看| 人妻熟妇乱又伦精品视频| 北条麻妃在线视频观看| 欧美私人情侣网站| 激情五月俺来也| 男女污污视频网站| 韩国无码av片在线观看网站| 轻点好疼好大好爽视频| 黄色成人在线免费观看| 国产精品12345| 红桃av在线播放| 中文字幕丰满乱码| 国产911在线观看| 毛片在线视频播放| 成年人在线观看视频免费| 久久免费一级片| 中文字幕12页| 亚洲天堂国产视频| 国产视频一区二区视频| 成熟老妇女视频| √天堂资源在线| 中文字幕第一页亚洲| 精品少妇人妻av免费久久洗澡| 国产三级日本三级在线播放| 黄色小视频免费网站| 成年人深夜视频| 亚洲五月天综合| 丁香六月激情婷婷| xxww在线观看| 国产自产在线视频| 中文字幕 日韩 欧美| 亚洲乱码日产精品bd在线观看| 国内外免费激情视频| 九一免费在线观看| youjizzxxxx18| 成品人视频ww入口| 99日在线视频| 日日摸天天爽天天爽视频| 亚洲成年人专区| 亚洲xxx在线观看| 可以在线看的av网站| 久久人人爽人人片| 黄色片久久久久| 少妇无码av无码专区在线观看 | 一级黄色香蕉视频| 日韩在线观看a| 99精品视频国产| www.99在线| 久久久噜噜噜www成人网| 最新av网址在线观看| 激情五月俺来也| 天天爱天天操天天干| 高清在线观看免费| 日韩久久久久久久久久久久| 图片区乱熟图片区亚洲| 冲田杏梨av在线| 亚洲一区在线不卡| 色多多视频在线播放| 欧美日韩在线观看不卡| 欧美在线观看视频网站| 熟女性饥渴一区二区三区| 国产中文字幕视频在线观看|