CSS кросс-браузерная схема подавления при нажатии - PullRequest
0 голосов
/ 24 июля 2011

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

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!

Ответы [ 2 ]

1 голос
/ 24 июля 2011

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

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

А вот полное решение с использованием фреймворка 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.

1 голос
/ 24 июля 2011

CSS:

a:active {
    outline:0 !important;
}
...