【CSS & JavaScript & SVG対応】円グラフ(扇形図)のアニメーション表現まとめ

【CSS & JavaScript & SVG対応】円グラフ(扇形図)のアニメーション表現まとめ

はじめに

円グラフ(パイチャート)は、比率や構成比を視覚的に伝えるのに最適なUIコンポーネントです。最近、業務で使う機会があり、さまざまな方法でエフェクトをつけて表示する実装を試しました。

この記事では、以下の3パターンで実装する方法を紹介します:

  • CSSのみでのグラフ描画
  • JavaScriptによるアニメーション付き描画
  • SVGによる柔軟なビジュアル表現

さらに、ツールチップ表示などの補足機能も加えています。シンプルな表示から動きのある演出まで、ニーズに合わせて活用してください。

CSSアニメーションで扇形図を表示

<!-- HTML -->
<div class="pie-chart" style="--percentage: 65; --color: #4CAF50;"></div>
/* CSS */
<style>
.pie-chart {
  width: 200px;
  height: 200px;
  border-radius: 50%;
  background: conic-gradient(
    var(--color) 0%,
    var(--color) calc(var(--percentage) * 1%),
    #eee calc(var(--percentage) * 1%),
    #eee 100%
  );
  transition: all 0.5s ease-out;
}

/* ホバーエフェクト */
.pie-chart:hover {
  transform: scale(1.05);
  box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
</style>

JavaScriptでアニメーション

// 扇形図をアニメーションで描画
function animatePieChart(elementId, percentage, color) {
  const chart = document.getElementById(elementId);
  let current = 0;
  const interval = setInterval(() => {
    if (current >= percentage) {
      clearInterval(interval);
      return;
    }
    current++;
    chart.style.setProperty('--percentage', current);
    chart.style.setProperty('--color', color);
  }, 20);
}

// 使い方
animatePieChart('myPieChart', 75, '#FF6384');

SVGを使った扇形図

<svg width="200" height="200" viewBox="0 0 200 200">
  <circle cx="100" cy="100" r="90" fill="none" stroke="#eee" stroke-width="20"/>
  <circle cx="100" cy="100" r="90" fill="none" stroke="#4CAF50" stroke-width="20"
          stroke-dasharray="565.48" stroke-dashoffset="565.48"
          style="animation: pie-fill 2s ease-out forwards;"/>
  <text x="100" y="110" text-anchor="middle" font-size="24" fill="#333">65%</text>
</svg>

<style>
  @keyframes pie-fill {
    to { stroke-dashoffset: calc(565.48 - (565.48 * 0.65)); }
  }
</style>

ツールチップ表示

// 扇形図のセクションにマウスオーバーした時にツールチップを表示
document.querySelectorAll('.pie-section').forEach(section => {
  section.addEventListener('mouseover', function(e) {
    const tooltip = document.createElement('div');
    tooltip.className = 'pie-tooltip';
    tooltip.textContent = this.dataset.value + '%: ' + this.dataset.label;
    document.body.appendChild(tooltip);
    
    const rect = this.getBoundingClientRect();
    tooltip.style.left = rect.left + 'px';
    tooltip.style.top = (rect.top - 30) + 'px';
  });
  
  section.addEventListener('mouseout', function() {
    const tooltip = document.querySelector('.pie-tooltip');
    if (tooltip) tooltip.remove();
  });
});

これらのコードはプロジェクトに応じて調整して使ってください。特にアニメーションの速度や色はデザインに合わせて変更すると良いでしょう。

関連記事
jQuery Sortableがスマホなどのタッチスクリーンで使えない場合の対処法
モバイル端末でのクリックイベントとの競合を避けるため、タップ操作には click より touchstart を使うことを推奨。 jQuery UI のバージョンによっては、内部構造が異なる場合があるため、導入時はテストを行うこと。
Details
Details
4ヶ月前
jQuery Sortableがスマホなどのタッチスクリーンで使えない場合の対処法
IT業界の初心者が知っておくべきの用語(2025版)
新しいテクノロジーについて話すとき、時々自分がみんなのペースについていけないと感じることはありませんか?あるいは、その業界にいるのに、自分はまだ十分ではないと感じ、多くの専門用語を理解しなければならないこともあるでしょう。
Details
Details
4ヶ月前
IT業界の初心者が知っておくべきの用語(2025版)
日本語用WebサイトのCSSフォント設定(日本語フォント/游ゴシック/游明朝)
日本語フォントはOSにより異なるため、複数のフォントを優先順に指定する。 "Yu Gothic"や"Yu Mincho"はモダンな日本語フォントでWindows 8.1以降に搭載。 "ヒラギノ角ゴ"や"ヒラギノ明朝"はmacOS向けで、高品質。 "メイリオ"や"MS 明朝"などは古いWindows環境にも対応。 ゴシック体はカジュアル・読みやすさ重視、明朝体はフォーマル・高級感重視に適している。
Details
Details
4ヶ月前
日本語用WebサイトのCSSフォント設定(日本語フォント/游ゴシック/游明朝)
scroll-behaviorで平滑スクロール、一行でいけるんだ
一般的に、アンカーリンクをスムーズにスクロールさせる時、JavaScriptやjQueryで実装することが多いです。例えば、 でも実は、CSSだけでもできるんです。そのためのプロパティがこちら: これを書くだけで、リンクをクリックした時にス […]
メモ・ノートスケ
メモ・ノートスケ
4ヶ月前
scroll-behaviorで平滑スクロール、一行でいけるんだ
ページ遷移の一般的な方法
本記事では、Webページにおけるページ遷移(リダイレクト)の一般的な実装方法について紹介しています。JavaScript、HTMLのメタタグ、PHP、ASPを用いたリダイレクト方法をそれぞれ具体的なコード例と共に解説しています。
Details
Details
4ヶ月前
ページ遷移の一般的な方法
!important なしでも大丈夫!CSS @layer でスタイル管理をもっと簡単に
CSS の !important は便利ですが、乱用すると保守が難しくなります。そこで注目されているのが新機能 @layer。この記事では、@layer を使って優先度を整理する方法を実装例とともに紹介します。
Details
Details
2ヶ月前
!important なしでも大丈夫!CSS @layer でスタイル管理をもっと簡単に
SafariでGoogleフォントが正しく表示されない原因と対策【font-weight・font-style完全ガイド】
SafariやiOSでGoogleフォントが正しく表示されない主な原因と対策を徹底解説。font-weight・font-styleの指定ミスによるWebフォント崩れを解決するCSSサンプル付きガイド。
aki0o0
aki0o0
4ヶ月前
SafariでGoogleフォントが正しく表示されない原因と対策【font-weight・font-style完全ガイド】
相対パスと絶対パスの使い方
相対パスは、モジュールやディレクトリ内のローカルな参照に適しており、柔軟性があります。一方、絶対パスはウェブサイト全体で共通のリソース(CSS、画像、CDNなど)を参照する際に便利です。両者を理解して使い分けることで、パスのエラーや読み込み不具合を防げます。
Details
Details
4ヶ月前
相対パスと絶対パスの使い方
CSSによる絶対中央寄せ
実用性が高い方法順で7種類の実装方法を紹介 最も推奨されるのは Flexbox と Grid transform を使う方法はどんな要素にも応用可能 line-height や table-cell は特定用途向け JavaScript による制御も紹介されている
Details
Details
4ヶ月前
CSSによる絶対中央寄せ
SCSSの @for ループ(ループ文)
SCSSの @for ループ
無敵の小さな蚊
無敵の小さな蚊
4ヶ月前
SCSSの @for ループ(ループ文)
フッターのJavaScriptは画像読み込みに影響する?ブラウザの読み込み順と最適化の基本
はじめに Webサイトの表示速度や操作感は、単にコンテンツの量や見た目だけでなく、ブラウザがリソースをどのように読み込むかによっても大きく左右されます。特にJavaScriptや画像の読み込み順序、そしてそれらがどのように相互作用しているか […]
解構人
解構人
4ヶ月前
フッターのJavaScriptは画像読み込みに影響する?ブラウザの読み込み順と最適化の基本
iPhone(iOS Safari)における input タグの角丸問題とその対策
iPhone(iOS Safari)でinputタグに自動で適用される角丸スタイルを無効化する方法を詳しく解説。CSSによるリセットやカスタムスタイルの実装手順を、具体的なコードとともに紹介します。
キウイフルーツ
キウイフルーツ
4ヶ月前
iPhone(iOS Safari)における input タグの角丸問題とその対策
inputのプレースホルダー(placeholder)の色を変更する
プレースホルダーの色は::placeholder疑似要素で変更可能 IEやEdgeなどの古いブラウザ向けに:-ms-input-placeholder、::-ms-input-placeholderを併用 Firefoxでは透明度の調整のためopacity指定が推奨される
Details
Details
4ヶ月前
inputのプレースホルダー(placeholder)の色を変更する
第1回:ウェブにおける色の基礎(2025年最新版)
ウェブデザインの基礎「色」について、2025年最新トレンドやアクセシビリティ・ダークモード対応まで、実務ですぐ使えるCSS色指定方法を分かりやすく解説。初心者から現場のデザイナーまで必見のカラーマネジメント入門ガイド。
aki0o0
aki0o0
4ヶ月前
【2025年6月最新版】TIOBEインデックスで見る人気プログラミング言語ランキングとは?
2025年6月最新版のTIOBEインデックスから、今人気のプログラミング言語を解説。Python、C、C++、Javaなどの注目度や、インデックスの活用方法も紹介します。
解構人
解構人
4ヶ月前
【2025年6月最新版】TIOBEインデックスで見る人気プログラミング言語ランキングとは?