Remova o raio da borda da tag Select no bootstrap 3

133

Parece um problema trivial, mas não consigo descobrir.

No site próprio do Bootstraps, eles têm o exemplo Select.

seleção de inicialização



Olhando para o código, parece que há um raio de borda de 4 nesse elemento selecionado. insira a descrição da imagem aqui



Minha esperança seria que alterar esse raio da borda para 0 removesse o raio da borda do elemento select, no entanto, esse não é o caso - como pode ser visto na figura abaixo.

insira a descrição da imagem aqui



Eu explorei todo o CSS que está alterando esse elemento select, mas nada parece remover o raio da borda.

Tyler McGinnis
fonte
1
Alterar o raio da borda na .form-controlclasse funciona bem para mim. bootply.com/Q7goAsFc0B
j08691
1
Mesmo no seu exemplo, existem cantos arredondados nesse elemento selecionado ...?
Tyler McGinnis
2
Acontece que é um problema com o Chrome. Abrindo seu bootply no firefox, ele não é arredondado. Esquisito.
Tyler McGinnis
Funciona para mim no Chrome e no FF.
j08691
1
para mim ele não funciona no Chrome, mas funciona bem no firefox
Maverick

Respostas:

256

Aqui está uma versão que funciona em todos os navegadores modernos. Está usando a chave appearance:noneque remove a formatação padrão. Como toda a formatação se foi, é necessário adicionar novamente a seta que diferencia visualmente a seleção da entrada. Nota: appearancenão é suportado no IE .

Exemplo de trabalho: https://jsfiddle.net/gs2q1c7p/

select:not([multiple]) {
    -webkit-appearance: none;
    -moz-appearance: none;
    background-position: right 50%;
    background-repeat: no-repeat;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAMCAYAAABSgIzaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDZFNDEwNjlGNzFEMTFFMkJEQ0VDRTM1N0RCMzMyMkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDZFNDEwNkFGNzFEMTFFMkJEQ0VDRTM1N0RCMzMyMkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkU0MTA2N0Y3MUQxMUUyQkRDRUNFMzU3REIzMzIyQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkU0MTA2OEY3MUQxMUUyQkRDRUNFMzU3REIzMzIyQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuGsgwQAAAA5SURBVHjaYvz//z8DOYCJgUxAf42MQIzTk0D/M+KzkRGPoQSdykiKJrBGpOhgJFYTWNEIiEeAAAMAzNENEOH+do8AAAAASUVORK5CYII=);
    padding: .5em;
    padding-right: 1.5em
}

#mySelect {
    border-radius: 0
}
<select id="mySelect">
    <option>Option 1</option>
    <option>Option 2</option>
</select>

Com base na sugestão de Arno Tenkink nos comentários, aqui está um exemplo usando um em vez de um para o ícone de seta.

select:not([multiple]) {
    -webkit-appearance: none;
    -moz-appearance: none;
    background-position: right 50%;
    background-repeat: no-repeat;
    background-image: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="12" version="1"><path d="M4 8L0 4h8z"/></svg>');
    padding: .5em;
    padding-right: 1.5em
}

#mySelect {
    border-radius: 0
}
<select id="mySelect">
    <option>Option 1</option>
    <option>Option 2</option>
</select>

Eric
fonte
26
Essa deve ser a resposta real.
avoliva 14/08/2015
1
Esta é uma resposta melhor que a selecionada
Chris James Champeau
7
Você também pode usar um SVG para isso. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="14px" height="12px" viewBox="0 0 14 12" enable-background="new 0 0 14 12" xml:space="preserve"> <polygon points="3.862,7.931 0,4.069 7.725,4.069 "/></svg>economiza o mesmo espaço no arquivo. Também é armazenável em cache e mais fácil de manter. Copie isso em um arquivo, salve como .svg e use-o como plano de fundo.
Arno Tenkink 11/03/16
1
essa é a resposta
Conrad Warhol
2
Esta é definitivamente a melhor resposta. Eu procurei uma maneira de fazer isso algumas vezes. Isso deve ajudar muito, obrigado! :)
jaredwilli
215

Além de border-radius: 0adicionar -webkit-appearance: none;.

user1732055
fonte
2
solução está certa - mas não poder ver por que isso está acontecendo nas ferramentas de desenvolvimento é simplesmente errado. obrigado por resolver o enigma!
mmln
101
Funciona, mas não é perfeito, -webkit-appearance: none;causará a falta seleta de indicador de seta no lado direito.
nightire 15/08/14
41
@nightire Ela trabalhou para mim se você usar border: 0e adicionar um esboço como: outline: 1px inset black; outline-offset:-1px. Manterá as setas e você poderá falsificar a borda com o contorno.
Filipe Pereira
2
Sim, isso não é realmente uma solução, porque, como todos disseram, a seta do seletor desaparece.
Chad Johnson
2
Não se esqueça do IE! :) selecione :: - ms-expand {display: none; }
Kyle Hawk
13

Eu tive o mesmo problema e, enquanto a resposta do usuário1732055 corrige a borda, ele remove as setas suspensas. Resolvi isso removendo a borda do selectelemento e criando um wrapper spanque possui uma borda.

html:

<span class="select-wrapper">
    <select class="form-control no-radius">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
</span>

css:

select.no-radius{
    border:none;
}    
.select-wrapper{
    border: 1px solid black;
    border-radius: 0px;
}

https://jsfiddle.net/Lrqh0drd/6/

Logan Besecker
fonte
Isso funciona apenas se o seletor tiver fundo branco. Caso contrário, haverá um raio se outra cor for usada.
MichalCh
Oi @MichalCh, boa captura! Uma maneira de contornar isso seria definir a cor de fundo do wrapper com o mesmo valor que o elemento select. Aqui está uma versão modificada no jsfiddle para demonstrar: https://jsfiddle.net/Lrqh0drd/75/
Logan Besecker
Esta é a solução mais limpa.
Nikolay Tsenkov
2

Você pode usar -webkit-border-radius: 0;. Como isso:-

-webkit-border-radius: 0;
border: 0;
outline: 1px solid grey;
outline-offset: -1px;

Isso fornecerá cantos quadrados, bem como setas suspensas. O uso -webkit-appearance: none;não é recomendado, pois desativará todo o estilo do Chrome.

gns
fonte
mas isso também tem um problema; não limpa o raio da borda do contorno quando focado.
Elquimista 17/10
@elquimista você pode simplesmente usar outline: none;para isso.
GNS
0

Usando o SVG do @ArnoTenkink como um URL de dados combinado com a resposta aceita, isso nos dá a solução perfeita para exibições de retina.

select.form-control:not([multiple]) {
    border-radius: 0;
    appearance: none;
    background-position: right 50%;
    background-repeat: no-repeat;
    background-image: url(data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%20%3C%21DOCTYPE%20svg%20PUBLIC%20%22-//W3C//DTD%20SVG%201.1//EN%22%20%22http%3A//www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd%22%3E%20%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2214px%22%20height%3D%2212px%22%20viewBox%3D%220%200%2014%2012%22%20enable-background%3D%22new%200%200%2014%2012%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpolygon%20points%3D%223.862%2C7.931%200%2C4.069%207.725%2C4.069%20%22/%3E%3C/svg%3E);
    padding: .5em;
    padding-right: 1.5em
}
Marius
fonte
-5

a classe é chamada:

.form-control { border-radius: 0; }

certifique-se de inserir a substituição depois de incluir o bootstraps css.

Se você SOMENTE deseja remover o raio em controles de formulário selecionados, use

select.form-control { ... }

em vez de

EDIT: funciona para mim no chrome, firefox, opera e safari, IE9 + (todos em execução no linux / safari & IE no playonlinux)

Gráficos do jBear
fonte
Eu mostrei especificamente na pergunta como alterei o raio da borda no controle de formulário e não funcionou ..., que foi o que me levou a fazer a pergunta.
Tyler McGinnis
1
jsfiddle.net/Ut4y9/3 aqui está um violino em funcionamento. se ainda não estiver funcionando na sua máquina, você poderia especificar o navegador que está usando? Não consigo reproduzir o seu problema. desculpe
jBear Graphics
Esquisito. Estou usando a versão mais recente do Chrome. Obviamente, é algo específico da máquina, já que vocês dois estão vendo isso mudar. Editar a sua resposta para que eu possa mudar o meu downvote :)
Tyler McGinnis
Eu tenho o mesmo problema. Apesar de eu ter ultrapassado o raio da borda, ele ainda mostra. Me deixando louco.
user1732055
Este ainda é o caso com a maioria dos recentes Bootstrap 3
genkilabs