プログレスバー
シンプルなプログレスバーから複雑なプログレスバーまで、水平方向に積み重ねられたバー、アニメーション付きの背景、テキストラベルをサポートするカスタムプログレスコンポーネントを使用します。
<template>
<div>
<b-progress :value="value" :max="max" show-progress animated></b-progress>
<b-progress class="mt-2" :max="max" show-value>
<b-progress-bar :value="value * (6 / 10)" variant="success"></b-progress-bar>
<b-progress-bar :value="value * (2.5 / 10)" variant="warning"></b-progress-bar>
<b-progress-bar :value="value * (1.5 / 10)" variant="danger"></b-progress-bar>
</b-progress>
<b-button class="mt-3" @click="randomValue">Click me</b-button>
</div>
</template>
<script>
export default {
data() {
return {
value: 45,
max: 100
}
},
methods: {
randomValue() {
this.value = Math.random() * this.max
}
}
}
</script>
値
max
プロパティ(デフォルトは100
)で最大値を設定し、value
プロパティ(デフォルトは0
)で現在の値を設定します。
単一のプロセスで複数のバーを作成する場合は、<b-progress-bar>
サブコンポーネントに`value`プロパティを設定します(詳細は以下の**複数のバー**セクションを参照)。
ラベル
show-progress
(最大値に対するパーセンテージ)またはshow-value
(現在の絶対値)を有効にすることで、プログレスバーにラベルを追加できます。precision
プロパティ(デフォルトは小数点以下の桁数0
)を使用して精度(小数点以下の桁数)を設定することもできます。
<template>
<div>
<h5>No label</h5>
<b-progress :value="value" :max="max" class="mb-3"></b-progress>
<h5>Value label</h5>
<b-progress :value="value" :max="max" show-value class="mb-3"></b-progress>
<h5>Progress label</h5>
<b-progress :value="value" :max="max" show-progress class="mb-3"></b-progress>
<h5>Value label with precision</h5>
<b-progress :value="value" :max="max" :precision="2" show-value class="mb-3"></b-progress>
<h5>Progress label with precision</h5>
<b-progress :value="value" :max="max" :precision="2" show-progress class="mb-3"></b-progress>
</div>
</template>
<script>
export default {
data() {
return {
value: 33.333333333,
max: 50
}
}
}
</script>
カスタムプログレスラベル
ラベルをより細かく制御する必要がある場合は、<b-progress-bar>
サブコンポーネント内のデフォルトスロットを使用するか、<b-progress-bar>
のlabel
またはlabel-html
プロパティを使用します。
<template>
<div>
<h5>Custom label via default slot</h5>
<b-progress :max="max" height="2rem">
<b-progress-bar :value="value">
<span>Progress: <strong>{{ value.toFixed(2) }} / {{ max }}</strong></span>
</b-progress-bar>
</b-progress>
<h5 class="mt-3">Custom label via property</h5>
<b-progress :max="max">
<b-progress-bar :value="value" :label="`${((value / max) * 100).toFixed(2)}%`"></b-progress-bar>
</b-progress>
<h5 class="mt-3">Custom label via property (HTML support)</h5>
<b-progress :max="max">
<b-progress-bar :value="value" :label-html="`<del>${value}</del>`"></b-progress-bar>
</b-progress>
</div>
</template>
<script>
export default {
data() {
return {
value: 33.333333333,
max: 50
}
}
}
</script>
ラベル設定方法の優先順位(上位が優先されます)
<b-progress-bar>
のデフォルトスロット <b-progress-bar>
のlabel
プロパティ <b-progress-bar>
のshow-progress
プロパティ <b-progress-bar>
のshow-value
プロパティ <b-progress>
のshow-progress
プロパティ <b-progress>
のshow-value
プロパティ - ラベルなし
幅と高さ
<b-progress>
は常に親コンテナの最大幅に拡張されます。幅を変更するには、標準のBootstrap列に<b-progress>
を配置するか、標準のBootstrap幅クラスを適用します。
<template>
<div>
<h5>Default width</h5>
<b-progress :value="value" class="mb-3"></b-progress>
<h5>Custom widths</h5>
<b-progress :value="value" class="w-75 mb-2"></b-progress>
<b-progress :value="value" class="w-50 mb-2"></b-progress>
<b-progress :value="value" class="w-25"></b-progress>
</div>
</template>
<script>
export default {
data() {
return {
value: 75
}
}
}
</script>
プログレスバーの高さを制御するには、height
プロパティを使用します。高さの値は標準のCSS寸法(px
、rem
、em
など)である必要があります。デフォルトの高さは1rem
です。
<template>
<div>
<h5>Default height</h5>
<b-progress :value="value" show-progress class="mb-3"></b-progress>
<h5>Custom heights</h5>
<b-progress height="2rem" :value="value" show-progress class="mb-2"></b-progress>
<b-progress height="20px" :value="value" show-progress class="mb-2"></b-progress>
<b-progress height="2px" :value="value"></b-progress>
</div>
</template>
<script>
export default {
data() {
return {
value: 75
}
}
}
</script>
背景
背景バリアントを使用して、個々のプログレスバーの外観を変更します。デフォルトのバリアントはprimary
です。
単色背景バリアント
<template>
<div>
<div v-for="bar in bars" class="row mb-1">
<div class="col-sm-2">{{ bar.variant }}:</div>
<div class="col-sm-10 pt-1">
<b-progress :value="bar.value" :variant="bar.variant" :key="bar.variant"></b-progress>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
bars: [
{ variant: 'success', value: 75 },
{ variant: 'info', value: 75 },
{ variant: 'warning', value: 75 },
{ variant: 'danger', value: 75 },
{ variant: 'primary', value: 75 },
{ variant: 'secondary', value: 75 },
{ variant: 'dark', value: 75 }
],
timer: null
}
},
mounted() {
this.timer = setInterval(() => {
this.bars.forEach(bar => (bar.value = 25 + Math.random() * 75))
}, 2000)
},
beforeDestroy() {
clearInterval(this.timer)
this.timer = null
}
}
</script>
ストライプ背景
striped
を設定すると、CSSグラデーションを使用してプログレスバーの背景バリアント上にストライプが適用されます。
<template>
<div>
<b-progress :value="25" variant="success" :striped="striped"></b-progress>
<b-progress :value="50" variant="info" :striped="striped" class="mt-2"></b-progress>
<b-progress :value="75" variant="warning" :striped="striped" class="mt-2"></b-progress>
<b-progress :value="100" variant="danger" :striped="striped" class="mt-2"></b-progress>
<b-button variant="secondary" @click="striped = !striped" class="mt-3">
{{ striped ? 'Remove' : 'Add' }} Striped
</b-button>
</div>
</template>
<script>
export default {
data() {
return {
striped: true
}
}
}
</script>
アニメーション付きの背景
animated
プロパティを設定すると、ストライプグラデーションをアニメーション化することもできます。
<template>
<div>
<b-progress :value="25" variant="success" striped :animated="animate"></b-progress>
<b-progress :value="50" variant="info" striped :animated="animate" class="mt-2"></b-progress>
<b-progress :value="75" variant="warning" striped :animated="animate" class="mt-2"></b-progress>
<b-progress :value="100" variant="danger" :animated="animate" class="mt-3"></b-progress>
<b-button variant="secondary" @click="animate = !animate" class="mt-3">
{{ animate ? 'Stop' : 'Start' }} Animation
</b-button>
</div>
</template>
<script>
export default {
data() {
return {
animate: true
}
}
}
</script>
備考
animated
がtrueの場合、striped
は自動的に有効になります。 - Opera 12では、CSS3アニメーションをサポートしていないため、アニメーション付きのプログレスバーは機能しません。
- このコンポーネントのアニメーション効果は、
prefers-reduced-motion
メディアクエリに依存しています。詳細については、アクセシビリティドキュメントの低モーションに関するセクションを参照してください。
複数のバー
<b-progress>
コンポーネントに複数の<b-progress-bar>
サブコンポーネントを含めて、水平方向に積み重ねられたプログレスバーセットを作成します。
<template>
<div>
<b-progress :max="max" class="mb-3">
<b-progress-bar variant="primary" :value="values[0]"></b-progress-bar>
<b-progress-bar variant="success" :value="values[1]"></b-progress-bar>
<b-progress-bar variant="info" :value="values[2]"></b-progress-bar>
</b-progress>
<b-progress show-progress :max="max" class="mb-3">
<b-progress-bar variant="primary" :value="values[0]"></b-progress-bar>
<b-progress-bar variant="success" :value="values[1]"></b-progress-bar>
<b-progress-bar variant="info" :value="values[2]"></b-progress-bar>
</b-progress>
<b-progress show-value striped :max="max" class="mb-3">
<b-progress-bar variant="primary" :value="values[0]"></b-progress-bar>
<b-progress-bar variant="success" :value="values[1]"></b-progress-bar>
<b-progress-bar variant="info" :value="values[2]"></b-progress-bar>
</b-progress>
<b-progress :max="max">
<b-progress-bar variant="primary" :value="values[0]" show-progress></b-progress-bar>
<b-progress-bar variant="success" :value="values[1]" animated show-progress></b-progress-bar>
<b-progress-bar variant="info" :value="values[2]" striped show-progress></b-progress-bar>
</b-progress>
</div>
</template>
<script>
export default {
data() {
return {
values: [15, 30, 20],
max: 100
}
}
}
</script>
<b-progress-bar>
は<b-progress>
親コンポーネントのプロパティの大部分を継承しますが、<b-progress-bar>
でプロパティを設定することで、任意のプロパティを上書きできます。
備考
height
を指定する場合は、常に<b-progress>
コンポーネントで設定する必要があります。 <b-progress-bar>
は<b-progress>
からvalue
を継承しません。