¿Cómo hacer que un <button> en Bootstrap parezca un enlace normal en las pestañas de navegación?

110

Estoy trabajando en Bootstrap 2 (anteriormente Twitter) y quería diseñar botones como si fueran enlaces normales. Sin embargo, no cualquier enlace normal; estos van en un <ul class="nav nav-tabs nav-stacked">contenedor. El marcado terminará así:

<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 tiene alguna forma de hacer que estos mensajes de correo electrónico <button>parezcan en realidad <a>?

meustrus
fuente
2
Aquí están todas las clases que puede poner en los <button>elementos: getbootstrap.com/2.3.2/base-css.html#buttons
Rocket Hazmat
6
¿Por qué no usar <a> en lugar de <botón>?
VVL
5
Porque necesito mantener el estado del formulario que está en el resto del formulario. Básicamente, eso significa un ID de sesión de formulario, y convertirlo en un enlace significaría cambiar todo el formulario a GET y poner esos datos en el formato href. Entonces, básicamente, tengo que cambiar drásticamente el funcionamiento de mi formulario o cambiar la presentación. Esta pregunta es mi intento de averiguar qué tan fácil es cambiar la presentación.
meustrus
@VitorVenturin mi caso de uso: la pestaña predeterminada tiene un área de texto para ingresar markdown. La pestaña 2 tiene la vista previa HTML. Por lo tanto, no quiero que la pestaña 2 tenga una URL que la abra de forma predeterminada. Si utilizo enlaces, los usuarios pueden hacer clic con el botón central y ver una ubicación de dirección sin sentido al pasar el mouse. El botón evita eso.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respuestas:

198

Como se indica en la documentación oficial , simplemente aplique la (s) clase (s)btn 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>

Por ejemplo, con el código que ha proporcionado:

<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
fuente
8
Eso hace que ya no parezca un botón. Sin embargo, no se muestra como quiero dentro del marcado ul.nav-stack. El CSS para ese marcado parece funcionar solo con <a>etiquetas ...
meustrus
20
Se muestra de forma diferente a los enlaces.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
en Bootstrap 3, los botones con este estilo parecen enlaces pero tienen demasiado relleno alrededor, lo que arruina el diseño. PERO puede solucionarlo agregando una pequeña cantidad de CSS (consulte la respuesta de @mcNux a continuación)
Martin CR
24

Simplemente haga que el enlace normal parezca un botón :)

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

"rol" dentro de un código href hace que parezca un botón, ofc puede agregar más variables como clase.

usuario3699060
fuente
22
Esto es útil pero no responde a la pregunta formulada.
meustrus
18
I wanted to style buttons as though they were normal linksesto es lo opuesto: S
SW4
roleatributo no es un atributo válido para el aelemento. ( w3.org/TR/html5/text-level-semantics.html#the-a-element )
nZeus
1
Esto es lo opuesto a lo que se pregunta
Kunal
El problema con esta respuesta es que el texto del botón en este caso tiene el estilo de un enlace que no es bueno (por ejemplo, si usa "$ link-decoration: underline! Default;" en su _variables.scss). Los desarrolladores probablemente deberían tener esto en cuenta; tal vez esto no sea lo que querían lograr. El enlace debe tener el estilo COMPLETAMENTE como un botón.
Dmitry Somov
11

Simplemente agregue remove_button_css como clase a su etiqueta de botón. Puede verificar el código del Enlace 1

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

ingrese la descripción de la imagen aquí

Editar estilos adicionales

Añadir color: #337ab7;y :hovery :focuspara que coincida con OOTB (bootstrap3)

.remove_button_css:focus,
.remove_button_css:hover {
    color: #23527c;
    text-decoration: underline;
}
Rubyist
fuente
Funciona perfectamente. Agregado :hovery :focuspara una coincidencia más cercana con bootstrap3.
freedomn-m
6

En bootstrap 3, esto funciona bien para mí:

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

Usado como:

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

Manifestación

mcNux
fuente
Gracias, esto es exactamente lo que necesitaba. Bootstrap 3 .btn-link no es suficiente y solo tiene que agregar una clase por su cuenta.
Rafał Cieślak
SÍ, esto funciona perfectamente. Instantáneamente mi diseño de formulario BS3 tiene el espacio vertical correcto entre las filas. Excelente.
Martin CR
2

Simplemente elimine el color de fondo, los bordes y agregue efectos de desplazamiento. Aquí hay un violín: 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;
}
un día
fuente
1
Agregué algunos elementos CSS más para que se vea exactamente como un enlace desplegable. En total: .button-link {display: block; ancho: 100%; relleno: 3px 20px; Limpia los dos; color: # 333; espacio en blanco: nowrap; color de fondo: transparente; borde: ninguno; alineación de texto: izquierda; } .button-link: hover {background-color: # f5f5f5; }
Andy Beverley
1

Probé todos los ejemplos, publicados aquí, pero no funcionan sin CSS adicional. Prueba esto:

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

Funciona perfectamente sin CSS adicional.

Alexey Mezenin
fuente
Este no es HTML válido. stackoverflow.com/a/6393863/496046
tremby