Pulsanti a larghezza fissa con Bootstrap


182

Bootstrap supporta pulsanti a larghezza fissa? Attualmente se ho 2 pulsanti, "Salva" e "Scarica", la dimensione del pulsante cambia in base al contenuto.

Inoltre, qual è il modo giusto di estendere Bootstrap?


Per larghezza fissa vuoi dire che non cresce con il contenuto al suo interno? I pulsanti sono limitati solo dal testo all'interno.
Andres Ilich,

@AndresIlich Attualmente Se ho 2 pulsanti "Salva" e "Scarica" ​​la dimensione del pulsante cambia in base al contenuto
aWebDeveloper

Quindi vuoi che quei due pulsanti con la stessa larghezza siano corretti?
Andres Ilich,

Risposte:


318

Puoi anche usare la .btn-blockclasse sul pulsante, in modo che si espanda alla larghezza del genitore.

Se l'elemento principale è un elemento a larghezza fissa, il pulsante si espanderà per assumere tutta la larghezza. È possibile applicare il markup esistente al contenitore per assicurarsi che i pulsanti fissi / fluidi occupino solo lo spazio richiesto.

<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

Per fare questo puoi trovare una larghezza che ritieni sia ok per entrambi i pulsanti e quindi creare una classe personalizzata con la larghezza e aggiungerla ai tuoi pulsanti in questo modo:

CSS

.custom {
    width: 78px !important;
}

Posso quindi utilizzare questa classe e aggiungerla ai pulsanti in questo modo:

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

Demo: http://jsfiddle.net/yNsxU/

Puoi prendere quella classe personalizzata che crei e inserirla nel tuo foglio di stile, che carichi dopo il foglio di stile bootstrap. Lo facciamo perché eventuali modifiche apportate all'interno del foglio di stile bootstrap potrebbero andare perse accidentalmente durante l'aggiornamento del framework, inoltre vogliamo che le tue modifiche abbiano la precedenza sui valori predefiniti.


2
usa le emunità anziché i pixel, ti aiutano a impostare la larghezza in base alla lunghezza dei caratteri
svarog

2
@DanDascalescu ~ 2 anni dopo non sono d'accordo. L'autore potrebbe non essere dopo aver fatto espandere i pulsanti per riempire l'intero genitore, potrebbe essere metà della pagina per un pulsante che dice 'salva'. Consiglierei qualcosa del genere ma, se necessario, con domande sui media. C'è sempre javascript per renderlo grande come il pulsante più grande, questo è in genere un percorso da cui sto alla larga
Jacob McKay,

38

Se inserisci i tuoi pulsanti all'interno di un div con classe "btn-group" i pulsanti all'interno si allungheranno alla stessa dimensione del pulsante più grande.

per esempio:

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

Gruppi di pulsanti Bootstrap


@tonjo: puoi espandere il motivo per cui non funziona? Ho scoperto che in effetti lo fa - vedi la variazione verticale per esempio.
Dan Dascalescu,

2
Sto cercando di ottenere la stessa funzionalità e il codice sopra non funziona neanche per me. @DanDascalescu hai trovato un altro modo?
Gelatinox

1
I pulsanti devono anche essere di classe btn-block affinché funzioni, almeno per me.
Gabriel,

5
No, questo non funziona - i pulsanti non hanno le stesse dimensioni.
Antoniossss,

Ho aggiunto un margine in più a sinistra perché volevo che i pulsanti fossero separati. Ha funzionato perfettamente. Tutta la stessa larghezza.
Tomas Gonzalez,

13

Per i tuoi pulsanti, puoi creare un altro selettore CSS per quelle classi speciali di pulsanti con una larghezza minima e una larghezza massima specificate. Quindi se il tuo pulsante è

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

Nel tuo file CSS Bootstrap puoi creare qualcosa di simile

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

In questo modo dovrebbe rimanere sempre 80px anche se hai un design reattivo.

Per quanto riguarda il modo giusto di estendere Bootstrap, dai un'occhiata a questo thread:

Estensione del Bootstrap


4

Con BS 4, puoi anche usare il dimensionamento e applicare w-100 in modo che il pulsante possa occupare l'intera larghezza del contenitore padre.


3

Risposta in espansione @ kravits88:

Ciò allungherà i pulsanti per adattarli a tutta la larghezza:

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

Questa è la risposta corretta per Bootstrap 3.3. btn-group-justifiedè la classe chiave. Consulta la documentazione qui: getbootstrap.com/docs/3.3/components/…
CXJ

3

btn-group -ustificated e btn-group funzionano solo per contenuto statico ma non su pulsanti creati dinamicamente, e riparato con il pulsante in css non è pratico in quanto rimane sulla stessa larghezza anche se tutto il contenuto è breve.

La mia soluzione: metti la stessa classe nel gruppo di pulsanti, quindi esegui il loop a tutti, ottieni la larghezza del pulsante più lungo e applicala a tutti

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

Esempio di output qui


1

Un pulsante di larghezza blocco potrebbe facilmente diventare pulsante di risposta se il contenitore padre è reattivo. Penso che usando una combinazione di una larghezza fissa e un percorso selettore più dettagliato invece di! Importante perché:

1) Non è un trucco (l'impostazione della larghezza minima e della larghezza massima uguali è comunque confusa)

2) Non usa il tag! Important che è una cattiva pratica

3) Utilizza la larghezza, quindi sarà molto leggibile e chiunque capisca come funziona il CSS in cascata vedrà cosa sta succedendo (forse lasciare un commento CSS per questo?)

4) Combina i selettori che si applicano al nodo target per una maggiore precisione

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

0

Si è appena imbattuto nella stessa necessità e non è stato saturato con la definizione di larghezza fissa.

Così è stato con 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

Il modo migliore per risolvere il problema è utilizzare il blocco pulsanti btn-block con la larghezza della colonna desiderata.

<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

Qui ho trovato una soluzione confrontando i pulsanti in un elemento gruppo di pulsanti. La soluzione semplice è quella di ottenere quella con la larghezza maggiore e impostare la larghezza sugli altri pulsanti. Quindi possono avere una larghezza uguale.

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

Ha funzionato come un fascino.


-4

Questa potrebbe essere una soluzione sciocca, ma stavo cercando una soluzione a questo problema e sono diventato pigro.

Ad ogni modo, usando input class = "btn ..." ... invece di button e riempire l'attributo value = con spazi in modo che abbiano tutti la stessa larghezza funziona abbastanza bene.

per esempio :

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

Non uso bootstrap da così tanto tempo, e forse c'è una buona ragione per non usare questo approccio, ma ho pensato che avrei potuto condividere


Se si utilizza il <button>tag allora avete bisogno di usare &nbsp;, per esempio: <button type="button" class="btn btn-default">&nbsp;Edit&nbsp;</button>.
Endy Tjahjono,

Questo non avrebbe funzionato nel mio caso <a class="btn btn-default btn-sm" href="read.php?id='.$row['id'].'"> Modifica </a>
Mina Gabriel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.