Twitterのブートストラップで水平のフォーム内にインラインでフォームを作成しますか?


200

自家製のクラスなしで、このようなフォーム(以下のリンクを参照)をTwitterブートストラップでデザインする最良の方法は何ですか?

次の例のように、form-horizo​​ntalの内部にinner form-inlineを設定することは可能ですか?

UIゴールのスクリーンショット

回答:


317

<form>タグをネストしないでください。これは機能しません。Bootstrapクラスを使用するだけです。

ブートストラップ3

<form class="form-horizontal" role="form">
    <div class="form-group">
      <label for="inputType" class="col-md-2 control-label">Type</label>
      <div class="col-md-3">
          <input type="text" class="form-control" id="inputType" placeholder="Type">
      </div>
    </div>
    <div class="form-group">
        <span class="col-md-2 control-label">Metadata</span>
        <div class="col-md-6">
            <div class="form-group row">
                <label for="inputKey" class="col-md-1 control-label">Key</label>
                <div class="col-md-2">
                    <input type="text" class="form-control" id="inputKey" placeholder="Key">
                </div>
                <label for="inputValue" class="col-md-1 control-label">Value</label>
                <div class="col-md-2">
                    <input type="text" class="form-control" id="inputValue" placeholder="Value">
                </div>
            </div>
        </div>
    </div>
</form>

この動作はさまざまな方法で実現できます。これは単なる例です。このbootplyでテストします

ブートストラップ2

<form class="form-horizontal">
    <div class="control-group">
        <label class="control-label" for="inputType">Type</label>
        <div class="controls">
            <input type="text" id="inputType" placeholder="Type">
        </div>
    </div>
    <div class="control-group">
        <span class="control-label">Metadata</span>
        <div class="controls form-inline">
            <label for="inputKey">Key</label>
            <input type="text" class="input-small" placeholder="Key" id="inputKey">
            <label for="inputValue">Value</label>
            <input type="password" class="input-small" placeholder="Value" id="inputValue">
        </div>
    </div>
</form>

.form-inline内で適切なスタイリングを取得するために使用していることに注意してください.controls
あなたはこの jsfiddleでそれをテストすることができます


3
また、divにフォームクラスを追加することもできます。私の場合は、span6 divに垂直フォームクラスを使用し、span12 divに水平フォームクラスを使用しました
Iftah

3
これはbootstrap2で機能します。ブートストラップ3をご覧ください:stackoverflow.com/questions/18429121/...
トミスラフMuic

1
ブートストラップ3で、入力の下にギャップがある場合は、「フォームグループ」を削除します。使用する各divの下部に15pxのギャップを追加します。
darkzangel

Key + Valueの例では、フォームグループと行を混在させる必要はありません。@ rap-2-h:サンプルコードをコピーして貼り付け、[実行]をクリックします。
セバスチャン

これは機能しますが、Bootstrap 3の現在のバージョンでそれを簡略化することができました... div内に入力コントロールを配置するだけでこのソリューションの鍵となるようです。そうしないと、col-xxグリッドレイアウトが機能しません。フォームグループをネストする必要はありませんでした。親col-xx-#は同じdivを共有でき、親フォームはすでにフォーム水平(100%)であるため、「行」クラスは必要ありません。
Tony Wall

92

上記のブートストラップ3の例では機能しますが、フォームグループを使用するのではなく、複雑になりすぎて、インラインにするフィールドにform-inlineを使用します。

例えば:

<div class="form-group">
     <label>CVV</label>
     <input type="text" size="4" class="form-control" />
</div>

<div class="form-inline">
      <label>Expiration (MM/YYYY)</label><br>
      <input type="text" size="2" class="form-control" /> / <input type="text" size="4" class="form-control" />
</div>

"display:block"を設定するフォームコントロールクラスのため、機能しない場合があります。これを「display:inline-block」にオーバーライドすると、機能するはずです。
セドリック・ギエメット2014年

1
これは機能していません。質問がすることを実行してみてください。これはform-inlineでは不可能です。
セバスチャン

これに関する唯一の問題は、サブエリアが全幅に拡張されず、グリッドのサイズ変更を使用しようとすると、必要な最小コンテンツ幅に関連して押しつぶされることです。他の解決策は、それほど多くのdivがない場合の方が優れています(そこでの私のコメントを参照)。
Tony Wall

3
すべてのフォームグループをフォームインラインクラスでラップする必要があります
ymakux

jsfiddle.net/9637fywbこれは、現在の最新のブートストラップCDN(3.3.5)を使用して、期待どおりに動作しないようです。この例では、「インライン」セクション内の2つのラベルも考慮されていません。おそらくフィドルにある種のラッパーがありませんが、もしそうなら、それは答えに含まれるべきだと思われます。
emragins 2015年

14

これは、1つのcssクラスを持つtwitterブートストラップ3.xを使用して、ラベルを入力の上に配置します。ここにフィドルリンクがあります。結果パネルが効果を確認するのに十分な幅に拡大されていることを確認してください。

HTML:

  <div class="row myform">
     <div class="col-md-12">
        <form name="myform" role="form" novalidate>
           <div class="form-group">
              <label class="control-label" for="fullName">Address Line</label>
              <input required type="text" name="addr" id="addr" class="form-control" placeholder="Address"/>
           </div>

           <div class="form-inline">
              <div class="form-group">
                 <label>State</label>
                 <input required type="text" name="state" id="state" class="form-control" placeholder="State"/>
              </div>

              <div class="form-group">
                 <label>ZIP</label>
                 <input required type="text" name="zip" id="zip" class="form-control" placeholder="Zip"/>
              </div>
           </div>

           <div class="form-group">
              <label class="control-label" for="country">Country</label>
              <input required type="text" name="country" id="country" class="form-control" placeholder="country"/>
           </div>
        </form>
     </div>
  </div>

CSS:

.myform input.form-control {
   display: block;  /* allows labels to sit on input when inline */
   margin-bottom: 15px; /* gives padding to bottom of inline inputs */
}

2

ブートストラップ4以降では、div class = "form-row"をdiv class = "form-group col-X"と組み合わせて使用​​します。Xは必要な幅です。素敵なインライン列が表示されます。フィドルを参照してください。

<form class="form-horizontal" name="FORMNAME" method="post" action="ACTION" enctype="multipart/form-data">
    <div class="form-group">
        <label class="control-label col-sm-2" for="naam">Naam:&nbsp;*</label>
        <div class="col-sm-10">
            <input type="text" require class="form-control" id="naam" name="Naam" placeholder="Uw naam" value="{--NAAM--}" >
            <div id="naamx" class="form-error form-hidden">Wat is uw naam?</div>
        </div>
    </div>

    <div class="form-row">

        <div class="form-group col-5">
            <label class="control-label col-sm-4" for="telefoon">Telefoon:&nbsp;*</label>
            <div class="col-sm-12">
                <input type="tel" require class="form-control" id="telefoon" name="Telefoon" placeholder="Telefoon nummer" value="{--TELEFOON--}" >
                <div id="telefoonx" class="form-error form-hidden">Wat is uw telefoonnummer?</div>
            </div>
        </div>

        <div class="form-group col-5">
            <label class="control-label col-sm-4" for="email">E-mail: </label>
            <div class="col-sm-12">
                <input type="email" require class="form-control" id="email" name="E-mail" placeholder="E-mail adres" value="{--E-MAIL--}" >
                <div id="emailx" class="form-error form-hidden">Wat is uw e-mail adres?</div>
                    </div>
                </div>

        </div>

    <div class="form-group">
        <label class="control-label col-sm-2" for="titel">Titel:&nbsp;*</label>
        <div class="col-sm-10">
            <input type="text" require class="form-control" id="titel" name="Titel" placeholder="Titel van uw vraag of aanbod" value="{--TITEL--}" >
            <div id="titelx" class="form-error form-hidden">Wat is de titel van uw vraag of aanbod?</div>
        </div>
    </div>
<from>

1

私はこれが古い答えであることを知っていますが、これが私が通常行うことです:

CSS:

.form-control-inline {
   width: auto;
   float:left;
   margin-right: 5px;
}

次に、インライン化するフィールドをdivでラップし、.form-control-inlineを入力に追加します。例:

HTML

<label class="control-label">Date of birth:</label>
<div>
<select class="form-control form-control-inline" name="year"> ... </select>
<select class="form-control form-control-inline" name="month"> ... </select>
<select class="form-control form-control-inline" name="day"> ... </select>
</div>

1

簡単にするためclass="form-inline"に、入力の前にaを追加するだけです。

例:

<div class="col-md-4 form-inline"> //add the class here...
     <label>Lot Size:</label>
     <input type="text" value="" name="" class="form-control" >
 </div>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.