Como fazer um <button> no Bootstrap parecer um link normal em nav-tabs?

110

Estou trabalhando no (antigo Twitter) Bootstrap 2 e queria estilizar os botões como se fossem links normais. Não apenas quaisquer links normais; estes estão indo em um <ul class="nav nav-tabs nav-stacked">contêiner. A marcação terminará assim:

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

O Bootstrap tem alguma maneira de fazer esses programas <button>parecerem realmente <a>s?

meustrus
fonte
2
Aqui estão todas as classes que você pode colocar em <button>elementos: getbootstrap.com/2.3.2/base-css.html#buttons
Rocket Hazmat
6
Por que não usar <a> em vez de <button>?
VVL
5
Porque preciso manter o estado do formulário que está no restante do formulário. Principalmente, isso significa um ID de sessão de formulário, e torná-lo realmente um link significaria mudar todo o formulário para GET e colocar esses dados no href. Então, basicamente, eu tenho que mudar drasticamente como meu formulário funciona ou alterar a apresentação. Esta pergunta é minha tentativa de descobrir como é fácil mudar a apresentação.
meustrus
@VitorVenturem meu caso de uso: a guia padrão tem uma área de texto para inserir marcação. A guia 2 tem a visualização do HTML. Portanto, não quero que a guia 2 tenha um URL que a abre por padrão. Se eu usar links, os usuários podem clicar com o botão do meio e ver uma localização de endereço sem sentido ao passar o mouse. O botão impede isso.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respostas:

198

Conforme observado na documentação oficial , basta aplicar a (s) classe (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 exemplo, com o código que você forneceu:

<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
fonte
8
Isso faz com que ele não pareça mais um botão. No entanto, ele não está sendo exibido como desejo na marcação empilhada ul.nav. O CSS para essa marcação parece funcionar apenas com <a>tags ...
meustrus
20
Mostra de forma diferente de links.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
no Bootstrap 3, os botões com este estilo parecem links, mas têm muito preenchimento ao redor, o que bagunça o layout. MAS você pode corrigir isso adicionando uma pequena quantidade de CSS (veja a resposta @mcNux abaixo)
Martin CR
24

Basta fazer com que o link normal se pareça com o botão :)

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

"role" dentro de um código href faz com que pareça um botão, ofc você pode adicionar mais variáveis, como classe.

usuário 3699060
fonte
22
Isso é útil, mas não responde à pergunta feita.
meustrus
18
I wanted to style buttons as though they were normal linkseste é o oposto: S
SW4
roleatributo não é um atributo válido para o aelemento. ( w3.org/TR/html5/text-level-semantics.html#the-a-element )
nZeus
1
Isso é o oposto do que está sendo perguntado
Kunal
O problema com esta resposta é que o texto do botão, neste caso, é na verdade estilizado como um link que não é bom (por exemplo, se você usar "$ link-decoration: underline! Default;" em seu _variables.scss). Isso provavelmente deve ser notado pelos desenvolvedores - talvez não seja isso que eles queriam alcançar. O link deve ser denominado COMPLETAMENTE como um botão.
Dmitry Somov
11

Basta adicionar remove_button_css como classe para sua tag de botão. Você pode verificar o código para o Link 1

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

insira a descrição da imagem aqui

Edição de Estilos Extra

Adicionar color: #337ab7;e :hovere :focuspara corresponder OOTB (bootstrap3)

.remove_button_css:focus,
.remove_button_css:hover {
    color: #23527c;
    text-decoration: underline;
}
Rubista
fonte
Funciona perfeitamente. Adicionado :hovere :focuspara uma correspondência mais próxima com bootstrap3.
freedomn-m de
6

No bootstrap 3, isso funciona bem para mim:

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

Demo

mcNux
fonte
Obrigado, isso é exatamente o que eu precisava. Bootstrap 3 .btn-link não resolve e você apenas tem que adicionar uma classe por conta própria.
Rafał Cieślak
SIM, isso funciona perfeitamente. Instantaneamente, meu layout de formulário BS3 tem o espaçamento vertical correto entre as linhas. Excelente.
Martin CR
2

Basta se livrar da cor de fundo, das bordas e adicionar efeitos de flutuação. Aqui está um 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;
}
um dia
fonte
1
Eu adicionei mais alguns elementos CSS para torná-lo exatamente como um link suspenso. No total: .button-link {display: block; largura: 100%; preenchimento: 3px 20px; limpar ambos; cor: # 333; espaço em branco: nowrap; cor de fundo: transparente; fronteira: nenhum; alinhamento de texto: esquerda; } .button-link: hover {background-color: # f5f5f5; }
Andy Beverley
1

Tentei todos os exemplos, postados aqui, mas eles não funcionam sem CSS extra. Experimente isto:

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

Funciona perfeitamente sem nenhum CSS extra.

Alexey Mezenin
fonte
Este não é um HTML válido. stackoverflow.com/a/6393863/496046
tremby