为什么 select:-moz-focusring 不删除此 bootstrap 导航栏中的 Firefox 虚线?

Why is select:-moz-focusring not removing Firefox dotted lines in this bootstrap nav bar?

我想去掉 bootstrap 导航栏中的 Firefox 虚线。

我在很多地方都读到,将此添加到 CSS 文件将摆脱它们:

    a:-moz-focusring {
        color: transparent;
        text-shadow: 0 0 0 #000;
    }

但在下面的代码中它们仍然出现。有谁知道为什么?

<html ng-app="mainApp">
    <head>
        <style type="text/css">
            [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
                display: none !important;
            }    
            select:-moz-focusring {
                color: transparent;
                text-shadow: 0 0 0 #000;
            }
        </style>
        <script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
        <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
        <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular-route.js"></script>
        <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
        <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet">
        <link href="http://netdna.bootstrapcdn.com/font-awesome/4.0.0/css/font-awesome.css" rel="stylesheet" />
    </head>    
    <body ng-cloak ng-controller="mainController">
        <nav class="navbar navbar-default">
            <div class="container-fluid">
                <div class="navbar-header">
                    <div class="navbar-brand">AngularJS Routing</div>
                </div>
                <div>
                    <ul class="nav navbar-nav">
                        <li><a href="#"><i class="fa fa-home"></i> Home</a></li>
                        <li><a href="#about"><i class="fa fa-shield"></i> About</a></li>
                        <li><a href="#contact"><i class="fa fa-comment"></i> Contact</a></li>
                    </ul>
                </div>
            </div>
        </nav>

        <div class="col-lg-12">
            <div ng-view></div>
        </div>        

        <script>
                            var mainApp = angular.module('mainApp', ['ngRoute']);
                            mainApp.config(function ($routeProvider) {
                                $routeProvider
                                        .when('/', {
                                            templateUrl: 'pages/home.htm',
                                            controller: 'mainController'
                                        })
                                        .when('/about', {
                                            templateUrl: 'pages/about.htm',
                                            controller: 'aboutController'
                                        })
                                        .when('/contact', {
                                            templateUrl: 'pages/contact.htm',
                                            controller: 'contactController'
                                        });
                            });
                            mainApp.controller('mainController', function ($scope) {
                                $scope.message = 'the home page';
                            });
                            mainApp.controller('aboutController', function ($scope) {
                                $scope.message = 'the about page';
                            });
                            mainApp.controller('contactController', function ($scope) {
                                $scope.message = 'the contact page';
                            });
        </script>
    </body>
</html>

以下应该有效——你应该使用标准的 :focus 伪 class 除非你有充分的理由使用非标准的 :-moz-focusring:

a:focus {
    outline: none;
}

colortext-shadow 影响文本,而不是焦点轮廓,因此它们不起作用。即使 MDN 也没有显示任何使用这些属性的示例,而是使用 outline。综上所述,使用 :focus.

还是比较可取的

但这里的实际问题是您在 <style> 元素之后包含了 Bootstrap。 Bootstrap 有一个启用焦点轮廓的 a:focus 规则,它会覆盖您的 CSS,因为它稍后会被包含在内。将它移到 <style> 元素上方将解决此问题:

<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet">
<link href="http://netdna.bootstrapcdn.com/font-awesome/4.0.0/css/font-awesome.css" rel="stylesheet" />

<style type="text/css">
    [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
        display: none !important;
    }    
    a:focus {
        outline: none;
    }
</style>

<script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular-route.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>

一般来说,在 <style> 元素之前添加任何 <link>@import 语句是个好主意,这样链接的样式表就不会无意中覆盖您的内部 CSS(尽管有特殊性)。