Boutons à largeur fixe avec Bootstrap

186

Bootstrap prend-il en charge les boutons à largeur fixe? Actuellement, si j'ai 2 boutons, "Enregistrer" et "Télécharger", la taille du bouton change en fonction du contenu.

Quelle est également la bonne façon d'étendre Bootstrap?

aWebDeveloper
la source
Par largeur fixe, voulez-vous dire qu'il ne grandit pas avec le contenu qu'il contient? Les boutons ne sont limités que par le texte à l'intérieur.
Andres Ilich
@AndresIlich Actuellement Si j'ai 2 boutons "Enregistrer" et "Télécharger", la taille du bouton change en fonction du contenu
aWebDeveloper
Alors vous voulez que ces deux boutons de même largeur soient corrects?
Andres Ilich

Réponses:

324

Vous pouvez également utiliser la .btn-blockclasse sur le bouton, afin qu'elle s'étende à la largeur du parent.

Si le parent est un élément de largeur fixe, le bouton s'agrandira pour prendre toute la largeur. Vous pouvez appliquer un balisage existant au conteneur pour vous assurer que les boutons fixes / fluides occupent uniquement l'espace requis.

<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>

Kami
la source
71

Pour ce faire, vous pouvez créer une largeur que vous jugez appropriée pour les deux boutons, puis créer une classe personnalisée avec la largeur et l'ajouter à vos boutons comme ceci:

CSS

.custom {
    width: 78px !important;
}

Je peux ensuite utiliser cette classe et l'ajouter aux boutons comme ceci:

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

Démo: http://jsfiddle.net/yNsxU/

Vous pouvez prendre cette classe personnalisée que vous créez et la placer dans votre propre feuille de style, que vous chargez après la feuille de style bootstrap. Nous faisons cela parce que toutes les modifications que vous placez dans la feuille de style bootstrap peuvent être accidentellement perdues lorsque vous mettez à jour le framework, nous voulons également que vos modifications aient la priorité sur les valeurs par défaut.

Andres Ilich
la source
2
utilisez des emunités au lieu de pixels, ils vous aident à définir la largeur en fonction de la longueur des caractères
svarog
2
@DanDascalescu ~ 2 ans plus tard, je ne suis pas d'accord. L'auteur peut ne pas être après avoir élargi les boutons pour remplir tout le parent, peut-être la moitié de la page pour un bouton qui dit «enregistrer». Je recommanderais quelque chose comme ça, mais avec des requêtes médiatiques si nécessaire. Il y a toujours du javascript pour les rendre aussi gros que le plus gros bouton, c'est généralement un chemin dont je reste à l'écart
Jacob McKay
39

Si vous placez vos boutons à l'intérieur d'un div avec la classe "btn-group", les boutons à l'intérieur s'étireront à la même taille que le plus grand bouton.

par exemple:

<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> 

Groupes de boutons Bootstrap

kravits88
la source
@tonjo: pouvez-vous expliquer pourquoi cela ne fonctionne pas? J'ai trouvé qu'en fait c'est le cas - voir la variation verticale par exemple.
Dan Dascalescu
2
J'essaye d'obtenir la même fonctionnalité, et le code ci-dessus ne fonctionne pas non plus pour moi. @DanDascalescu avez-vous trouvé un autre moyen?
GelatinFox
1
Les boutons doivent également être de classe btn-block pour que cela fonctionne, du moins pour moi.
Gabriel
5
Non, cela ne fonctionne pas - les boutons ne sont pas de la même taille.
Antoniossss
J'ai ajouté une marge supplémentaire à gauche parce que je voulais que les boutons soient séparés. A parfaitement fonctionné. Tous de la même largeur.
Tomas Gonzalez
13

Pour vos boutons, vous pouvez créer un autre sélecteur CSS pour ces classes spéciales de boutons avec une largeur minimale et une largeur maximale spécifiées. Donc, si votre bouton est

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

Dans votre fichier CSS Bootstrap, vous pouvez créer quelque chose comme

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

De cette façon, il devrait toujours rester 80px même si vous avez un design réactif.

En ce qui concerne la bonne façon d'étendre Bootstrap, jetez un œil à ce fil:

Extension de Bootstrap

Marc
la source
4

Avec BS 4, vous pouvez également utiliser le dimensionnement et appliquer w-100 afin que le bouton puisse occuper toute la largeur du conteneur parent.

Prakash GR
la source
3

Expansion de la réponse @ kravits88:

Cela étendra les boutons pour s'adapter à toute la largeur:

<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>
Bhojendra Rauniyar
la source
C'est la bonne réponse pour Bootstrap 3.3. btn-group-justifiedest la classe clé. Voir la documentation ici: getbootstrap.com/docs/3.3/components/…
CXJ
3

btn-group-justifié et btn-group ne fonctionnent que pour le contenu statique mais pas sur les boutons créés dynamiquement, et corrigé avec un bouton en css n'est pas pratique car il reste sur la même largeur même tout le contenu est court.

Ma solution: mettre la même classe dans un groupe de boutons puis boucler sur chacun d'eux, obtenir la largeur du bouton le plus long et l'appliquer à tous

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

Exemple de sortie ici

Dards
la source
1

Un bouton de largeur de bloc peut facilement devenir un bouton réactif si le conteneur parent est réactif. Je pense que l'utilisation d'une combinaison d'une largeur fixe et d'un chemin de sélecteur plus détaillé au lieu de! Important car:

1) Ce n'est pas un hack (régler la largeur min et la largeur maximale de la même manière est cependant hacky)

2) N'utilise pas la balise! Important, ce qui est une mauvaise pratique

3) Utilise la largeur et sera donc très lisible et quiconque comprend comment fonctionne la cascade en CSS verra ce qui se passe (peut-être laisser un commentaire CSS à ce sujet?)

4) Combinez vos sélecteurs qui s'appliquent à votre nœud ciblé pour une précision accrue

.parent_element .btn.btn-primary.save-button {
    width: 80px;
}
Alpha G33k
la source
0

Je viens de rencontrer le même besoin et n'a pas été satisfait de définir une largeur fixe.

Alors je l'ai fait avec 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>

Andres Velasco Garcia
la source
0

Le meilleur moyen de résoudre votre problème est d'utiliser le bloc de boutons btn-block avec la largeur de colonne souhaitée.

<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>

Un Sonik
la source
0

Ici, j'ai trouvé une solution en comparant les boutons dans un élément de groupe de boutons. La solution simple consiste à obtenir celui avec la plus grande largeur et à définir la largeur des autres boutons. Ainsi, ils peuvent avoir une largeur égale.

    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);
    });
}

Ça a marché comme sur des roulettes.

sulhadine
la source
-4

Cela peut être une solution idiote, mais je cherchais une solution à ce problème et je suis devenu paresseux.

Quoi qu'il en soit, utiliser input class = "btn ..." ... au lieu de button et remplir l'attribut value = avec des espaces pour qu'ils aient tous la même largeur fonctionne plutôt bien.

par exemple :

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

Je n'utilise pas bootstrap depuis si longtemps, et il y a peut-être une bonne raison de ne pas utiliser cette approche, mais j'ai pensé que je pourrais aussi bien partager

IDunno442
la source
Si vous utilisez la <button>balise, vous devez utiliser &nbsp;, par exemple: <button type="button" class="btn btn-default">&nbsp;Edit&nbsp;</button>.
Endy Tjahjono
Cela ne fonctionnerait pas dans mon cas <a class="btn btn-default btn-sm" href="read.php?id='.$row['id'].'"> Modifier </a>
Mina Gabriel