Eliminar el radio del borde de la etiqueta Seleccionar en bootstrap 3

133

Esto parece un problema trivial, pero no puedo resolverlo.

En el sitio web propio de Bootstraps tienen el ejemplo Seleccionar.

selección de arranque



Al mirar el código, parece que hay un radio de borde de 4 en ese elemento seleccionado. ingrese la descripción de la imagen aquí



Espero que cambiar ese radio de borde a 0 elimine el radio de borde del elemento seleccionado, sin embargo, ese no es el caso, como se ve en la imagen a continuación.

ingrese la descripción de la imagen aquí



He explorado todo el CSS que está cambiando ese elemento seleccionado, pero ninguno parece eliminar el radio del borde.

Tyler McGinnis
fuente
1
Cambiar el radio del borde en la .form-controlclase funciona bien para mí. bootply.com/Q7goAsFc0B
j08691
1
Incluso en su ejemplo hay esquinas redondeadas en ese elemento seleccionado ...?
Tyler McGinnis
2
Resulta que es un problema con Chrome. Abrir tu bootply en firefox no es redondeado. Extraño.
Tyler McGinnis
Funciona para mí en Chrome y FF.
j08691
1
para mí no funciona en Chrome pero funciona bien en Firefox
Maverick

Respuestas:

256

Aquí hay una versión que funciona en todos los navegadores modernos. Se usa la clave appearance:noneque elimina el formato predeterminado. Como todo el formato se ha ido, debe agregar nuevamente en la flecha que diferencia visualmente la selección de la entrada. Nota: appearanceno es compatible con IE .

Ejemplo de trabajo: 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>

Basado en la sugerencia de Arno Tenkink en los comentarios, aquí hay un ejemplo usando un en vez de una para el ícono de flecha.

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
fuente
26
Esta debería ser la verdadera respuesta.
avoliva
1
Esta es una mejor respuesta que la seleccionada
Chris James Champeau
77
También puede usar un SVG para esto. <?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>Ahorra el mismo espacio de archivo. También se puede almacenar en caché y es más fácil de mantener. Copie esto en un archivo y guárdelo como .svg y úselo como fondo.
Arno Tenkink
1
esta es la respuesta.
Conrad Warhol
2
Esta es definitivamente la mejor respuesta. He buscado una manera de hacer esto varias veces. Debería ayudar mucho, gracias! :)
jaredwilli
215

Además de border-radius: 0, agregar -webkit-appearance: none;.

usuario1732055
fuente
2
la solución es correcta, pero no poder ver por qué sucede esto en las herramientas de desarrollo es simplemente incorrecto. gracias por resolver el enigma hombre!
mmln
101
Funciona pero no es perfecto, -webkit-appearance: none;causará la falta de indicador de flecha en el lado derecho.
nightire
41
@nightire Funcionó para mí si se utiliza border: 0y añadir un esquema como: outline: 1px inset black; outline-offset:-1px. Mantendrá las flechas y podrá simular el borde con el contorno.
Filipe Pereira
2
Sí, esto no es realmente una solución porque, como todos han dicho, la flecha del selector desaparece.
Chad Johnson
2
¡No te olvides de IE! :) seleccione :: - ms-expand {display: none; }
Kyle Hawk
13

Tuve el mismo problema y, aunque la respuesta del usuario1732055 corrige el borde, elimina las flechas desplegables. Resolví esto eliminando el borde del selectelemento y creando un contenedor spanque tiene un borde.

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
fuente
Esto funciona solo si la selección tiene fondo blanco. De lo contrario, habrá un radio si se usa otro color.
MichalCh
Hola @MichalCh, buena captura! Una forma de evitar esto sería establecer el color de fondo del contenedor al mismo valor que el elemento de selección. Aquí hay una versión modificada en jsfiddle para demostrar: https://jsfiddle.net/Lrqh0drd/75/
Logan Besecker
Esta es la solución más limpia.
Nikolay Tsenkov
2

Puedes usar -webkit-border-radius: 0;. Me gusta esto:-

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

Esto le dará esquinas cuadradas, así como flechas desplegables. El uso -webkit-appearance: none;no es recomendable, ya que se apagará todo el estilo hecho por Chrome.

gns
fuente
pero esto también tiene un problema; no borra el radio del borde del contorno cuando se enfoca.
elquimista
@elquimista puedes usarlo outline: none;para eso.
gns
0

Usando el SVG de @ArnoTenkink como una url de datos combinada con la respuesta aceptada, esto nos da la solución perfecta para pantallas 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
}
Mario
fuente
-5

la clase se llama:

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

asegúrese de insertar la anulación después de incluir bootstraps css.

Si SOLO desea eliminar el radio en ciertos controles de formulario, use

select.form-control { ... }

en lugar

EDITAR: funciona para mí en Chrome, Firefox, Opera y Safari, IE9 + (todo se ejecuta en Linux / Safari y IE en Playonlinux)

jBear Graphics
fuente
Mostré específicamente en la pregunta cómo cambié el radio del borde en el control de formulario y no funcionó ..., que es lo que me llevó a hacer la pregunta.
Tyler McGinnis
1
jsfiddle.net/Ut4y9/3 aquí hay un violín que funciona. Si todavía no funciona en su máquina, ¿podría especificar el navegador que está utilizando? No puedo reproducir tu problema. lo siento
jBear Graphics
Extraño. Estoy usando la última versión de Chrome. Obviamente es algo específico de la máquina, ya que ambos lo están viendo cambiar. Edite su respuesta para que pueda cambiar mi voto negativo :)
Tyler McGinnis
Tengo el mismo problema. A pesar de anular el radio del borde, todavía se muestra. Me vuelve loco.
user1732055
Este sigue siendo el caso con el Bootstrap 3 más reciente
genkilabs