Все мои кнопки выделяются вокруг них после того, как я нажимаю на них. Это в Хроме.
<button class="btn btn-primary btn-block">
<span class="icon-plus"></span> Add Page
</button>
Я использую Bootstrap с темой, но я уверен, что это не так: я заметил это раньше в другом проекте.
Уходит, если я использую <a>
тег вместо <button>
. Зачем? Если бы я хотел использовать, <button>
как бы я сделал это уйти?
html
css
twitter-bootstrap
Шон Кларк Хесс
источник
источник
Ответы:
Я нашел эти вопросы и ответы на другой странице, и переопределение стиля фокуса кнопки сработало для меня. Эта проблема может быть характерна для MacOS с Chrome.
Обратите внимание, что это имеет значение для доступности и не рекомендуется, пока у вас не будет хорошего согласованного состояния фокуса для ваших кнопок и входов. Согласно комментариям ниже, есть пользователи, которые не могут использовать мышей.
источник
.btn:active:focus
селектор, чтобы удалить его из активного состояния..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; }
Вы хотите что-то вроде:
Метод .blur () правильно удаляет выделение фокуса и не портит стили Bootstraps.
источник
я понимаю, что основное внимание будет впервые применено после
onMouseDown
события, поэтому вызовe.preventDefault()
вonMouseDown
может быть чистым решением в зависимости от ваших потребностей. Это, безусловно, удобное решение, но, очевидно, оно регулирует поведение щелчков мыши, которые могут быть несовместимы с вашим веб-проектом.В настоящее время я использую это решение (в рамках
react-bootstrap
проекта), и я не получаю мерцание фокуса или удержание фокуса кнопок после щелчка, но я все еще могу прокрутить фокус и визуально визуализировать фокус тех же кнопок.источник
onMouseDown={e => e.preventDefault()}
onKeyUp={(e) => {if (e.keyCode === 13 || e.keyCode === 32) handleClick()}
.onKeyUp
события. Оказывается, если вы это сделаете, то кнопка остается сфокусированной после нажатия клавиши пробела или клавиши возврата и вкладки или щелчка в любом месте.Не могу поверить, что никто еще не опубликовал это.
Используйте метку вместо кнопки.
скрипка
источник
<a class="btn"><my-directive/></a>
Хотя это легко только контур вынимаются для всех сосредоточены кнопок (как в user1933897 игрового ответа ), но это решение плохо с точки зрения доступности (например, см Остановить Мессинг с браузером по умолчанию Фокуса контур )
С другой стороны, вероятно, невозможно убедить ваш браузер прекратить стилизовать вашу нажатую кнопку как выделенную, если она думает, что она сфокусирована после того, как вы нажали на нее (я смотрю на вас, 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()
Это сработало для меня. Я создал собственный класс, который переопределяет необходимый CSS.
-Webkit-box-shadow будет работать для браузеров Chrome и Safari.
источник
border: none !important;
кнопку для сохранения тех же размеровЭто работает для меня, другое решение не упомянуто. Просто добавьте это в событие щелчка ...
Или вызвать его из другого события / метода ...
источник
Если вы используете правило
:focus { outline: none; }
для удаления контуров, ссылка или элемент управления будут фокусируемыми, но без указания фокуса для пользователей клавиатуры. Методы для его удаления, такие как JSonfocus="blur()"
, еще хуже и приведут к тому, что пользователи клавиатуры не смогут взаимодействовать с элементом управления.Хаки, которые вы можете использовать, что- то вроде ОК , включают добавление
:focus { outline: none; }
правил, когда пользователи взаимодействуют с мышью, и удаление их снова, если обнаружено взаимодействие с клавиатурой. Линдсей Эванс сделал много для этого: https://github.com/lindsayevans/outline.jsНо я бы предпочел установить класс по тегу html или body. И иметь контроль в файле CSS о том, когда использовать это.
Например (встроенные обработчики событий только для демонстрационных целей):
Я положил вместе ручку: http://codepen.io/snobojohan/pen/RWXXmp
Но будьте осторожны, есть проблемы с производительностью. Это заставляет перерисовывать каждый раз, когда пользователь переключается между мышью и клавиатурой. Подробнее об избежании ненужных красок http://www.html5rocks.com/en/tutorials/speed/unneeded-paints/
источник
Я заметил то же самое, и хотя это действительно раздражает меня, я считаю, что нет никакого правильного способа справиться с этим.
Я бы рекомендовал против всех других приведенных решений, поскольку они полностью убивают доступность кнопки, поэтому теперь, когда вы переходите на кнопку, вы не получите ожидаемого фокуса.
Этого следует избегать!
источник
Я нахожу решение. когда мы фокусируемся, при начальной загрузке используется box-shadow, поэтому мы просто отключаем его (недостаточно репутации, невозможно загрузить изображение :().
я добавить
оно работает.
источник
ВАРИАНТ 1: Используйте
:focus-visible
псевдокласс:focus-visible
Псевдо-класс может быть использован , чтобы убить неприглядные очертания и фокус кольца на кнопках и различных элементах для пользователей , которые не плывут с помощью клавиатуры (то есть, с помощью прикосновения или мышей).ВАРИАНТ 2: использовать
.focus-visible
полифиллЭто решение использует обычный класс CSS вместо псевдокласса, упомянутого выше, и имеет широкую поддержку браузера, потому что это официальный полифилл на основе Javascript .
Шаг 1. Добавьте зависимости Javascript на свою HTML-страницу.
Примечание: видимый в фокусе полифилл требует дополнительного полифилла для нескольких старых браузеров, которые не поддерживают classList :
Шаг 2. Добавьте следующий CSS в таблицу стилей.
Ниже приведена модифицированная версия решения CSS, более подробно описанная выше.
Шаг 3 (необязательно): при необходимости используйте класс focus-visible
Если у вас есть какие-либо элементы, для которых вы действительно хотите показать кольцо фокусировки, когда кто-то щелкает или использует касание, просто добавьте
focus-visible
класс в элемент DOM.Ресурс:
Демо-версия:
источник
<whatever>:focus { outline: none }
- худшая идея, чем это решение. На самом деле, есть люди в сообществе специальных возможностей, которые предпочитают, чтобы вы НИКОГДА не удаляли контур и вместо этого заставляли все иметь стиль: focus (или контур или тень), и не хотели бы поддерживать: focus-visible, пока браузеры не реализуют способ, позволяющий пользователи определяют предпочтения пользователя относительно того, должны ли все элементы быть фокусируемыми или нет. Мне нравится думать, что focus-visible - это удачное промежуточное звено между проблемами дизайна и a11y.Если вышеупомянутое не работает для вас, попробуйте это:
Как указал user1933897, это может быть характерно для MacOS с Chrome.
источник
bootstrap 4.0
- в WindowsПоздно, но кто знает, может кому-то помочь. CSS будет выглядеть так:
HTML будет выглядеть так:
Таким образом, вы можете сохранить btn и связанные с ним поведения.
источник
element:focus { box-shadow: none; }
удален синий контур / тень.Я упоминал об этом в комментарии выше, но для ясности стоит перечислить его как отдельный ответ. До тех пор, пока вам вообще не нужно фокусироваться на кнопке, вы можете использовать событие focus, чтобы удалить ее, прежде чем она сможет применить какие-либо CSS-эффекты:
Это позволяет избежать мерцания, которое можно увидеть при использовании события click. Это ограничивает интерфейс, и вы не сможете вкладывать кнопки, но это не проблема для всех приложений.
источник
Стиль
С помощью
источник
Попробуйте это решение для удаления границы вокруг кнопки. Добавьте этот код в CSS.
Пытаться
Если не работает, используйте ниже.
источник
Для людей, которым нужен чистый способ CSS:
Это также может работать для ссылки и так далее, и бонус, он сохраняет доступность клавиатуры. Наконец, это игнорируется браузерами, которые не поддерживают: focus-visible
источник
focus-visible
теперь есть официальный полифилл. В моем ответе stackoverflow.com/a/60219624/413538 на этот вопрос рассказывается о том, как на самом деле все это понять.Мы столкнулись с подобной проблемой и заметили, что Bootstrap 3 не имеет проблемы на вкладках (в Chrome). Похоже, что они используют стиль контура, который позволяет браузеру решать, что лучше делать, а Chrome, кажется, делает то, что вам нужно: показывать контур в фокусе, если вы просто не нажали на элемент.
Поддержку
outline-style
трудно определить, поскольку браузер сам решает, что это значит. Лучше всего проверить в нескольких браузерах и иметь запасное правило.источник
Другое возможное решение - добавить класс с использованием слушателя Javascript, когда пользователь нажимает кнопку, а затем удалить этот класс в фокусе с другим слушателем. Это поддерживает доступность (видимые вкладки), а также предотвращает причудливое поведение Chrome, когда кнопка считается нажатой.
JS:
CSS:
Полный пример здесь: https://jsfiddle.net/4bbb37fh/
источник
Это работа, я надеюсь помочь вам
источник
это удаляет контур при щелчке, но сохраняет фокус при вкладке (для a11y)
источник
Это работает лучше всего
источник
эта схема: ни одна не будет работать для кнопки и тега
источник
Добавьте это в CSS:
источник
Я нашел решение просто добавить строку ниже в вашем коде CSS.
источник
У меня была такая же проблема на MacOS и Chrome, когда я использовал кнопку для запуска события перехода. Если кто-то, читающий это, уже использует прослушиватель событий, вы можете решить его, позвонив
.blur()
после ваших действий.Пример:
Хотя, если вы еще не используете прослушиватель событий, добавление одного только для решения этой проблемы может привести к ненужным накладным расходам, и решение для стилевого оформления, как в предыдущих ответах, будет лучше.
источник
Вы можете установить
tabIndex="-1"
. Это заставит браузер пропускать эту кнопку, когда вы нажимаете клавишу TAB через фокусируемые элементы управления.Другие «исправления», предложенные здесь, только удаляют контур фокуса, но все еще оставляют кнопки на вкладке. Однако, с точки зрения удобства использования, вы уже убрали свечение, поэтому ваш пользователь в любом случае не будет знать, какая кнопка в данный момент находится в фокусе.
С другой стороны, создание кнопки без табуляции имеет последствия для доступности.
Я использую его для удаления контура фокуса от кнопки X, у
bootstrap modal
которой в любом случае есть дублирующая кнопка «Закрыть» внизу, поэтому мое решение не влияет на доступность.источник
Если вы используете браузер веб-набора (и, возможно, браузер, совместимый с префиксом поставщика веб-набора), этот контур принадлежит
-webkit-focus-ring
псевдоклассу кнопки . Просто установите егоoutline
наnone
:Chrome - это такой веб-браузер, и этот эффект также встречается и в Linux (не только в MacOS, хотя некоторые стили в Chrome являются только MacOS)
источник
У меня возникла та же проблема с использованием
<a>
кнопки «действовать как кнопка», и я обнаружил,что пропускаюобходной путь, добавив attr,type="button"
который, по крайней мере, ведет себя нормально.<a type="button" class="btn btn-primary">Release Me!</a>
источник
type
Атрибут не должен иметь никакого влияния на это, иbutton
является недопустимым значением для него. Атрибут принимает тип MIME и сообщает клиенту , какие данные следует ожидать , чтобы получить , если он следует по ссылке (например<a type="application/pdf" ...>
.role="button"
но он просто не работал (после использования<button>
вместо<a>
). Моя реализация специально требовала<a>
и не<button>
. Так что после долгих экспериментов я обнаружил этот обходной путь (скорее всего, ошибка BS)!непосредственно в теге html (в сценарии, где вы можете оставить тему начальной загрузки в другом месте вашего дизайна) ..
примеры, чтобы попробовать ..
..ect ,. в зависимости от желаемого эффекта.
источник