Wie kann ein <Button> in Bootstrap wie ein normaler Link in Navigationsregistern aussehen?

110

Ich arbeite in (früher Twitter) Bootstrap 2 und wollte Schaltflächen so gestalten, als wären sie normale Links. Aber nicht irgendwelche normalen Links; Diese gehen in einen <ul class="nav nav-tabs nav-stacked">Container. Das Markup endet folgendermaßen:

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

Hat Bootstrap eine Möglichkeit, diese <button>s so aussehen zu lassen, als wären sie tatsächlich <a>s?

Meustrus
quelle
2
Hier sind alle Klassen, die Sie auf <button>Elemente setzen können: getbootstrap.com/2.3.2/base-css.html#buttons
Rocket Hazmat
6
Warum nicht <a> statt <Button> verwenden?
VVL
5
Weil ich den Formularstatus beibehalten muss, der sich im Rest des Formulars befindet. Hauptsächlich bedeutet dies eine Formularsitzungs-ID, und wenn Sie sie tatsächlich zu einem Link machen, müssen Sie das gesamte Formular auf GET umstellen und diese Daten in das Formular einfügen href. Grundsätzlich muss ich entweder die Funktionsweise meines Formulars dramatisch ändern oder die Präsentation ändern. Diese Frage ist mein Versuch herauszufinden, wie einfach es ist, die Präsentation zu ändern.
Meustrus
@VitorVenturin mein Anwendungsfall: Die Standardregisterkarte enthält einen Textbereich für die Eingabe von Markdowns. Tab 2 enthält die HTML-Vorschau. Ich möchte also nicht, dass Tab 2 eine URL hat, die es standardmäßig öffnet. Wenn ich Links verwende, können Benutzer mit der mittleren Maustaste einen bedeutungslosen Adressspeicherort beim Hover anzeigen. Button verhindert das.
Ciro Santilli 5 冠状 病 六四 事件 5

Antworten:

198

Wie in der offiziellen Dokumentation angegeben , wenden Sie einfach die Klasse (n) anbtn 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>

Zum Beispiel mit dem von Ihnen angegebenen Code:

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

SW4
quelle
8
Dadurch sieht es nicht mehr wie ein Knopf aus. Es wird jedoch nicht so angezeigt, wie ich es im ul.nav-gestapelten Markup haben möchte. Das CSS für dieses Markup scheint nur mit <a>Tags zu funktionieren ...
Meustrus
20
Zeigt anders als Links.
Ciro Santilli 5 冠状 病 六四 事件 5
1
In Bootstrap 3 sehen Schaltflächen, die so gestaltet sind , wie Links aus, sind jedoch zu stark aufgefüllt, was das Layout durcheinander bringt. ABER Sie können das beheben, indem Sie eine kleine Menge CSS hinzufügen (siehe @ mcNux-Antwort unten)
Martin CR
24

Lass einfach einen normalen Link wie einen Button aussehen :)

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

"role" in einem href-Code lässt ihn wie eine Schaltfläche aussehen. Sie können weitere Variablen wie class hinzufügen.

user3699060
quelle
22
Dies ist nützlich, beantwortet jedoch nicht die gestellte Frage.
Meustrus
18
I wanted to style buttons as though they were normal linksDies ist das Gegenteil: S
SW4
roleAttribut ist kein gültiges Attribut für das aElement. ( w3.org/TR/html5/text-level-semantics.html#the-a-element )
nZeus
1
Dies ist das Gegenteil von dem, was gefragt wird
Kunal
Das Problem bei dieser Antwort ist, dass der Schaltflächentext in diesem Fall tatsächlich wie ein Link gestaltet ist, der nicht gut ist (z. B. wenn Sie in Ihrer _variables.scss "$ link-decoration: underline! Default;" verwenden). Dies sollte wahrscheinlich von Entwicklern bemerkt werden - vielleicht wollten sie dies nicht erreichen. Der Link sollte VOLLSTÄNDIG als Schaltfläche gestaltet sein.
Dmitry Somov
11

Fügen Sie einfach remove_button_css als Klasse zu Ihrem Button-Tag hinzu. Sie können den Code für Link 1 überprüfen

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

Geben Sie hier die Bildbeschreibung ein

Zusätzliche Stile Bearbeiten

Addiere color: #337ab7;und :hoverund :focuspasse zu OOTB (bootstrap3)

.remove_button_css:focus,
.remove_button_css:hover {
    color: #23527c;
    text-decoration: underline;
}
Rubyist
quelle
Funktioniert perfekt. Hinzugefügt :hoverund :focusfür eine engere Übereinstimmung mit bootstrap3.
Freiheit-m
6

In Bootstrap 3 funktioniert dies gut für mich:

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

Verwendet wie:

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

Demo

mcNux
quelle
Danke, genau das habe ich gebraucht. Bootstrap 3 .btn-Link schneidet es nicht und Sie müssen nur eine Klasse selbst hinzufügen.
Rafał Cieślak
JA das funktioniert perfekt. Sofort hat mein BS3-Formularlayout den richtigen vertikalen Abstand zwischen den Zeilen. Ausgezeichnet.
Martin CR
2

Entfernen Sie einfach die Hintergrundfarbe und die Ränder und fügen Sie Hover-Effekte hinzu. Hier ist eine Geige: 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;
}
Eines Tages
quelle
1
Ich habe ein paar weitere CSS-Elemente hinzugefügt, damit es genau wie ein Dropdown-Link aussieht. Insgesamt: .button-link {display: block; Breite: 100%; Polsterung: 3px 20px; Lösche beide; Farbe: # 333; Leerraum: Nowrap; Hintergrundfarbe: transparent; Grenze: keine; Textausrichtung: links; } .button-link: hover {Hintergrundfarbe: # f5f5f5; }
Andy Beverley
1

Ich habe alle hier veröffentlichten Beispiele ausprobiert, aber sie funktionieren nicht ohne zusätzliches CSS. Versuche dies:

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

Funktioniert perfekt ohne zusätzliches CSS.

Alexey Mezenin
quelle
Dies ist kein gültiger HTML-Code. stackoverflow.com/a/6393863/496046
tremby