单击CSS跨浏览器大纲抑制

时间:2011-07-24 03:53:08

标签: javascript html css cross-browser outline

我有一个如下所示的菜单结构:

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 个答案:

答案 0 :(得分:1)

CSS:

a:active {
    outline:0 !important;
}

答案 1 :(得分:1)

您必须使用 JavaScript ,以便区分键盘鼠标事件触发器。

您的问题的部分答案已发布在Differentiate between focus event triggered by keyboard/mouse

以下是使用jQuery javascript框架的完整解决方案:

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.keyboarda.mouse CSS 类中定义所需的样式。