Comment faire en sorte qu'un <button> dans Bootstrap ressemble à un lien normal dans les onglets de navigation?


110

Je travaille dans (anciennement Twitter) Bootstrap 2 et je voulais styliser les boutons comme s'il s'agissait de liens normaux. Pas n'importe quel lien normal, cependant; ceux-ci vont dans un <ul class="nav nav-tabs nav-stacked">conteneur. Le balisage se terminera comme ceci:

<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 a-t-il un moyen de donner l' <button>impression que ces s étaient en fait des <a>s?


2
Voici toutes les classes que vous pouvez mettre sur les <button>éléments: getbootstrap.com/2.3.2/base-css.html#buttons
Rocket Hazmat

6
Pourquoi ne pas utiliser <a> à la place <button>?
VVL

5
Parce que j'ai besoin de conserver l'état du formulaire qui se trouve dans le reste du formulaire. Cela signifie principalement un identifiant de session de formulaire, et en faire un lien signifierait basculer l'ensemble du formulaire vers GET et placer ces données dans le fichier href. Donc, fondamentalement, je dois changer radicalement le fonctionnement de mon formulaire ou changer la présentation. Cette question est ma tentative de découvrir à quel point il est facile de changer la présentation.
meustrus

@VitorVentur dans mon cas d'utilisation: l'onglet par défaut a une zone de texte pour la saisie de démarque. L'onglet 2 a l'aperçu HTML. Je ne veux donc pas que l'onglet 2 ait une URL qui l'ouvre par défaut. Si j'utilise des liens, les utilisateurs peuvent cliquer avec le bouton central et voir un emplacement d'adresse sans signification en survol. Le bouton empêche cela.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Réponses:


198

Comme indiqué dans la documentation officielle , appliquez simplement la ou les classesbtn 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>

Par exemple, avec le code que vous avez fourni:

<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
Cela ne ressemble plus à un bouton. Cependant, il ne s'affiche pas comme je le souhaite dans le balisage empilé ul.nav. Le CSS pour ce balisage semble ne fonctionner qu'avec des <a>balises ...
meustrus

20
S'affiche différemment des liens.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
dans Bootstrap 3, les boutons de style comme celui-ci ressemblent à des liens mais ils ont trop de rembourrage autour d'eux, ce qui gâche la mise en page. MAIS vous pouvez résoudre ce problème en ajoutant une petite quantité de CSS (voir la réponse @mcNux ci-dessous)
Martin CR

24

Faites simplement ressembler le lien régulier au bouton :)

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

"role" dans un code href le fait ressembler à un bouton, ofc vous pouvez ajouter plus de variables telles que la classe.


22
Ceci est utile mais ne répond pas à la question posée.
meustrus

18
I wanted to style buttons as though they were normal linksc'est le contraire: S
SW4

rolel'attribut n'est pas un attribut valide pour l' aélément. ( w3.org/TR/html5/text-level-semantics.html#the-a-element )
nZeus

1
C'est le contraire de ce qui est demandé
Kunal

Le problème avec cette réponse est que le texte du bouton dans ce cas est en fait stylé comme un lien qui n'est pas bon (par exemple, si vous utilisez "$ link-decoration: underline! Default;" dans votre _variables.scss). Cela devrait probablement être noté par les développeurs - ce n'est peut-être pas ce qu'ils voulaient accomplir. Le lien doit être COMPLÈTEMENT conçu comme un bouton.
Dmitry Somov

11

Ajoutez simplement remove_button_css comme classe à votre balise de bouton. Vous pouvez vérifier le code du lien 1

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

entrez la description de l'image ici

Modifier les styles supplémentaires

Ajouter color: #337ab7;et :hoveret :focuspour correspondre à OOTB (bootstrap3)

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

Fonctionne parfaitement. Ajouté :hoveret :focuspour une correspondance plus étroite avec bootstrap3.
Freedomn-m

6

Dans bootstrap 3, cela fonctionne bien pour moi:

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

Utilisé comme:

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

Démo


Merci, c'est exactement ce dont j'avais besoin. Bootstrap 3 .btn-link ne le coupe pas et il vous suffit d'ajouter une classe par vous-même.
Rafał Cieślak

OUI cela fonctionne parfaitement. Instantanément, ma mise en page de formulaire BS3 a l'espacement vertical correct entre les lignes. Excellent.
Martin CR le

2

Débarrassez-vous simplement de la couleur d'arrière-plan, des bordures et ajoutez des effets de survol. Voici un violon: 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
J'ai ajouté quelques éléments CSS supplémentaires pour le faire ressembler exactement à un lien déroulant. Au total: .button-link {display: block; largeur: 100%; rembourrage: 3px 20px; clarifier les deux; couleur: # 333; espace blanc: nowrap; couleur de fond: transparent; bordure: aucune; text-align: gauche; } .button-link: hover {background-color: # f5f5f5; }
Andy Beverley

1

J'ai essayé tous les exemples, publiés ici, mais ils ne fonctionnent pas sans CSS supplémentaire. Essaye ça:

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

Fonctionne parfaitement sans aucun CSS supplémentaire.


Ce n'est pas du HTML valide. stackoverflow.com/a/6393863/496046
tremby
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.