ブートストラップ付きの固定幅ボタン


182

Bootstrapは固定幅のボタンをサポートしていますか?現在、「保存」と「ダウンロード」の2つのボタンがある場合、ボタンのサイズはコンテンツに基づいて変わります。

また、Bootstrapを拡張する正しい方法は何ですか?


固定幅とは、中身が伸びないということですか?ボタンは、その中のテキストによってのみ制限されます。
Andres Ilich

@AndresIlich現在、「保存」と「ダウンロード」の2つのボタンがある場合、ボタンのサイズはコンテンツに基づいて変化します
aWebDeveloper

それで、同じ幅の2つのボタンを正しくしたいですか?
Andres Ilich

回答:


318

.btn-blockボタンのクラスを使用して、親の幅に拡張することもできます。

親が固定幅要素の場合、ボタンはすべての幅になるように拡張されます。コンテナに既存のマークアップを適用して、固定/流体ボタンが必要なスペースのみを占めるようにすることができます。

<div class="span2">
<p><button class="btn btn-primary btn-block">Save</button></p>
<p><button class="btn btn-success btn-block">Download</button></p>
</div>


71

これを行うには、両方のボタンで問題ないと思われる幅を考え出し、その幅でカスタムクラスを作成して、次のようにボタンに追加します。

CSS

.custom {
    width: 78px !important;
}

次に、このクラスを使用して、次のようにボタンに追加できます。

<p><button href="#" class="btn btn-primary custom">Save</button></p>
<p><button href="#" class="btn btn-success custom">Download</button></p>

デモ:http : //jsfiddle.net/yNsxU/

作成したカスタムクラスを独自のスタイルシート内に配置し、ブートストラップスタイルシートの後にロードすることができます。これは、ブートストラップスタイルシート内に加えた変更がフレームワークの更新時に誤って失われる可能性があるためです。また、変更をデフォルト値よりも優先させる必要があります。


2
emピクセルではなく単位を使用すると、文字の長さで幅を設定できます
svarog

2
@DanDascalescu〜2年後、私は同意しません。作成者は、ボタンを拡張して親全体を埋めた後ではなく、「保存」と書かれたボタンのページの半分になる可能性があります。私はこのようなものをお勧めしますが、必要に応じてメディアクエリを使用します。最大のボタンと同じ大きさのemを作成するためのjavascriptは常にあります。これは通常、私が近づかないパスです
Jacob McKay

38

「btn-group」クラスのdiv内にボタンを配置すると、内部のボタンは最大のボタンと同じサイズに拡大されます。

例えば:

<div class="btn-group">
  <button type="button" class="btn btn-default">Left</button>
  <button type="button" class="btn btn-default">Middle</button>
  <button type="button" class="btn btn-default">Right</button>
</div> 

ブートストラップボタングループ


@tonjo:機能しない理由を詳しく教えてください。実際にはそうであることがわかりました。たとえば、垂直方向の変動を参照してください。
Dan Dascalescu、2014年

2
同じ機能を実現しようとしていますが、上記のコードも機能しません。@DanDascalescu別の方法を見つけましたか?
GelatinFox 2015年

1
これが機能するためには、ボタンもbtn-blockクラスでなければなりません。少なくとも私にとっては。
ガブリエル

5
いいえ、これは機能しません-ボタンのサイズは同じではありません。
Antoniossss

ボタンを分離したいので、余白を追加しました。完璧に働きました。すべて同じ幅。
Tomas Gonzalez

13

ボタンについては、min-widthとmax-widthを指定して、ボタンの特別なクラス用に別のCSSセレクターを作成できます。したがって、ボタンが

<button class="save_button">Save</button>

Bootstrap CSSファイルでは、次のようなものを作成できます

.save_button {
    min-width: 80px;
    max-width: 80px;
}

このように、レスポンシブデザインがある場合でも、常に80pxを維持する必要があります。

Bootstrapを拡張する正しい方法については、次のスレッドをご覧ください。

ブートストラップの拡張


4

BS 4では、サイズ設定を使用し、ボタンが親コンテナーの幅全体を占めるようにw-100を適用することもできます。


3

@ kravits88の答えを拡張する:

これにより、ボタンが全幅に合うように引き伸ばされます。

<div className="btn-group-justified">
<div className="btn-group">
  <button type="button" className="btn btn-primary">SAVE MY DEAR!</button>
</div>
<div className="btn-group">
  <button type="button" className="btn btn-default">CANCEL</button>
</div>
</div>

これはBootstrap 3.3の正解です。 btn-group-justifiedキークラスです。ここではドキュメントを参照してください: getbootstrap.com/docs/3.3/components/...
CXJ

3

btn-group-justifiedとbtn-groupは静的コンテンツでのみ機能し、動的に作成されたボタンでは機能しません。CSSのwith with with buttonsは、すべてのコンテンツが短い場合でも同じ幅を維持するため、実用的ではありません。

私の解決策:ボタンのグループに同じクラスを配置し、それらすべてにループし、最も長いボタンの幅を取得してすべてに適用します

var bwidth=0
$("button.btnGroup").each(function(i,v){
    if($(v).width()>bwidth) bwidth=$(v).width();
});
$("button.btnGroup").width(bwidth);

ここに出力例


1

親コンテナーがレスポンシブである場合、ブロック幅ボタンは簡単にレスポンシブボタンになる可能性があります。重要なのではなく、固定幅とより詳細なセレクターパスの組み合わせを使用すると思います。

1)ハックではありません(ただし、min-widthとmax-widthを同じに設定するのはハックです)

2)悪い習慣である!importantタグを使用しない

3)幅を使用するため、非常に読みやすくなり、CSSでカスケードがどのように機能するかを理解している人は、何が起こっているかを確認できます(このためにCSSコメントを残すことができますか?)

4)ターゲットノードに適用するセレクターを組み合わせて精度を高める

.parent_element .btn.btn-primary.save-button {
    width: 80px;
}

0

ちょうど同じ必要性に遭遇し、固定幅を定義することに満足していませんでした。

だからjqueryでそれをしました:

    var max = Math.max ($("#share_cancel").width (), $("#share_commit").width ());
    $("#share_cancel").width (max);
    $("#share_commit").width (max); 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    <button type="button" class="btn btn-secondary" id="share_cancel">SHORT</button>
    <button type="button" class="btn btn-success" id="share_commit">LOOOOOOOOONG</button>


0

問題を解決する最良の方法は、目的の列幅でボタンブロックbtn-blockを使用することです。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>


    <div class="col-md-12">
      <button class="btn btn-primary btn-block">Save</button>
    </div>
    <div class="col-md-12">
        <button class="btn btn-success btn-block">Download</button>
    </div>


0

ここでは、ボタングループ要素のボタンを比較することで解決策を見つけました。簡単な解決策は、最大の幅のボタンを取得し、その幅を他のボタンに設定することです。したがって、それらは同じ幅を持つことができます。

    function EqualizeButtons(parentElementId) {

    var longest = 0; 
    var element = $(parentElementId);

    element.find(".btn:not(.button-controlled)").each(function () {
        $(this).addClass('button-controlled');
        var width = $(this).width();
        if (longest < width) longest = width;

    }).promise().done(function () {
        $('.button-controlled').width(longest);
    });
}

それは魅力のように働きました。


-4

これはばかげた解決策かもしれませんが、私はこの問題の解決策を探していて、怠惰になりました。

とにかく、ボタンの代わりにinput class = "btn ..." ...を使用し、すべての幅が同じになるようにvalue =属性にスペースを埋め込むと、かなりうまくいきます。

例:

<input type="submit" class="btn btn-primary" value="   Calculate   "/>    
<input type="reset" class="btn btn-primary"value="     Reset       "/>

私はその間ずっとブートストラップを使用していませんでした、そしておそらくこのアプローチを使用しない正当な理由があるかもしれませんが、私も共有したいと思った


あなたが使用している場合は<button>、タグを、あなたが使用する必要があり&nbsp;、たとえば、: <button type="button" class="btn btn-default">&nbsp;Edit&nbsp;</button>
Endy Tjahjono、2015年

私の場合、これは機能しません<a class="btn btn-default btn-sm" href="read.php?id='.$row['id'].'">編集</a>
Minaガブリエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.