星評価(レーティング) 実装解説|Star Rating Guide

星評価(レーティング) デザイン見本

星(★)をクリック/ホバーして点数を選べるインタラクティブな星評価と、CSSだけで小数点の平均点を表示する方法をまとめた実装デモ。コピーしてすぐに使える HTML・CSS・JS のコードを掲載。
HTML・CSS・JSコードプレビューツール にて実装確認ができます。

① クリックで点数を選ぶ星評価(入力用)

ホバー/クリックで評価してください

HTML
<div class="star-rating" id="star-rating">
  <button type="button" class="star" aria-label="1点">★</button>
  <button type="button" class="star" aria-label="2点">★</button>
  <button type="button" class="star" aria-label="3点">★</button>
  <button type="button" class="star" aria-label="4点">★</button>
  <button type="button" class="star" aria-label="5点">★</button>
</div>
<p class="star-output" id="star-output">未評価</p>
CSS
.star-rating {
  display: inline-flex;
  gap: 4px;
}
.star {
  background: none;
  border: none;
  padding: 0;
  font-size: 32px;
  line-height: 1;
  cursor: pointer;
  color: #d1d5db;
  transition: color 0.15s ease, transform 0.15s ease;
}
.star:hover {
  transform: scale(1.15);
}
.star.on {
  color: #f59e0b;
}
.star-output {
  margin: 10px 0 0;
  font-size: 14px;
  font-weight: 600;
  color: #374151;
}
JS
(function () {
  var wrap = document.getElementById('star-rating');
  var out = document.getElementById('star-output');
  if (!wrap) return;
  var stars = wrap.querySelectorAll('.star');
  var rating = 0;
  function paint(n) {
    stars.forEach(function (s, i) {
      s.className = i < n ? 'star on' : 'star';
    });
  }
  stars.forEach(function (s, i) {
    s.addEventListener('mouseenter', function () { paint(i + 1); });
    s.addEventListener('click', function () {
      rating = i + 1;
      paint(rating);
      if (out) out.textContent = rating + ' / 5';
    });
  });
  wrap.addEventListener('mouseleave', function () { paint(rating); });
})();
ホバーは一時表示・クリックで確定

星に mouseenter したときは「その星まで」を金色にして仮表示し、コンテナから mouseleave したら確定済みの点数(rating)に戻す。クリックで rating を確定させて表示を更新する。星は ★(&#9733;)を常に並べておき、点灯/消灯は文字色の切り替えだけで表現するのがポイント。button 要素にして aria-label を付けるとキーボードやスクリーンリーダーにも対応できる。

② 小数点の平均点を表示(CSSだけ・JS不要)

★★★★★
★★★★★
4.3
HTML
<div class="star-display" style="--rate: 86%;">
  <div class="star-display-base">★★★★★</div>
  <div class="star-display-fill">★★★★★</div>
</div>
<span class="star-score">4.3</span>
CSS
.star-display {
  position: relative;
  display: inline-block;
  font-size: 28px;
  line-height: 1;
  letter-spacing: 2px;
}
.star-display-base {
  color: #d1d5db;
}
.star-display-fill {
  position: absolute;
  top: 0;
  left: 0;
  width: var(--rate);
  overflow: hidden;
  white-space: nowrap;
  color: #f59e0b;
}
.star-score {
  margin-left: 8px;
  font-size: 16px;
  font-weight: 700;
  color: #374151;
  vertical-align: middle;
}
金色の星を width で切り取る

同じ ★★★★★ を2枚重ね、下はグレー、上は金色にする。上の金色レイヤーに overflow: hidden を掛け、width を「点数 ÷ 5 × 100%」にすると、指定した割合だけ星が金色に見える。4.3点なら 86% を指定するだけ。カスタムプロパティ(–rate)で幅を渡せば、点数を変えたいときに1か所直すだけで済む。JavaScript を使わずレビュー平均などの表示ができる。

③ 色・形・サイズのバリエーション

★★★★★ゴールドの星
♥♥♥♥♥ハート(♥)
★★★★★大きめ・ティール
HTML
<span class="stars gold">★★★★★</span>
<span class="stars heart">♥♥♥♥♥</span>
<span class="stars teal big">★★★★★</span>
CSS
.stars {
  letter-spacing: 3px;
  font-size: 24px;
  line-height: 1;
}
.stars.gold  { color: #f59e0b; }
.stars.heart { color: #ef4444; }
.stars.teal  { color: #14b8a6; }
.stars.big   { font-size: 34px; }
文字色・font-size・記号を変えるだけ

星は画像ではなく文字(★=&#9733; / ♥=&#9829;)なので、色は color、大きさは font-size を変えるだけで自由に調整できる。記号を ♥ に差し替えれば「いいね」風のハート評価にもなる。文字なので拡大しても輪郭がぼやけず、読み込みも速い。星の間隔は letter-spacing で整える。

アクセシビリティのヒント:入力用の星は <button> にして aria-label(例:「3点」)を付けると、キーボード操作やスクリーンリーダーにも対応できます。表示専用の平均点には、数値(例: 4.3)もあわせて置くと確実に伝わります。

当サイトで公開しているWebデザインやUIの実装例は、一覧として以下記事に纏めています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次