HTML / 要素

meter要素の使い方

HTMLのmeter要素は、ディスク使用率や評価値のように、上限と下限が分かっている測定値をゲージとして表す要素です。

先に結論

「今どのくらいか」という範囲内の値にはmeterを使います。minとmaxで範囲を示し、valueで現在の値を示します。

タスクがどこまで完了したかはprogress、計算結果や操作の結果を表示するならoutputです。見た目が似ていても、意味で要素を選びます。

最小の例

<label for="storage-meter">ストレージ使用率</label>
<meter id="storage-meter" min="0" max="100" value="72">72 / 100</meter>

value="72"が現在値、max="100"が上限です。中の72 / 100は、対応していない環境やテキストで状態を確認したい場合のフォールバックとしても役立ちます。

実際に動かす

42 / 100 42 / 100

スライダーを動かすと、JavaScriptがmeter.valueを更新します。meter自身が値を測定するのではなく、アプリケーションが取得した測定値を表示します。この例では、50未満を低い使用量、80を超える値を高い使用量として扱い、低い値をoptimumにしています。

progressとの違い

  • meter — 使用率、温度、評価、投票率など、既知の範囲内にある測定値。
  • progress — ファイルのアップロードなど、タスクの完了状況。
  • output — 価格と数量から計算した合計など、計算や操作の結果。

たとえば、ダウンロード済みの割合はタスクの進捗なのでprogress、ディスク全体に対する使用量は範囲内の測定値なのでmeterです。

6つの属性

属性役割例
min測定範囲の下限。省略時は0。min="0"
max測定範囲の上限。省略時は1。max="100"
value現在の測定値。必ず指定する。value="72"
low低い範囲の上限。low="50"
high高い範囲の下限。high="80"
optimum最適と考える位置。optimum="20"

low・high・optimumは、値が良いか悪いかの基準も表します。高いほど良いのか、低いほど良いのか、中央が良いのかをoptimumから読み取れます。

値の範囲を正しく指定する

minやmaxを省略すると、範囲は0〜1になります。100を表したいのにmaxを書かなければ、value="72"は意図した72%ではありません。単位と範囲を同じ例の中で揃えましょう。

<meter min="0" max="100" value="72">72%</meter>
<meter min="0" max="1" value="0.72">72%</meter>

値が範囲外の場合、ブラウザーはゲージの実際の値を範囲内に収めて扱います。入力値を自分で検証する場合も、min ≤ low ≤ high ≤ maxの関係を崩さないようにします。

フォーム送信との関係

meterは測定値を表示する要素で、フォームの送信項目ではありません。送信したい場合は、表示用のmeterとは別にinput type="hidden"などへ値を同期します。

<meter id="quota-meter" min="0" max="100" value="72">72%</meter>
<input type="hidden" name="quota" value="72">

読みやすく、伝わりやすくする

  • labelなどで、何を測っているかを明確にする。
  • 数値と単位を、ゲージの近くのテキストにも書く。
  • 色だけで「低い・高い・最適」を伝えない。
  • ブラウザーごとの描画差に備え、フォールバックテキストを用意する。
  • 値を更新する場合は、実際の測定値と表示がずれないようにする。

よくある間違い

  • タスクの進捗にmeterを使う。
  • maxを省略したまま、100を上限とする値を入れる。
  • low・high・optimumの意味を確認せず、色だけを頼りにする。
  • meterの値がフォーム送信されると思い込む。

Atlasで確認する

Categories、値の解決、HTMLMeterElement、HTML-AAM、ブラウザー実装の未検証範囲まで確認したい場合は、Yugien Atlasのmeter要素を参照してください。意味の境界はprogress要素とoutput要素でも確認できます。