インラインフォーム内の全幅テキスト入力をブートストラップする


138

コンテナー領域の幅全体に収まるテキストボックスを作成するのに苦労しています。

<div class="row">
    <div class="col-md-12">
        <form class="form-inline" role="form">           
                <input type="text" class="form-control input-lg" id="search-church" placeholder="Your location (City, State, ZIP)">
                <button type="submit" class="btn btn-lg">Search</button>            
        </form>
    </div>
</div>

上記を実行すると、予想どおり、2つのフォーム要素はインラインになりますが、せいぜい数列を超えないようにしてください。Firebugでcol-md-12divにカーソルを合わせると、予想される全幅を占めていることがわかります。埋められないように見えるのは、テキスト入力だけです。インラインの幅の値を追加してみましたが、何も変わりませんでした。これは簡単なはずですが、今は本当に馬鹿げているように感じます。

ここにフィドルがあります:http : //jsfiddle.net/52VtD/4119/embedded/result/

編集:

選ばれた答えはあらゆる点で徹底的であり、素晴らしい助けです。それは私が最終的に使用したものです。しかし、私の最初の問題は、実際にはVisual Studio 2013内のデフォルトのMVC5テンプレートの問題だったと思います。これには、Site.cssに含まれていました。

input,
select,
textarea {
    max-width: 280px;
}

明らかにそれがテキスト入力の適切な拡張を妨げていました...将来のASP.NETテンプレートユーザーへの公正な警告...


6
デフォルトのMVC5テンプレートの問題について、2番目に見つけたいと思います。私はこの問題を調査し、ブートストラップで(誤って)呪いをかけるのに1時間費やしましたが、jsfiddleで動作するサンプルを見つけて、クリーンなHTMLページから再開するように促しましたが、問題なく動作しました。それから初めて、VS2013テンプレートに問題があることがわかり、この投稿を見つけました。善は最大幅の決定の理由を知っていますが、他の人のコードを使用するときには注意が必要であることを示しています。このような問題で立ち往生しているときに基本に戻ることの証拠でもあります。
Jason Snelders 2014年

2
おかげで、同じくasp.netテンプレートを使用しましたが、入力のmax-widthを既にnoneに設定していますが、手動で100%に設定した場合にのみ、全体の幅を取りません。しかし、その右のボタンが下がるので、同じ線に留めておきたい。
Ronen Festinger 14

@Killnineあなたの質問の編集は私の頭痛を解決しました。それは実際に問題でした、あなたの投稿を編集してくれてありがとう!
Flame_Phoenix 2015

私は自分のsite.cssファイルからそのCSSのビットを削除しましたが、それでも同じ問題が発生しています。何か案は?
dave317 2016

1
だいおう!これに苦労していて、MVCの問題であることが判明しました!テキストボックスのcssプロパティを調べないのはなんてばかげています。これを指摘してくれてありがとう!
ハジャット2017年

回答:


99

ブートストラップのドキュメントはこれについて言っています

カスタム幅が必要です入力、選択、テキストエリアは、ブートストラップではデフォルトで100%幅です。インラインフォームを使用するには、内部で使用されるフォームコントロールに幅を設定する必要があります。

すべてのフォーム要素がクラスを取得したときに取得するデフォルトの幅100%は、フォームでクラスform-controlを使用する場合は適用されませんでしたform-inline

この部分が見つかるbootstrap.css(または.less、好きなもの)を見ることができます。

.form-inline {

  // Kick in the inline
  @media (min-width: @screen-sm-min) {
    // Inline-block all the things for "inline"
    .form-group {
      display: inline-block;
      margin-bottom: 0;
      vertical-align: middle;
    }

    // In navbar-form, allow folks to *not* use `.form-group`
    .form-control {
      display: inline-block;
      width: auto; // Prevent labels from stacking above inputs in `.form-group`
      vertical-align: middle;
    }
    // Input groups need that 100% width though
    .input-group > .form-control {
      width: 100%;
    }

    [...]
  }
}

多分あなたはinput-groupsを見ておくべきでしょう、私はそれらがあなたが使いたいマークアップを正確に持っていると思うので(ここで作業フィドル):

<div class="row">
   <div class="col-lg-12">
    <div class="input-group input-group-lg">
      <input type="text" class="form-control input-lg" id="search-church" placeholder="Your location (City, State, ZIP)">
      <span class="input-group-btn">
        <button class="btn btn-default btn-lg" type="submit">Search</button>
      </span>
    </div>
  </div>
</div>

3
上記の私の編集を参照してください。ASP.NETテンプレートのSite.cssが、これに私を導いてくれたと思います。ただし、これは素晴らしい答えであり、将来の参照に非常に役立ちます。
Killnine 2014

5
入力グループはこれに進む方法です。個人的には、入力のすぐ横にボタンを配置したくない場合は、インライングループのように入力グループのスタイルを調整します。Bootstrap LESSを含む作業デモが含まれています:jsfiddle.net/silb3r/gwxc5c75
cfx

1
いいね!私は質問がブートストラップ固有であることを知っていますが、他の誰かがそれをブートストラップレス(ブートストラップLESSではない)サイトにドロップしたい場合は、関連するスタイルをここで抽出しました:stackoverflow.com/a/27413796/1241736
henry

FiddleのBootstrapリンクが壊れています。Bootstrapの新しいバージョンを指している可能性があり、Fiddleは機能していません。
クロエ

@Chloeそうですね、フィドルはもう存在しないブートストラップcssファイルを使用していました。私はフィドルを更新しました、それは再び働いています。
morten.c

32

次のようなものを見てください:

<form role="form">  
    <div class="row">
      <div class="col-xs-12">
        <div class="input-group input-group-lg">
            <input type="text" class="form-control" />
          <div class="input-group-btn">
            <button type="submit" class="btn">Search</button>
          </div><!-- /btn-group -->
        </div><!-- /input-group -->
      </div><!-- /.col-xs-12 -->
    </div><!-- /.row -->
</form>

http://jsfiddle.net/n6c7v/1/


10

同様の質問で述べたように、input-groupクラスのインスタンスを削除してみて、それが役立つかどうかを確認してください。

ブートストラップについて:

個々のフォームコントロールは自動的にグローバルスタイルを受け取ります。.form-controlを持つすべてのテキスト、、および要素は、幅100%に設定されます。デフォルトでは。ラベルとコントロールを.form-groupでラップして、最適な間隔にします。


これはインラインフォームには適用されません。したがって、入力グループを強制的に100%にする必要があります
user441058


1

Bootstrap> 4.1では、フレックスボックスユーティリティクラスを使用する場合にすぎません。列内にflexboxコンテナーを配置し、その中のすべての要素に「flex-fill」クラスを指定します。インラインフォームと同様に、要素のマージン/パディングを自分で設定する必要があります。

.prop-label {
    margin: .25rem 0 !important;
}

.prop-field {
    margin-left: 1rem;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<div class="row">
	<div class="col-12">
		<div class="d-flex">
			<label class="flex-fill prop-label">Label:</label>
			<input type="text" class="flex-fill form-control prop-field">
		</div>
	</div>
</div>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.