Supprimer le rayon de la bordure de la balise Select dans bootstrap 3

133

Cela semble être un problème trivial, mais je ne peux pas le comprendre.

Sur le site Web de Bootstraps, ils ont l'exemple Select.

sélection de bootstrap



En regardant le code, il semble qu'il y ait un rayon de bordure de 4 sur cet élément sélectionné. entrez la description de l'image ici



J'espère que changer ce rayon de bordure à 0 supprimerait alors le rayon de bordure de l'élément sélectionné, mais ce n'est pas le cas - comme le montre l'image ci-dessous.

entrez la description de l'image ici



J'ai exploré tout le CSS qui modifie cet élément de sélection, mais rien de tout cela ne semble supprimer le rayon de la bordure.

Tyler McGinnis
la source
1
Changer le rayon de la bordure sur la .form-controlclasse fonctionne très bien pour moi. bootply.com/Q7goAsFc0B
j08691
1
Même dans votre exemple, il y a des coins arrondis sur cet élément sélectionné ...?
Tyler McGinnis
2
Il s'avère que c'est un problème avec Chrome. Ouvrir votre bootply dans Firefox, ce n'est pas arrondi. Bizarre.
Tyler McGinnis
Fonctionne pour moi à la fois dans Chrome et FF.
j08691
1
pour moi, cela ne fonctionne pas dans Chrome mais fonctionne très bien dans Firefox
Maverick

Réponses:

256

Voici une version qui fonctionne dans tous les navigateurs modernes. La clé utilise appearance:nonece qui supprime la mise en forme par défaut. Puisque tout le formatage a disparu, vous devez ajouter à nouveau la flèche qui différencie visuellement la sélection de l'entrée. Remarque: appearancen'est pas pris en charge dans IE .

Exemple de travail: 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>

Basé sur la suggestion d' Arno Tenkink dans les commentaires, voici un exemple utilisant un à la place d'un pour l'icône de flèche.

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
la source
26
Cela devrait être la vraie réponse.
avoliva
1
C'est une meilleure réponse que celle sélectionnée
Chris James Champeau
7
Vous pouvez également utiliser un SVG pour cela. <?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>il économise le même espace fichier. Il peut également être mis en cache et plus facile à maintenir. Copiez-le dans un fichier et enregistrez-le au format .svg et utilisez-le comme arrière-plan.
Arno Tenkink
1
c'est la réponse.
Conrad Warhol
2
C'est certainement la meilleure réponse. J'ai cherché un moyen de le faire à plusieurs reprises. Cela devrait beaucoup aider, merci! :)
jaredwilli
215

En plus de border-radius: 0, ajoutez -webkit-appearance: none;.

user1732055
la source
2
La solution est bonne - mais ne pas être en mesure de voir pourquoi cela se produit dans les outils de développement est tout simplement faux. merci d'avoir résolu l'homme des énigmes!
mmln
101
Cela fonctionne mais pas parfait, -webkit-appearance: none;provoquera le manque de sélection d'indicateur de flèche sur le côté droit.
nightire
41
@nightire Il a travaillé pour moi si vous utilisez border: 0et ajoutez un contour comme: outline: 1px inset black; outline-offset:-1px. Gardera les flèches et vous pourrez simuler la bordure avec le contour.
Filipe Pereira
2
Ouais ce n'est pas vraiment une solution car, comme tout le monde l'a dit, la flèche de sélection disparaît.
Chad Johnson
2
N'oubliez pas IE! :) select :: - ms-expand {affichage: aucun; }
Kyle Hawk
13

J'ai eu le même problème et bien que la réponse de user1732055 corrige la bordure, elle supprime les flèches de la liste déroulante. J'ai résolu cela en supprimant la bordure de l' selectélément et en créant un wrapper spanqui a une bordure.

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
la source
Cela ne fonctionne que si la sélection a un fond blanc. Sinon, il y aura un rayon si une autre couleur est utilisée.
MichalCh
Salut @MichalCh, bonne prise! Une façon de contourner ce problème serait de définir la couleur d'arrière-plan du wrapper sur la même valeur que l'élément select. Voici une version modifiée sur jsfiddle pour démontrer: https://jsfiddle.net/Lrqh0drd/75/
Logan Besecker
C'est la solution la plus propre.
Nikolay Tsenkov
2

Vous pouvez utiliser -webkit-border-radius: 0;. Comme ça:-

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

Cela donnera des coins carrés ainsi que des flèches déroulantes. L'utilisation -webkit-appearance: none;n'est pas recommandée car elle désactivera tous les styles effectués par Chrome.

gns
la source
mais cela pose également un problème; il n'efface pas le rayon de la bordure du contour lorsqu'il est mis au point.
elquimista
@elquimista vous pouvez simplement utiliser outline: none;pour cela.
gns
0

En utilisant le SVG de @ArnoTenkink comme URL de données combiné avec la réponse acceptée, cela nous donne la solution parfaite pour les écrans 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
la source
-5

la classe s'appelle:

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

assurez-vous d'insérer le remplacement après avoir inclus les bootstraps css.

Si vous souhaitez UNIQUEMENT supprimer le rayon sur certains contrôles de formulaire, utilisez

select.form-control { ... }

au lieu

EDIT: fonctionne pour moi sur chrome, firefox, opera et safari, IE9 + (tous fonctionnant sous linux / safari et IE sur playonlinux)

Graphiques jBear
la source
J'ai spécifiquement montré dans la question comment j'ai changé le rayon de la frontière sur le contrôle de formulaire et cela n'a pas fonctionné ..., ce qui m'a incité à poser la question.
Tyler McGinnis
1
jsfiddle.net/Ut4y9/3 voici un violon fonctionnel. si cela ne fonctionne toujours pas sur votre machine, pouvez-vous spécifier le navigateur que vous utilisez? Je ne peux pas reproduire votre problème. désolé
jBear Graphics
Bizarre. J'utilise la dernière version de Chrome. Évidemment, c'est quelque chose de spécifique à la machine puisque vous le voyez tous les deux changé. Modifiez votre réponse pour que je puisse modifier mon vote défavorable :)
Tyler McGinnis
J'ai le même problème. Malgré mon dépassement du rayon de la frontière, cela apparaît toujours. Me rend fou.
user1732055
C'est toujours le cas avec le dernier Bootstrap 3
genkilabs