久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

詳解用SVG給 favicon 添加標識

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

詳解用SVG給 favicon 添加標識

前端(vue)入門到精通課程:進入學習

之前做了一個 Chrome 插件,可以根據地址的不同生成不同的圖標,這樣可以很方便的區分不同的開發環境,效果如下

詳解用SVG給 favicon 添加標識

主要實現過程其實不復雜,首先獲取網站 favicon,然后給 favicon 添加標識,重新繪制生成就行了

詳解用SVG給 favicon 添加標識

其中,這里的圖標就是通過 SVG 生成的,下面看看具體實現吧。【推薦學習:css視頻教程】

一、favicon 的獲取方式

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

一般有兩種方式可以設置網站的 favicon

第一種,通過 link 標簽設置(需要rel="icon"屬性)

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

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

- 網站目錄     index.html     favicon.ico

如果以上都沒有設置,那么大概率會看到以下錯誤

詳解用SVG給 favicon 添加標識

了解這些,獲取就簡單了,先通過link獲取,只要rel包含icon就行了

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

如果找不到,可以請求/favicon.ico,這里直接添加一個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 進行繪制

由于需要合成圖像,所以需要先繪制原有圖像。提到圖像繪制,可以想到 canvas 繪制,只需要一點點 canvas 基礎知識就足夠了。具體實現如下

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沒有設置的情況,所以需要在 img 加載失敗的時候給一張默認圖

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

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

三、利用 SVG 進行圖片合成

在上面的基礎上,其實可以繼續通過 canvas 進行繪制,再繪制一個標簽也不是難事。不過這里可以采用 SVG 的方式來進行繪制,有以下一些優點

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

  • 靈活性高,可以通過 CSS 進行一些樣式控制

首先,我們可以在 HTML 中自由的、像正常網頁開發一樣,繪制這樣一個布局,相信沒有什么難度

詳解用SVG給 favicon 添加標識

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

由于寬度有限,所以需要強制文本換行,超出隱藏,關鍵樣式如下

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標簽中,關于 foreignObject 的作用,有興趣的可以參考張鑫旭老師的這篇文章 SVG 簡介與截圖等應用,在這里,你可以簡單理解為是可以包含 HTML 的標簽,而 SVG 本身也是一種圖片,這樣就達到了合成圖像的目的

詳解用SVG給 favicon 添加標識

具體實現如下

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')

這里需要注意幾點

  • img 標簽在 svg 中需要寫成<img></img>閉合形態,不然會被認為結構錯誤

  • img 只能使用內聯圖片,比如 base64,這也是為何繪制原始 favicon 的原因

  • 如果使用內聯 svg,需要對 svg 進行轉義

  • 字符串中的單雙引號問題也需要注意一下

然后,將生成的 SVG 直接設置為 favicon

link.href= favicon;

詳解用SVG給 favicon 添加標識

這樣就能正常的渲染了~

完整實現可以參考項目:https://github.com/XboxYan/auto-dev-favicon-chrome-plugin

四、一些局限性

首先是兼容性。

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

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

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

<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>

很簡單的一個背景顏色動畫。在 Firefox 上是用作 favicon 是有動畫的

詳解用SVG給 favicon 添加標識

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

詳解用SVG給 favicon 添加標識

所以之前想實現標識文本滾動的效果可以就此打住了

比較類似的還有媒體查詢,之前在網上看到有這樣的實現,直接在 SVG 中實現黑暗模式

<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是靜止不動的

詳解用SVG給 favicon 添加標識

總的來說,SVG 在繪制方面提供了無限可能,不僅僅是本文中的案例,覺得 canvas 過于復雜的都可以考慮這一方案

(學習視頻分享:web前端)

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产精选在线| 精品欠久久久中文字幕加勒比| 欧美91在线|欧美| 中文字幕一区二区三区四区久久 | 亚洲人成毛片在线播放女女| 久久午夜精品一区二区| 男女性色大片免费观看一区二区 | 国产一区二区三区91| 国产一区丝袜| 在线手机中文字幕| 亚洲精品一区三区三区在线观看| 视频小说一区二区| 亚洲尤物在线| 蜜桃视频欧美| 婷婷精品在线观看| 国产精品成人a在线观看| 欧美日韩伊人| 欧美日韩免费观看一区=区三区 | 香蕉成人久久| 日韩精品亚洲一区二区三区免费| 国产精品对白| 亚洲精品国产精品粉嫩| 国内一区二区三区| 日本久久一区| 亚洲精品无吗| 一区二区亚洲精品| 欧美a在线观看| 亚洲欧美在线专区| 日韩在线看片| 精品美女久久| 日韩高清欧美激情| 午夜久久美女| 青草国产精品| 麻豆一区二区三| 亚洲精品看片| 日韩精品欧美| 精品免费在线| 国产夫妻在线| 黑丝美女一区二区| 亚洲精品在线a| 水蜜桃精品av一区二区| 精品日韩视频| 综合色就爱涩涩涩综合婷婷| 激情综合五月| 欧美三级网址| 综合国产在线| 日本精品一区二区三区在线观看视频| 色综合视频一区二区三区日韩 | 国产一区91| 国产一区二区三区黄网站| 最新亚洲激情| 日韩欧美不卡| 蘑菇福利视频一区播放| 成人在线超碰| 国产精品亚洲综合色区韩国 | 日本久久一区| 中文字幕人成乱码在线观看 | 麻豆免费精品视频| 婷婷综合五月| 国产乱人伦精品一区| 麻豆成人在线| 天堂资源在线亚洲| 国产精品免费看| 国产精品一站二站| 久久99久久久精品欧美| 国产一区二区视频在线看| 亚洲一区二区日韩| 国产精品宾馆| 亚洲www免费| 国产99久久| 久久国产人妖系列| 在线一区视频| 国产一区二区三区亚洲| 国产精品91一区二区三区| 最近国产精品视频| 精品视频在线观看网站| 香蕉久久国产| 欧美激情麻豆| 视频一区二区三区中文字幕| 精品欧美视频| 亚洲日本在线观看视频| 91成人在线| 日韩欧美中文字幕一区二区三区 | 日韩三级久久| 91视频精品| 日韩av电影一区| 日韩一级精品| 国产精品流白浆在线观看| 免费欧美在线视频| 美女网站一区| 久久99青青| 图片区亚洲欧美小说区| 久久久久久一区二区| 久久麻豆视频| 亚洲精品免费观看| 日韩欧美一区二区三区免费看| 日本a口亚洲| 日韩精品影视| 97精品中文字幕| 亚洲影视一区二区三区| 久久亚洲精品伦理| 99pao成人国产永久免费视频| 日本强好片久久久久久aaa| 精品美女在线视频| 日韩国产一区二区三区| 高清精品久久| 免费一区二区三区在线视频| 国产精选一区| 国产精品草草| 麻豆视频在线观看免费网站黄| 麻豆91在线播放| 精品网站999| 国产激情欧美| 亚洲在线一区| 色偷偷偷在线视频播放| 免费视频一区二区三区在线观看| 日本午夜免费一区二区| 99视频精品全国免费| 欧美特黄一区| 婷婷激情图片久久| 欧美.日韩.国产.一区.二区 | 国产欧美日韩一级| 91欧美精品| 日韩1区2区3区| 亚洲欧美日韩精品一区二区| 国产精品sm| 国产成人免费精品| 亚洲一区日韩在线| 国产精品二区影院| 国产白浆在线免费观看| 国产精品美女午夜爽爽| 久久男人天堂| 国产成人免费精品| 欧美gv在线| 成人精品中文字幕| 亚洲日本欧美| 91av亚洲| 欧美一区二区三区久久精品| 精品国产中文字幕第一页| 成人日韩在线| 日本三级亚洲精品| 伊人精品一区| 美女国产一区二区三区| 欧美在线网站| 国产乱人伦丫前精品视频 | 久久亚洲精品伦理| 国产精品一页| 欧美特黄a级高清免费大片a级| 日韩专区欧美专区| 久久久久国产精品一区二区| 在线日韩欧美| 免费不卡在线观看| 欧美久久久网站| 国产精品视频3p| 色爱综合网欧美| 不卡视频在线| 日韩一区二区三免费高清在线观看 | 精品中文字幕一区二区三区 | 国产精品一区免费在线| 国产中文在线播放| 午夜一级久久| 久久国产亚洲精品| 久久这里只有精品一区二区| 亚洲性色视频| 麻豆精品久久| 精品亚洲精品| 美女视频黄久久| 欧美午夜三级| 国产精品主播在线观看| 亚洲精品高潮| 蜜臀精品久久久久久蜜臀| 欧美日韩中文字幕一区二区三区| 欧美国产另类| 日本免费新一区视频| 国产日韩视频在线| 日本不卡中文字幕| 91成人在线网站| 中文字幕亚洲影视| 亚洲精品第一| 美腿丝袜亚洲三区| 久久久久国产精品一区三寸| 美女精品在线| 精品国产午夜肉伦伦影院| 黄色亚洲免费| 国产精品99久久免费| 婷婷综合亚洲| 久久不见久久见中文字幕免费| 色婷婷狠狠五月综合天色拍| 国产欧美自拍| 91欧美极品| 免费精品一区| 午夜精品久久久久久久久久蜜桃| 亚洲黄色中文字幕| 日韩欧美午夜| 欧美激情aⅴ一区二区三区| 国产96在线亚洲| 日韩一区中文| 精品视频一区二区三区四区五区| 精品视频一二| 欧美一区二区三区高清视频 |