BootstrapVueのフォームコンポーネントと、必要に応じてインラインフォームスタイルと検証状態をサポートするヘルパーコンポーネント。他のBootstrapVueフォームコントロールコンポーネントと組み合わせて、カスタマイズされた、応答性の高いレイアウトを、一貫したルックアンドフィールで簡単に実現できます。
すべての入力には、適切なtype
(例:メールアドレスの場合はemail
、数値情報の場合はnumber
)を使用し、メール検証、数値選択などの新しい入力コントロールを利用するようにしてください。
BootstrapVueのフォームスタイルを示す簡単な例を次に示します。サポートされているコンポーネント、フォームレイアウトなどのドキュメントについては、以下をお読みください。
<template>
<div>
<b-form @submit="onSubmit" @reset="onReset" v-if="show">
<b-form-group
id="input-group-1"
label="Email address:"
label-for="input-1"
description="We'll never share your email with anyone else."
>
<b-form-input
id="input-1"
v-model="form.email"
type="email"
placeholder="Enter email"
required
></b-form-input>
</b-form-group>
<b-form-group id="input-group-2" label="Your Name:" label-for="input-2">
<b-form-input
id="input-2"
v-model="form.name"
placeholder="Enter name"
required
></b-form-input>
</b-form-group>
<b-form-group id="input-group-3" label="Food:" label-for="input-3">
<b-form-select
id="input-3"
v-model="form.food"
:options="foods"
required
></b-form-select>
</b-form-group>
<b-form-group id="input-group-4" v-slot="{ ariaDescribedby }">
<b-form-checkbox-group
v-model="form.checked"
id="checkboxes-4"
:aria-describedby="ariaDescribedby"
>
<b-form-checkbox value="me">Check me out</b-form-checkbox>
<b-form-checkbox value="that">Check that out</b-form-checkbox>
</b-form-checkbox-group>
</b-form-group>
<b-button type="submit" variant="primary">Submit</b-button>
<b-button type="reset" variant="danger">Reset</b-button>
</b-form>
<b-card class="mt-3" header="Form Data Result">
<pre class="m-0">{{ form }}</pre>
</b-card>
</div>
</template>
<script>
export default {
data() {
return {
form: {
email: '',
name: '',
food: null,
checked: []
},
foods: [{ text: 'Select One', value: null }, 'Carrots', 'Beans', 'Tomatoes', 'Corn'],
show: true
}
},
methods: {
onSubmit(event) {
event.preventDefault()
alert(JSON.stringify(this.form))
},
onReset(event) {
event.preventDefault()
this.form.email = ''
this.form.name = ''
this.form.food = null
this.form.checked = []
this.show = false
this.$nextTick(() => {
this.show = true
})
}
}
}
</script>
<b-form>
にinline
プロパティを使用すると、一連のラベル、フォームコントロール、およびボタンを1つの水平行に表示できます。インラインフォーム内のフォームコントロールは、デフォルトの状態とは若干異なります。
- コントロールは
display: flex
で、HTMLの空白を折りたたみ、スペーシングおよびフレックスボックスユーティリティを使用して配置制御を行うことができます。 - コントロールと入力グループは、Bootstrapのデフォルト幅である幅:100%を上書きするために
width: auto
を受け取ります。 - コントロールは、モバイルデバイスの狭いビューポートを考慮して、幅が少なくとも576pxのビューポートでのみインライン表示されます。
個々のフォームコントロールの幅と配置は、スペーシングユーティリティを使用して手動で処理する必要がある場合があります(下記参照)。最後に、フォームコントロールごとに常に<label>
を含めるようにしてください。クラス.sr-only
を使用してスクリーンリーダー以外の訪問者から非表示にする必要がある場合でも同様です。
<div>
<b-form inline>
<label class="sr-only" for="inline-form-input-name">Name</label>
<b-form-input
id="inline-form-input-name"
class="mb-2 mr-sm-2 mb-sm-0"
placeholder="Jane Doe"
></b-form-input>
<label class="sr-only" for="inline-form-input-username">Username</label>
<b-input-group prepend="@" class="mb-2 mr-sm-2 mb-sm-0">
<b-form-input id="inline-form-input-username" placeholder="Username"></b-form-input>
</b-input-group>
<b-form-checkbox class="mb-2 mr-sm-2 mb-sm-0">Remember me</b-form-checkbox>
<b-button variant="primary">Save</b-button>
</b-form>
</div>
カスタムフォームコントロールとセレクトもサポートされています。
<div>
<b-form inline>
<label class="mr-sm-2" for="inline-form-custom-select-pref">Preference</label>
<b-form-select
id="inline-form-custom-select-pref"
class="mb-2 mr-sm-2 mb-sm-0"
:options="[{ text: 'Choose...', value: null }, 'One', 'Two', 'Three']"
:value="null"
></b-form-select>
<b-form-checkbox class="mb-2 mr-sm-2 mb-sm-0">Remember my preference</b-form-checkbox>
<b-button variant="primary">Save</b-button>
</b-form>
</div>
注:<b-form-group>
は、レイアウトの競合により、inline
フォームではサポートされていません。
隠しラベルの代替
すべての入力にラベルを含めないと、スクリーンリーダーなどの支援技術はフォームで問題が発生します。これらのインラインフォームでは、.sr-only
クラスを使用してラベルを非表示にできます。支援技術にラベルを提供するための代替メソッドは、aria-label
、aria-labelledby
またはtitle
属性などです。これらのいずれも存在しない場合、支援技術は、存在する場合はplaceholder
属性の使用に頼ることがありますが、他のラベル付けメソッドの代わりとしてplaceholder
を使用することは推奨されないことに注意してください。
以下も参照してください
Form
プラグインでは、次のヘルパーコンポーネントを使用できます
<b-form-text>
入力のヘルプテキストブロック <b-form-invalid-feedback>
入力invalid
状態の無効なフィードバックテキストブロック <b-form-valid-feedback>
入力valid
状態の有効なフィードバックテキストブロック <b-form-datalist>
<b-form-input>
またはプレーンな<input>
で使用する<datalist>
を簡単に作成
フォームテキストヘルパー
<b-form-text>
ヘルパーコンポーネントを使用して、入力の下にヘルプテキストのブロックを表示します。テキストは、ミュートされた色とわずかに小さいフォントサイズで表示されます。
ヒント:ヘルプテキストは、aria-describedby
属性を使用して、関連するフォームコントロールに明示的に関連付ける必要があります。これにより、スクリーンリーダーなどの支援技術は、ユーザーがコントロールにフォーカスするか入力すると、このヘルプテキストをアナウンスします。
<div>
<b-form @submit.stop.prevent>
<label for="text-password">Password</label>
<b-form-input type="password" id="text-password" aria-describedby="password-help-block"></b-form-input>
<b-form-text id="password-help-block">
Your password must be 8-20 characters long, contain letters and numbers, and must not
contain spaces, special characters, or emoji.
</b-form-text>
</b-form>
</div>
フィードバックヘルパー
<b-form-valid-feedback>
および<b-form-invalid-feedback>
ヘルパーコンポーネントは、色付きのテキストのブロックとしてフィードバック(入力状態に基づく)を表示します。これらは入力(兄弟)の後に配置され、入力のブラウザネイティブ検証状態に基づいて表示されます。強制的に表示するには、プロパティforce-show
をtrue
に設定するか、コントロールのstate
をフィードバックヘルパーのstate
プロパティにバインドするか、親要素(フォームなど)にwas-validated
クラスを設定します。詳細については、以下の検証セクションを参照してください。
オプションのブールプロパティtooltip
を使用すると、表示をブロックから静的なツールチップスタイルに変更できます。フィードバックは通常、フォームコントロールの下に表示されます。このモードを有効にする場合は、親コンテナーにposition: relative:
cssスタイル(またはposition-relative
クラス)が必要です。ツールチップスタイルのフィードバックは、その位置が静的であるため、他の入力、ラベルなどを不明瞭にする場合があることに注意してください。
注:<b-form-radio>
、<b-form-checkbox>
、<b-form-file>
などの一部のフォームコントロールには、フィードバックテキストが自動的に表示されないようにするラッパー要素があります(フィードバックコンポーネントがフォームコントロールの入力の直接の兄弟ではないため)。フィードバックコンポーネントのstate
プロパティ(フォームコントロールの状態にバインドされている)またはforce-show
プロパティを使用して、フィードバックを表示します。
<template>
<div>
<b-form @submit.stop.prevent>
<label for="feedback-user">User ID</label>
<b-form-input v-model="userId" :state="validation" id="feedback-user"></b-form-input>
<b-form-invalid-feedback :state="validation">
Your user ID must be 5-12 characters long.
</b-form-invalid-feedback>
<b-form-valid-feedback :state="validation">
Looks Good.
</b-form-valid-feedback>
</b-form>
</div>
</template>
<script>
export default {
data() {
return {
userId: ''
}
},
computed: {
validation() {
return this.userId.length > 4 && this.userId.length < 13
}
}
}
</script>
データリストヘルパー
<datalist>
要素をサポートするブラウザーの場合、<b-form-datalist>
ヘルパーコンポーネントを使用すると、options
プロパティに渡された配列を介して、<datalist>
および子<option>
要素をすばやく作成できます。
また、<b-form-datalist>
内に<option>
要素を手動で提供することもできます。これらは、options
プロパティから生成された<option>
要素の下に表示されます。
<template>
<div>
<label for="input-with-list">Input with datalist</label>
<b-form-input list="input-list" id="input-with-list"></b-form-input>
<b-form-datalist id="input-list" :options="options"></b-form-datalist>
</div>
</template>
<script>
export default {
data() {
return {
options: ['Apple', 'Banana', 'Grape', 'Kiwi', 'Orange']
}
}
}
</script>
<b-form-datalist>
は、<b-datalist>
の短いエイリアスでも使用できます。
以下も参照してください
バリデーション
<b-form>
にnovalidate
プロパティをtrue
に設定することで、ブラウザのネイティブなHTML5バリデーションを無効にできます。
<b-form>
のvalidated
プロパティをtrue
に設定すると、Bootstrap v4の.was-validated
クラスがフォームに追加され、バリデーション状態がトリガーされます。
すべてのフォームコントロールは、state
プロパティをサポートしており、これを使用してフォームコントロールを3つのコンテキスト状態のいずれかに設定できます。
false
(無効状態を示す) は、必須フィールドまたはブロックしているフィールドがある場合に最適です。ユーザーはフォームを送信するために、このフィールドを正しく入力する必要があります。 true
(有効状態を示す) は、フォーム全体でフィールドごとのバリデーションがあり、残りのフィールドを通してユーザーを促したい場合に最適です。 null
バリデーション状態を表示しません (有効でも無効でもない)。
新しいBootstrap v4バリデーション状態の詳細については、Bootstrap v4フォームバリデーションドキュメントを参照してください。
バリデーションメカニズム
BootstrapVueでサードパーティのVueベースのバリデーションライブラリを使用する
追加リソース