>通常由於渲染不一致,可訪問性問題和語義限製而使用圖標字體通常不建議使用。 本文概述了用於創建和實現可訪問的SVG圖標的簡化工作流程,利用SVG Sprites的功能。
雖然SVG看起來很複雜,但這種方法簡化了過程。我們將利用隨時可用的圖標,並自動化Sprite生成來進行高效的管理。 鍵優點:避免了圖標字體的陷阱。
<title></title>
<desc></desc>
源圖標:
spritesh
npm install spritesh -g
spritesh --input assets/images/icons --output _includes/sprite.svg --viewbox "0 0 16 16" --prefix icon-
>{% include sprite.svg %}
> <use></use>
圖標組件應包括viewBox
和<title></title>
<desc></desc>
>
示例圖標組件(react):
{% capture id %}{% increment uniqueid %}{% endcapture %} <svg viewBox="0 0 16 16" role="img" class="icon icon-{{ include.icon }}" aria-labelledby="{% if include.title %}title-{{ id }}{% endif %}{% if include.desc %} desc-{{ id }}{% endif %}"> {% if include.title %} <title id="title-{{ id }}">{{ include.title }}</title> {% endif %} {% if include.desc %} <desc id="desc-{{ id }}">{{ include.desc }}</desc> {% endif %} <use xlink:href="#icon-{{ include.icon }}"></use> </svg>
集成像svgo()這樣的工具,以優化SVG文件,以提高性能,以提高性能。 使用NPM腳本來自動化此過程。 >
>此工作流提供了一個可靠,可維護且可訪問的解決方案,用於管理項目中的SVG圖標。請記住,請始終在不同的瀏覽器和屏幕讀取器上測試您的圖標,以確保最佳可訪問性。import { uniqueId } from 'lodash'; const Icon = (props) => { const id = uniqueId(); return ( <svg role="img" viewBox="0 0 16 16" className={`icon icon-${props.icon}`} aria-labelledby={ (props.title ? `title-${id}` : '') + (props.desc ? ` desc-${id}` : '') }> {props.title && <title id={`title-${id}`}>{props.title}</title>} {props.desc && <desc id={`desc-${id}`}>{props.desc}</desc>} <use xlinkHref={`#icon-${props.icon}`} /> </svg> ); }; export default Icon;
以上是可訪問圖標的工作SVG工作流程的詳細內容。更多資訊請關注PHP中文網其他相關文章!