У моих кнопок есть подсветка вокруг них после нажатия на них. Это находится в Chrome.
<button class="btn btn-primary btn-block">
<span class="icon-plus"></span> Add Page
</button>
Я использую Bootstrap с темой, но я уверен, что не это: я замечал это раньше в другом проекте.
Это исчезает, если я использую тег <a>
вместо <button>
. Зачем? Если бы я хотел использовать <button>
, как бы я его убрал?
Я нашел эти Q и A на другой странице, и переопределение стиля фокуса кнопки сработало для меня. Эта проблема может быть специфичной для MacOS с Chrome.
.btn:focus {
outline: none;
}
Обратите внимание, что это имеет значение для доступности и не рекомендуется, пока у вас не будет хорошего согласованного состояния фокусировки для ваших кнопок и входов. В соответствии с комментариями ниже, есть пользователи, которые не могут использовать мышей.
.btn:active:focus
, чтобы удалить его из активного состояния.
Вам нужно что-то вроде:
<button class="btn btn-primary btn-block" onclick="this.blur();">...
Метод .blur() корректно удаляет выделение фокуса и не путает стили Bootstraps.
Не могу поверить, что никто еще не опубликовал это.
Используйте ярлык вместо кнопки.
<label type="button" class="btn btn-primary btn-block">
<span class="icon-plus"></span> Add Page
</label>
Хотя легко просто удалить схему для всех сфокусированных кнопок (как в user1933897 answer), но это решение плохо с точки зрения доступности (например, см. Остановить передачу сообщений с помощью фонового фокуса браузера по умолчанию)
С другой стороны, вероятно, невозможно убедить ваш браузер прекратить стилизацию нажатой кнопки, если она сфокусирована, если она думает, что она сфокусировалась после нажатия на нее (я смотрю на вас, Chrome на OS X).
Итак, что мы можем сделать? Мне приходят в голову пара вариантов.
1) Javascript (jQuery): $('.btn').mouseup(function() { this.blur() })
Вы поручаете вашему браузеру удалить фокус вокруг любой кнопки сразу после, нажатие кнопки. Используя mouseup
вместо click
, мы сохраняем поведение по умолчанию для взаимодействий на основе клавиатуры (mouseup
не запускается клавиатурой).
2) CSS: .btn:hover { outline: 0 !important }
Здесь вы отключите контуры для кнопок зависания. Очевидно, что это не идеально, но может быть достаточно в некоторых ситуациях.
:active:focus {outline:none;}
.
.on('mouseup', function() { ... })
вместо .mouseup()
Я понимаю, что фокус сначала применяется после события onMouseDown
, поэтому вызов e.preventDefault()
в onMouseDown
может быть чистым решением в зависимости от ваших потребностей. Это, безусловно, удобное для доступа решение, но, очевидно, оно регулирует поведение щелчков мыши, которые могут быть несовместимы с вашим веб-проектом.
В настоящее время я использую это решение (в рамках проекта react-bootstrap
), и я не получаю фокус мерцания или удерживания фокуса кнопок после щелчка, но я все еще могу включить мой фокус и визуально визуализировать фокус те же кнопки.
Если вы используете правило :focus { outline: none; }
для удаления контуров, ссылка или управление будут фокусируемыми, но без указания фокуса для пользователей клавиатуры. Способы его удаления с помощью JS, например, onfocus="blur()"
, еще хуже, и пользователь клавиатуры не сможет взаимодействовать с элементом управления.
Используемые хаки, которые вид OK, включают добавление правил :focus { outline: none; }
, когда пользователи взаимодействуют с мышью и удаляют их снова, если обнаружено взаимодействие с клавиатурой. Линдсей Эванс сделал для этого lib: https://github.com/lindsayevans/outline.js
Но я бы предпочел установить класс в теге html или body. И иметь контроль в файле CSS, когда использовать это.
Например (встроенные обработчики событий предназначены только для демонстрации):
<html>
<head>
<style>
a:focus, button:focus {
outline: 3px solid #000;
}
.no-focus a, .no-focus button {
outline: none;
}
</style>
</head>
<body id="thebody"
onmousedown="document.getElementById('thebody').classList.add('no-focus');"
onkeydown="document.getElementById('thebody').classList.remove('no-focus');">
<p>This her is <a href="#">a link</a></p>
<button>Click me</button>
</body>
</html>
Я поставил togheter a Pen: http://codepen.io/snobojohan/pen/RWXXmp
Но будьте осторожны, есть проблемы с производительностью. Это заставляет перекрашивать каждый раз, когда пользователь переключается между мышью и клавиатурой. Подробнее об устранении ненужных красок http://www.html5rocks.com/en/tutorials/speed/unnecessary-paints/
Я заметил то же самое, и хотя это меня действительно раздражает, я считаю, что нет правильного способа справиться с этим.
Я бы рекомендовал использовать все остальные решения, потому что они полностью уничтожают доступность кнопки, поэтому теперь, когда вы нажимаете кнопку, вы не получите ожидаемого фокуса.
Этого следует избегать!
.btn:focus {
outline: none;
}
Поздно, но кто знает, что это может кому-то помочь. CSS будет выглядеть так:
.rhighlight{
outline: none !important;
box-shadow:none
}
HTML будет выглядеть так:
<button type="button" class="btn btn-primary rHighlight">Text</button>
Таким образом вы можете сохранить btn и связанные с ним поведения.
element:focus { box-shadow: none; }
удален синий контур / тень.
Я упомянул об этом в комментарии выше, но для ясности это нужно перечислять как отдельный ответ. Пока вам не нужно фокусироваться на кнопке, вы можете использовать фокусное событие, чтобы удалить его, прежде чем он сможет применить любые эффекты CSS:
$('buttonSelector').focus(function(event) {
event.target.blur();
});
Это позволяет избежать мерцания, которое можно увидеть при использовании события click. Это ограничивает интерфейс, и вы не сможете войти в эту кнопку, но это не проблема во всех приложениях.
Это работа, я надеюсь помочь вам.
.btn:focus, .btn:focus:active {
outline: none;
}
Попробуйте это решение для удаления рамки вокруг кнопки. Добавьте этот код в css.
Попробуйте
button:focus{
outline:0px;
}
Если не работает, используйте ниже.
button:focus{
outline:none !important;
}
У нас была аналогичная проблема, и мы заметили, что Bootstrap 3 не имеет проблемы на их вкладках (в Chrome). Похоже, что они используют outline-style, что позволяет браузеру решать, что лучше делать, и Chrome, похоже, делает то, что вы хотите: покажите если вы просто нажали на элемент.
Поддержка outline-style
трудно настроить, так как браузер принимает решение о том, что это значит. Лучше всего проверить несколько браузеров и иметь правило возврата.
Стиль
.not-focusable:focus {
outline: none;
box-shadow: none;
}
Использование
<button class="btn btn-primary not-focusable">My Button</button>
Если вышеуказанное не работает для вас, попробуйте следующее:
.btn: focus {outline: none; box-shadow: none; border: 2px solid прозрачный;}
Как указал user1933897, это может быть специфично для MacOS с Chrome.
bootstrap 4.0
- в Windows
Это сработало для меня. Я создал специальный класс, который переопределяет необходимый CSS.
.custom-button:focus {
outline: none !important;
border: none !important;
-webkit-box-shadow: none !important;
box-shadow: none !important;
}
-webkit-box-shadow будет работать для браузеров Chrome и Safari.
border: none !important;
для кнопки, чтобы сохранить те же размеры
Это работает для меня, другое решение не упомянуто. Просто бросьте его в событие click...
$(this).trigger("blur");
Или вызвать его из другого события/метода...
$(".btn_name").trigger("blur");
Если вам не нужен контур для кнопки со всем статусом, вы можете переопределить css с помощью кода ниже
.btn.active.focus, .btn.active:focus,
.btn.focus, .btn:active.focus,
.btn:active:focus, .btn:focus{
outline: none;
}
Другим возможным решением является добавление класса с помощью Javascript-прослушивателя, когда пользователь нажимает на кнопку, а затем удаляет этот класс в фокусе с другим слушателем. Это поддерживает доступность (видимая вкладка), а также предотвращает необычное поведение Chrome при выборе кнопки, сфокусированной при нажатии.
JS:
$('button').click(function(){
$(this).addClass('clicked');
});
$('button').focus(function(){
$(this).removeClass('clicked');
});
CSS
button:focus {
outline: 1px dotted #000;
}
button.clicked {
outline: none;
}
Полный пример: https://jsfiddle.net/4bbb37fh/
У меня была такая же проблема в MacOS и Chrome, когда вы использовали кнопку для запуска события перехода. Если кто-либо читает это, уже использует прослушиватель событий, вы можете решить его, вызвав .blur()
после ваших действий.
Пример:
nextQuestionButtonEl.click(function(){
if (isQuestionAnswered()) {
currentQuestion++;
changeQuestion();
} else {
toggleNotification("invalidForm");
}
this.blur();
});
Хотя, если вы уже не используете прослушиватель событий, добавление одного только для его решения может привести к излишним накладным расходам, и лучше будет использовать решение для стилизации, как и предыдущие ответы.
Просто добавьте outline:0;
css к элементам.