Come fare in modo che un <button> in Bootstrap sembri un normale collegamento nelle schede di navigazione?


110

Sto lavorando in (ex Twitter) Bootstrap 2 e volevo modellare i pulsanti come se fossero collegamenti normali. Non solo collegamenti normali, però; questi stanno andando in un <ul class="nav nav-tabs nav-stacked">contenitore. Il markup finirà così:

<form action="..." method="post">
  <div class="row-fluid">
    <!-- Navigation for the form -->
    <div class="span3">
      <ul class="nav nav-tabs nav-stacked">
        <li><button type="submit" name="op" value="Link 1">Link 1</button></li>
        <li><button type="submit" name="op" value="Link 2">Link 2</button></li>
        <!-- ... -->
      </ul>
    </div>
    <!-- The actual form -->
    <div class="span9">
      <!-- ... -->
    </div>
  </div>
</form>

Bootstrap ha un modo per far <button>sembrare questi messaggi come se fossero effettivamente <a>?


2
Ecco tutte le classi che puoi inserire sugli <button>elementi: getbootstrap.com/2.3.2/base-css.html#buttons
Rocket Hazmat

6
Perché non usare <a> invece <button>?
VVL

5
Perché ho bisogno di mantenere lo stato del modulo che si trova nel resto del modulo. Principalmente questo significa un ID di sessione del modulo, e renderlo effettivamente un collegamento significherebbe cambiare l'intero modulo in GET e inserire quei dati nel file href. Quindi fondamentalmente devo cambiare drasticamente il modo in cui funziona il mio modulo o cambiare la presentazione. Questa domanda è il mio tentativo di scoprire quanto sia facile cambiare la presentazione.
Meustrus

@VitorVentur nel mio caso d'uso: la scheda predefinita ha un'area di testo per l'inserimento del markdown. La scheda 2 ha l'anteprima HTML. Quindi non voglio che Tab 2 abbia un URL che lo apre per impostazione predefinita. Se utilizzo i link, gli utenti possono fare clic con il pulsante centrale e vedere una posizione di indirizzo senza significato al passaggio del mouse. Il pulsante lo impedisce.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Risposte:


198

Come indicato nella documentazione ufficiale , è sufficiente applicare le classibtn btn-link:

<!-- Deemphasize a button by making it look like a link while maintaining button behavior -->
<button type="button" class="btn btn-link">Link</button>

Ad esempio, con il codice che hai fornito:

<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet" />


<form action="..." method="post">
  <div class="row-fluid">
    <!-- Navigation for the form -->
    <div class="span3">
      <ul class="nav nav-tabs nav-stacked">
        <li>
          <button class="btn btn-link" role="link" type="submit" name="op" value="Link 1">Link 1</button>
        </li>
        <li>
          <button class="btn btn-link" role="link" type="submit" name="op" value="Link 2">Link 2</button>
        </li>
        <!-- ... -->
      </ul>
    </div>
    <!-- The actual form -->
    <div class="span9">
      <!-- ... -->
    </div>
  </div>
</form>


8
Questo non lo fa sembrare più un pulsante. Tuttavia, non viene visualizzato come desidero all'interno del markup impilato su ul.nav. Il CSS per quel markup sembra funzionare solo con i <a>tag ...
meustrus

20
Mostra in modo diverso dai link.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
in Bootstrap 3, i pulsanti in questo modo sembrano collegamenti ma hanno troppa imbottitura attorno a loro che rovina il layout. MA puoi risolverlo aggiungendo una piccola quantità di CSS (vedi la risposta di @mcNux di seguito)
Martin CR,

24

Basta fare in modo che il collegamento normale assomigli a un pulsante :)

<a href="#" role="button" class="btn btn-success btn-large">Click here!</a>

"role" all'interno di un codice href lo fa sembrare un pulsante, ofc puoi aggiungere più variabili come class.


22
Questo è utile ma non risponde alla domanda posta.
meustrus

18
I wanted to style buttons as though they were normal linksquesto è l'opposto: S
SW4

roleattributo non è un attributo valido per l' aelemento. ( w3.org/TR/html5/text-level-semantics.html#the-a-element )
nZeus

1
Questo è l'opposto di ciò che viene chiesto
Kunal

Il problema con questa risposta è che il testo del pulsante in questo caso è in realtà disegnato come un collegamento che non è buono (ad esempio, se usi "$ link-decoration: underline! Default;" nel tuo _variables.scss). Questo dovrebbe probabilmente essere notato dagli sviluppatori - forse questo non è ciò che volevano ottenere. Il collegamento dovrebbe avere lo stile COMPLETAMENTE come un pulsante.
Dmitry Somov

11

Basta aggiungere remove_button_css come classe al tag del pulsante. Puoi verificare il codice per Link 1

.remove_button_css { 
  outline: none;
  padding: 5px; 
  border: 0px; 
  box-sizing: none; 
  background-color: transparent; 
}

inserisci qui la descrizione dell'immagine

Modifica stili extra

Aggiungi color: #337ab7;e :hovere :focusper abbinare OOTB (bootstrap3)

.remove_button_css:focus,
.remove_button_css:hover {
    color: #23527c;
    text-decoration: underline;
}

Funziona perfettamente. Aggiunto :hovere :focusper una corrispondenza più ravvicinata con bootstrap3.
freedomn-m

6

In bootstrap 3, questo funziona bene per me:

.btn-link.btn-anchor {
    outline: none !important;
    padding: 0;
    border: 0;
    vertical-align: baseline;
}

Usato come:

<button type="button" class="btn-link btn-anchor">My Button</button>

dimostrazione


Grazie, questo è esattamente ciò di cui avevo bisogno. Bootstrap 3 .btn-link non lo taglia e devi solo aggiungere una classe da solo.
Rafał Cieślak

SÌ, funziona perfettamente. Immediatamente il layout del mio modulo BS3 ha la corretta spaziatura verticale tra le righe. Eccellente.
Martin CR,

2

Basta eliminare il colore di sfondo, i bordi e aggiungere effetti al passaggio del mouse. Ecco un violino: http://jsfiddle.net/yPU29/

<form action="..." method="post">
<div class="row-fluid">
<!-- Navigation for the form -->
<div class="span3">
  <ul class="nav nav-tabs nav-stacked">
    <li><button type="submit" name="op" value="Link 1" class="button-link">Link 1</button></li>
    <li><button type="submit" name="op" value="Link 2" class="button-link">Link 2</button></li>
    <!-- ... -->
  </ul>
</div>
<!-- The actual form -->
<div class="span9">
  <!-- ... -->
</div>
</div>
</form>

CSS:

.button-link {
background-color: transparent;
border: none;
}

.button-link:hover {
color: blue;
text-decoration: underline;
}

1
Ho aggiunto alcuni altri elementi CSS per farlo sembrare esattamente come un collegamento a discesa. In totale: .button-link {display: block; larghezza: 100%; imbottitura: 3px 20px; chiaro: entrambi; colore: # 333; spazio bianco: nowrap; colore di sfondo: trasparente; bordo: nessuno; text-align: sinistra; } .button-link: hover {background-color: # f5f5f5; }
Andy Beverley,

1

Ho provato tutti gli esempi, pubblicati qui, ma non funzionano senza CSS extra. Prova questo:

<a href="http://www.google.com"><button type="button" class="btn btn-success">Google</button></a>

Funziona perfettamente senza alcun CSS aggiuntivo.


Questo non è HTML valido. stackoverflow.com/a/6393863/496046
tremby
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.