带Bootstrap的固定宽度按钮


181

Bootstrap是否支持固定宽度的按钮?当前,如果我有两个按钮,即“保存”和“下载”,则按钮的大小将根据内容而变化。

还有扩展Bootstrap的正确方法是什么?


固定宽度是指它不会随其内部的内容一起增长吗?这些按钮仅受其中文本的限制。
Andres Ilich 2012年

@AndresIlich当前如果我有2个按钮“保存”和“下载”,则按钮的大小将根据内容而变化
aWebDeveloper 2012年

因此,您希望宽度相同的两个按钮正确吗?
Andres Ilich 2012年

Answers:


316

您还可以.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年后,我不同意。在使按钮展开以填充整个父级之后,作者可能不会出现,可能是显示“保存”的按钮的一半页面。我会建议类似的东西,但是如果需要的话,还可以进行媒体查询。总是有JavaScript可以使em像最大的按钮一样大,这通常是我要远离的路径
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

对于您的按钮,可以为那些具有指定的最小宽度和最大宽度的特殊类别的按钮创建另一个CSS选择器。因此,如果您的按钮是

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

在您的Bootstrap CSS文件中,您可以创建类似

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

这样,即使您具有响应式设计,它也应始终保持80px。

就扩展Bootstrap的正确方法而言,请看以下线程:

扩展引导


4

在BS 4中,还可以使用sizing,并应用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中用button固定with的做法不切实际,因为即使所有内容都很短,它都保持相同的宽度。

我的解决方案:将同一个类放到按钮组中,然后循环到所有按钮,获取最长按钮的宽度,并将其应用于所有按钮

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

示例输出在这里


1

如果父容器响应,则块宽度按钮很容易变为响应按钮。我认为结合使用固定宽度和更详细的选择器路径而不是!important是因为:

1)它不是一个hack(但是将min-width和max-width设置为相同是hacky)

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

这可能是一个愚蠢的解决方案,但我一直在寻找解决此问题的方法,因此变得懒惰。

无论如何,使用输入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加百利
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.