Todos mis botones se resaltan después de hacer clic en ellos. Esto está en Chrome.
<button class="btn btn-primary btn-block">
<span class="icon-plus"></span> Add Page
</button>
Estoy usando Bootstrap con un tema, pero estoy bastante seguro de que no es así: me di cuenta de esto antes en otro proyecto.
Desaparece si uso una <a>
etiqueta en lugar de <button>
. ¿Por qué? Si quisiera usar, <button>
¿cómo lo haría desaparecer?
html
css
twitter-bootstrap
Sean Clark Hess
fuente
fuente
Respuestas:
Encontré estas preguntas y respuestas en otra página, y reemplazar el estilo de enfoque del botón funcionó para mí. Este problema puede ser específico de MacOS con Chrome.
Sin embargo, tenga en cuenta que esto tiene implicaciones para la accesibilidad y no se recomienda hasta que tenga un buen estado de enfoque consistente para sus botones y entradas. Según los comentarios a continuación, hay usuarios que no pueden usar ratones.
fuente
.btn:active:focus
selector para eliminarlo también del estado activo..btn-default, .btn-default:hover, .btn-default:active, .btn-default:active:focus, .btn-default:visited, .btn-default:focus { color: #dcdcdc; background-color: #232323; outline: none; }
Quieres algo como:
El método .blur () elimina correctamente el resaltado del foco y no estropea los estilos de Bootstraps.
fuente
mi opinión es que el enfoque se aplicó por primera vez tras el
onMouseDown
evento, así que llamare.preventDefault()
enonMouseDown
puede ser una solución limpia en función de sus necesidades. Esta es ciertamente una solución amigable para la accesibilidad, pero obviamente ajusta el comportamiento de los clics del mouse que pueden no ser compatibles con su proyecto web.Actualmente estoy usando esta solución (dentro de un
react-bootstrap
proyecto) y no recibo un parpadeo de foco o foco retenido de botones después de un clic, pero todavía puedo tabular mi foco y visualizar visualmente el foco de los mismos botones.fuente
onMouseDown={e => e.preventDefault()}
onKeyUp={(e) => {if (e.keyCode === 13 || e.keyCode === 32) handleClick()}
.onKeyUp
evento. Resulta que si haces eso, entonces el botón permanece enfocado después de presionar la tecla de espacio o la tecla de retorno y presionar o hacer clic en cualquier lugar.No puedo creer que nadie haya publicado esto todavía.
Use una etiqueta en lugar de un botón.
Violín
fuente
<a class="btn"><my-directive/></a>
Aunque es fácil eliminar el contorno de todos los botones enfocados (como en la respuesta del usuario 1933897 ), esa solución es mala desde el punto de vista de la accesibilidad (por ejemplo, vea Detener el juego con el contorno de enfoque predeterminado del navegador )
Por otro lado, es probable que sea imposible convencer a su navegador para que deje de diseñar su botón de clic como enfocado si cree que está enfocado después de hacer clic en él (lo estoy mirando, Chrome en OS X).
¿Entonces, qué podemos hacer? Un par de opciones me vienen a la mente.
1) Javascript (jQuery):
$('.btn').mouseup(function() { this.blur() })
Le indica a su navegador que elimine el foco alrededor de cualquier botón inmediatamente después de hacer clic en el botón. Al usar en
mouseup
lugar declick
mantener el comportamiento predeterminado para las interacciones basadas en el teclado (mouseup
no se activa por el teclado).2) CSS:
.btn:hover { outline: 0 !important }
Aquí se apaga esquema para cernió únicos botones. Obviamente no es ideal, pero puede ser suficiente en algunas situaciones.
fuente
:active:focus {outline:none;}
..on('mouseup', function() { ... })
lugar de.mouseup()
Esto funcionó para mí. Creé una clase personalizada que anula el CSS necesario.
El -webkit-box-shadow funcionará para los navegadores Chrome y safari.
fuente
border: none !important;
botón para mantener las mismas dimensionesEsto funciona para mí, otra solución no mencionada. Solo tíralo en el evento de clic ...
O llámalo desde otro evento / método ...
fuente
Si usa la regla
:focus { outline: none; }
para eliminar contornos, el enlace o el control serán enfocables pero sin indicación de enfoque para los usuarios del teclado. Los métodos para eliminarlo con JS comoonfocus="blur()"
son aún peores y provocarán que los usuarios del teclado no puedan interactuar con el control.Los hacks que puedes usar, que están bastante bien , incluyen agregar
:focus { outline: none; }
reglas cuando los usuarios interactúan con el mouse y eliminarlas nuevamente si se detecta interacción con el teclado. Lindsay Evans ha creado una biblioteca para esto: https://github.com/lindsayevans/outline.jsPero preferiría configurar una clase en la etiqueta html o body. Y tenga control en el archivo CSS de cuándo usar esto.
Por ejemplo (los controladores de eventos en línea son solo para fines de demostración):
Puse juntos una pluma: http://codepen.io/snobojohan/pen/RWXXmp
Pero cuidado, hay problemas de rendimiento. Esto obliga a volver a pintar cada vez que el usuario cambia entre el mouse y el teclado. Más información sobre cómo evitar pinturas innecesarias http://www.html5rocks.com/en/tutorials/speed/unnecessary-paints/
fuente
He notado lo mismo y, aunque realmente me molesta, creo que no hay una forma adecuada de manejar esto.
Recomendaría contra todas las otras soluciones dadas porque eliminan la accesibilidad del botón por completo, por lo que ahora, cuando presionas el botón, no obtendrás el enfoque esperado.
Esto debe ser evitado!
fuente
Encuentro una solución. cuando nos enfocamos, bootstrap usa box-shadow, así que simplemente lo deshabilitamos (no hay suficiente reputación, no se puede cargar la imagen :().
añado
funciona.
fuente
OPCIÓN 1: usar la
:focus-visible
pseudoclaseLa
:focus-visible
pseudoclase se puede usar para eliminar los contornos antiestéticos y los anillos de enfoque en los botones y diversos elementos para los usuarios que NO navegan a través del teclado (es decir, mediante el toque o el clic del mouse).OPCIÓN 2: usar el
.focus-visible
polyfillEsta solución utiliza una clase CSS normal en lugar de la pseudoclase mencionada anteriormente, y tiene un amplio soporte de navegador porque es un polyfill oficial basado en Javascript .
Paso 1: Agregue las dependencias de Javascript a su página HTML
Nota: el polyfill visible al foco requiere un polyfill adicional para varios navegadores antiguos que no admiten classList :
Paso 2: agrega el siguiente CSS a tu hoja de estilo
La siguiente es una versión modificada de la solución CSS documentada más detalladamente arriba.
Paso 3 (opcional): use la clase 'focus-visible' cuando sea necesario
Si tiene algún elemento en el que realmente desea mostrar el anillo de enfoque cuando alguien hace clic o usa el tacto, simplemente agregue la
focus-visible
clase al elemento DOM.Recurso:
Manifestación:
fuente
<whatever>:focus { outline: none }
es una idea peor que esta solución. En realidad, hay personas en la comunidad de accesibilidad que preferirían que NUNCA elimine el contorno y, en cambio, haga que todo tenga un estilo de enfoque (ya sea contorno o recuadro), y no quiera admitir: visible-foco hasta que los navegadores implementen una forma de permitir los usuarios especifican una preferencia del usuario sobre si todos los elementos deben ser enfocables o no. Me gusta pensar: focus-visible es un medio feliz entre las preocupaciones de diseño y todas las preguntas.Si lo anterior no funciona para usted, intente esto:
Como señaló user1933897, esto podría ser específico para MacOS con Chrome.
fuente
bootstrap 4.0
- en WindowsTarde, pero quién sabe puede ayudar a alguien. El CSS se vería así:
El HTML se vería así:
De esta manera puede mantener btn y sus comportamientos asociados.
fuente
element:focus { box-shadow: none; }
Se eliminó el contorno azul / sombra.Mencioné esto en un comentario anterior, pero vale la pena incluirlo como una respuesta separada para mayor claridad. Mientras no necesite enfocarse en el botón, puede usar el evento de foco para eliminarlo antes de que pueda aplicar cualquier efecto CSS:
Esto evita el parpadeo que se puede ver al usar el evento click. Esto restringe la interfaz y no podrá presionar el botón, pero eso no es un problema en todas las aplicaciones.
fuente
Estilo
Utilizando
fuente
Pruebe esta solución para eliminar el borde alrededor del botón. Agregue este código en css.
Tratar
Si no funciona, use a continuación.
fuente
Para las personas que desean una forma css pura de hacer eso:
Esto también podría funcionar para el enlace, etc., y además, mantiene las accesibilidades del teclado. Por último, es ignorado por los navegadores que no admiten: foco visible
fuente
focus-visible
ahora tiene un polyfill oficial. Mi respuesta stackoverflow.com/a/60219624/413538 sobre esta pregunta explica cómo entender realmente todo esto.Estábamos sufriendo un problema similar y notamos que Bootstrap 3 no tiene el problema en sus pestañas (en Chrome). Parece que están usando un estilo de esquema que permite al navegador decidir qué hacer mejor y Chrome parece hacer lo que desea: mostrar el esquema cuando está enfocado a menos que haga clic en el elemento.
El soporte para
outline-style
es difícil de precisar ya que el navegador decide qué significa eso. Lo mejor es revisar algunos navegadores y tener una regla alternativa.fuente
Otra posible solución es agregar una clase usando un escucha de Javascript cuando el usuario hace clic en el botón y luego eliminar esa clase en foco con otro escucha. Esto mantiene la accesibilidad (tabulación visible) al tiempo que evita el comportamiento peculiar de Chrome de considerar un botón enfocado al hacer clic.
JS:
CSS:
Ejemplo completo aquí: https://jsfiddle.net/4bbb37fh/
fuente
Es trabajo, espero ayudarte
fuente
esto elimina el contorno al hacer clic, pero mantiene el foco al tabular (por un año)
fuente
Esto funciona mejor
fuente
este esquema: ninguno funcionará tanto para el botón como para una etiqueta
fuente
Agregue esto en CSS:
fuente
Encontré una solución, simplemente agregue la siguiente línea en su código CSS.
fuente
Acabo de tener este mismo problema en MacOS y Chrome mientras usaba un botón para activar un evento de "transición". Si alguien que lee esto ya está utilizando un detector de eventos, puede resolverlo llamando
.blur()
después de sus acciones.Ejemplo:
Aunque si aún no está utilizando un detector de eventos, agregar uno solo para resolver esto podría agregar una sobrecarga innecesaria y una solución de estilo como las respuestas anteriores proporcionan es mejor.
fuente
Puedes configurar
tabIndex="-1"
. Hará que el navegador omita este botón cuando presione TAB a través de controles enfocables.Otras "soluciones" sugeridas aquí, solo eliminan el contorno del foco, pero aún dejan los botones tabulables. Sin embargo, desde el punto de vista de la usabilidad, ya eliminó el brillo, por lo que su usuario no sabrá qué es el botón enfocado actualmente, de ninguna manera.
Por otro lado, hacer que el botón no se pueda tabular tiene implicaciones de accesibilidad.
Lo estoy usando para eliminar el contorno del foco del botón X
bootstrap modal
, que tiene el botón duplicado "Cerrar" en la parte inferior de cualquier manera, por lo que mi solución no tiene ningún impacto en la accesibilidad.fuente
Si está utilizando un navegador webkit (y potencialmente un navegador compatible con el prefijo del proveedor de webkit), ese esquema pertenece a la
-webkit-focus-ring
pseudoclase del botón . Simplemente configúrelooutline
paranone
:Chrome es un navegador webkit, y este efecto también ocurre en Linux (no solo en MacOS, aunque algunos estilos de Chrome son solo macOS)
fuente
Estaba teniendo el mismo problema al usar la
<a>
función de botón y descubrí queme faltabauna solución alternativa al agregar attrtype="button"
hace que se comporte normalmente al menos para mí.<a type="button" class="btn btn-primary">Release Me!</a>
fuente
type
atributo no debería tener ningún efecto sobre esto ybutton
es un valor no válido para él. El atributo acepta un tipo MIME y le dice al cliente qué tipo de datos debería esperar obtener si sigue el enlace (por ejemplo<a type="application/pdf" ...>
.role="button"
pero simplemente no funcionó (después de usar un en<button>
lugar de<a>
). Mi implementación exigió específicamente un<a>
y no<button>
. Entonces, después de jugar mucho, ¡descubrí esta solución (probablemente un error BS)!directamente en la etiqueta html (en un escenario en el que es posible que desee dejar el tema bootstrap en otro lugar de su diseño).
ejemplos para probar ..
..ect. dependiendo del efecto deseado.
fuente