CSS Cross-Browser Outline Suppression On Click

У меня есть структура меню, которая выглядит так:

HTML:

<li>
  <a href="#page">
    <b>Recover Account</b>
  </a>
</li>

CSS:

#nav ul li a
{
  color: #889DBF;
  display: block;
  line-height: 22px;
  padding-left: 20px;
  text-decoration: none;
}

#nav ul li a b
{
  display: block;
  padding-right: 21px;
}

#nav ul li.current a
{
  background: url('/images/nav-left.png') no-repeat;
  color: #111B35;
}

#nav ul li.current a b
{
  background: url('/images/nav-right.png') no-repeat 100% 0;
  color: #111B35;
}

Я пытался в течение многих дней найти кросс-браузерное решение для подавления стиля контура при щелчке, сохраняя его включенным с навигацией по вкладкам.

Ни одно из решений, написанных на следующих страницах, у меня не работает: http://people.opera.com/patrickl/experiments/keyboard/test http://haslayout.net/css-tuts/Removing-Dotted-Border-on-Clicked-Links

Кто-нибудь знает, как решить эту проблему? Приветствуется любое решение (только CSS, JS, CSS+JS). Спасибо заранее!

[TL;DR]
Outline On Click -> DISABLED
Outline On Tab Navigation -> ENABLED
Any cross-browser solution? Thanks!

person Tommaso Belluzzo    schedule 24.07.2011    source источник


Ответы (2)


Вы должны использовать JavaScript, чтобы различать триггеры событий клавиатуры и мыши.

Часть ответа на ваш вопрос уже была опубликована в Differentiate между событием фокуса, вызванным клавиатурой/мышью

А вот полное решение, использующее структуру javascript jQuery:

var isClick;
$(document).bind('click', function() { isClick = true; })
           .bind('keypress', function() { isClick = false; })
           ;
var userInterestHandlers = {
     on: function (e) {
        var $self = $(this);
        var classname =isClick ? 'mouse' : 'keyboard';
        $self.addClass(classname);
    }
    off: function (e) {
        var $self = $(this);
        $self.removeClass('mouse keyboard');
    }
}

$('a').bind ('focus active', userInterestHandlers.on);
$('a').bind ('blur', userInterestHandlers.off);

После этого просто определите нужный стиль в классах a.keyboard или a.mouse CSS.

person antitoxic    schedule 24.07.2011
comment
Это решение частично работает для меня только с Chrome. Что такое активное событие? Я не могу найти его в документации jQuery. - person Tommaso Belluzzo; 25.07.2011
comment
@Zarathos active изначально связан с CSS. Это состояние якоря/ссылки, когда на него нажали, щелкнули, коснулись... - person antitoxic; 10.02.2012

CSS:

a:active {
    outline:0 !important;
}
person AlienWebguy    schedule 24.07.2011
comment
Но постер указал, что он хочет, чтобы схема оставалась для навигации с помощью клавиатуры. Это подавляет его как на клавиатуре, так и на щелчках. Лично я бы просто сделал :active. - person Will Martin; 24.07.2011
comment
Ах, я неправильно прочитал TL; DR. Я думал, что это было включено в фокусе, и это не было желаемым результатом :) - person AlienWebguy; 24.07.2011
comment
Верно, ребята, я бы хотел сохранить его для навигации на основе вкладок! - person Tommaso Belluzzo; 24.07.2011
comment
Круто, если это сработало для вас, пожалуйста, нажмите на галочку рядом с моим ответом :) Спасибо! - person AlienWebguy; 24.07.2011