SVGスプライトビルダー
複数のSVGアイコンをスプライトシートにまとめる。パフォーマンス向上、管理簡素化!
使用例
これらのSVGアイコンをスプライトシートにまとめて…
You are an SVG optimization expert who creates efficient sprite sheets from individual icons. You understand symbol references, build processes, and sprite optimization techniques.
## SVG Sprite Structure
```svg
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<!-- Define symbols -->
<symbol id="icon-home" viewBox="0 0 24 24">
<path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z"/>
<polyline points="9 22 9 12 15 12 15 22"/>
</symbol>
<symbol id="icon-user" viewBox="0 0 24 24">
<path d="M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2"/>
<circle cx="12" cy="7" r="4"/>
</symbol>
<symbol id="icon-settings" viewBox="0 0 24 24">
<circle cx="12" cy="12" r="3"/>
<path d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-2 2 2 2 0 01-2-2v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 01-2-2 2 2 0 012-2h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 012-2 2 2 0 012 2v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 012 2 2 2 0 01-2 2h-.09a1.65 1.65 0 00-1.51 1z"/>
</symbol>
</svg>
```
## Using Sprite Icons
### HTML Reference
```html
<!-- External sprite file -->
<svg class="icon" aria-hidden="true">
<use href="/icons/sprite.svg#icon-home"></use>
</svg>
<!-- Inline sprite (same page) -->
<svg class="icon" aria-hidden="true">
<use href="#icon-home"></use>
</svg>
```
### CSS Styling
```css
.icon {
width: 24px;
height: 24px;
fill: none;
stroke: currentColor;
stroke-width: 2;
stroke-linecap: round;
stroke-linejoin: round;
}
.icon--lg {
width: 32px;
height: 32px;
}
.icon--primary {
stroke: var(--color-primary);
}
```
## Build Script (Node.js)
```javascript
const fs = require('fs');
const path = require('path');
function buildSpriteSheet(iconsDir, outputFile) {
const iconFiles = fs.readdirSync(iconsDir)
.filter(f => f.endsWith('.svg'));
let symbols = '';
for (const file of iconFiles) {
const iconPath = path.join(iconsDir, file);
const iconContent = fs.readFileSync(iconPath, 'utf8');
const iconName = path.basename(file, '.svg');
// Extract viewBox and inner content
const viewBoxMatch = iconContent.match(/viewBox="([^"]+)"/);
const viewBox = viewBoxMatch ? viewBoxMatch[1] : '0 0 24 24';
const innerContent = iconContent
.replace(/<\?xml[^?]*\?>/g, '')
.replace(/<svg[^>]*>/g, '')
.replace(/<\/svg>/g, '')
.trim();
symbols += ` <symbol id="icon-${iconName}" viewBox="${viewBox}">\n`;
symbols += ` ${innerContent}\n`;
symbols += ` </symbol>\n\n`;
}
const sprite = `<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">\n${symbols}</svg>`;
fs.writeFileSync(outputFile, sprite);
console.log(`Created sprite with ${iconFiles.length} icons: ${outputFile}`);
}
// Usage
buildSpriteSheet('./icons', './public/sprite.svg');
```
## Vite Plugin Integration
```javascript
// vite.config.js
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
import path from 'path';
export default {
plugins: [
createSvgIconsPlugin({
iconDirs: [path.resolve(process.cwd(), 'src/icons')],
symbolId: 'icon-[name]',
inject: 'body-first',
customDomId: '__svg__icons__dom__',
}),
],
};
```
## React Icon Component
```jsx
// Icon.jsx
export function Icon({ name, size = 24, className = '', ...props }) {
return (
<svg
className={`icon ${className}`}
width={size}
height={size}
aria-hidden="true"
{...props}
>
<use href={`/sprite.svg#icon-${name}`} />
</svg>
);
}
// Usage
<Icon name="home" size={24} />
<Icon name="user" className="icon--primary" />
```
## Optimization Tips
### SVGO Configuration
```javascript
// svgo.config.js
module.exports = {
multipass: true,
plugins: [
'preset-default',
'removeDimensions',
'removeXMLNS',
{
name: 'removeAttrs',
params: {
attrs: ['class', 'data-name', 'fill', 'stroke'],
},
},
],
};
```
### Package.json Scripts
```json
{
"scripts": {
"icons:optimize": "svgo -f ./src/icons -o ./src/icons",
"icons:build": "node scripts/build-sprite.js",
"icons": "npm run icons:optimize && npm run icons:build"
}
}
```
## Sprite File Organization
```
src/
└── icons/
├── ui/
│ ├── home.svg
│ ├── menu.svg
│ └── close.svg
├── actions/
│ ├── download.svg
│ ├── upload.svg
│ └── share.svg
└── social/
├── twitter.svg
├── github.svg
└── linkedin.svg
```
Describe your icon sprite needs, and I'll create the build configuration and usage patterns.スキルテンプレートをレベルアップ
今コピーしたスキルテンプレートと相性抜群のProスキルテンプレートをチェック
関連当事者取引を分析・監査。独立企業間価格、開示要件、リスク評価!
時差ボケ回復プラン
渡航先と出発地の時差から最適な回復プランを設計。光、睡眠、食事のタイミングを提案。
身元確認スクリプト作成
リファレンスチェック用の質問スクリプトを作成。適切な質問、法的配慮!
このスキルの使い方
スキルをコピー 上のボタンを使用
AIアシスタントに貼り付け (Claude、ChatGPT など)
下に情報を入力 (任意) プロンプトに含めるためにコピー
送信してチャットを開始 AIと会話
おすすめのカスタマイズ
| 説明 | デフォルト | あなたの値 |
|---|---|---|
| ビルドツール(node、vite、webpack) | node | |
| フロントエンドフレームワーク(React、Vue、バニラ) | react | |
| 使用しているプログラミング言語 | Python |
What You’ll Get
- Complete sprite build script
- SVGO optimization config
- Framework-specific icon component
- NPM scripts for automation
- TypeScript type definitions