【问题标题】:Some buttons have :focus style applied on click一些按钮在点击时应用了 :focus 样式
【发布时间】:2016-05-24 21:36:05
【问题描述】:

为什么有些按钮在点击时会应用 :focus 样式而有些则不会?例如,angular-ui modal 关闭按钮已应用,但尝试 W3Schools button element 并没有。

编辑:我重新提出这个问题。对不起,我忘记了一点,因为我真的坚持它已经解决了,直到昨天我才真正尝试过。所以我做了这样的事情:.btn:focus:not(:active) { outline: none;},但问题是使用tab 按钮时它也没有显示焦点。完全忘记引导程序,不是它!

:focusbackground-color 属性与默认值不同时,焦点效果似乎在按钮单击时变得可见。可能对其他一些属性也是如此。

所以 - 如果 background 是默认值,那么只有在使用 tab 键或手动将其设置为 :focus 时才能看到焦点效果。如果background 不同,点击后也能看到效果。 Plunker 演示了这一点:https://plnkr.co/edit/2eKrtwl2wZcj3Ty4JJSu?p=preview

也许我自己已经回答了我的问题,也许没有,不知道。

edit2:刚刚看到@musically_ut 编辑给出了几乎相同的示例。

更新

在与@Error404 讨论后,我可以更准确地澄清这个问题。 所以问题是 - 为什么默认 buttonoutline 样式在被点击时没有显示?

以粗体显示“点击”,因为它不仅仅在点击时起作用。使用键盘tab 键聚焦时有效,使用开发者工具手动设置时有效。

到目前为止,大多数答案都认为单击时它会失去焦点或根本没有焦点,但确实如此。您可以更改buttonbackgroundborder 以及可能还有其他一些属性,突然,当您单击它时,您会看到轮廓。或者您可以将outline 本身更改为:focus 规则中的其他内容,它也会显示。

【问题讨论】:

  • 新问题到底是什么?
  • @Error404 问题还是一样的 - “为什么有些按钮在点击它们时会应用 :focus 样式而有些却没有?”我很难相信这真的是因为背景。
  • 但是我仍然不确定您所指的内容。 :focus 只是一个检测到您已单击按钮的事件,与 CSS 上的更改无关。 CSS 使您可以在触发此事件时添加一些功能。当然,如果你想在点击按钮时看到一些变化,你必须在CSS 上添加一些变化(才能看到效果)。不介意是背景、边框等。看这个example使用边框。
  • 但是,无论按钮的某些默认样式属性是否已更改,都会有所不同。我提到了background,现在我看到border 也适用。你看 - 你只添加了border 的规则,但同时你也可以看到应用了默认的outline 样式。如果您删除border 规则,那么outline 也会消失。
  • 但是如果不设置任何属性也会出现大纲。看到这个example,让我知道它是否是你所指的。

标签: html css angularjs angular-ui bootstrap-modal


【解决方案1】:

angular-ui 基于 Bootstrap css 框架,可管理许多小东西的样式。

W3C 示例只是没有应用任何样式的 html。

【讨论】:

  • 我无法理解如何在 css 中做到这一点,因为这两个按钮实际上在焦点上应用了相同的大纲规则,您可以通过在 chrome 开发工具中手动将其状态设置为焦点来查看。但是从这个 plunker 来看,它仍然需要使用 bootstrap plnkr.co/edit/1cAALd7XPXr1KgEASUjJ?p=preview
  • 引导程序中的 btn 类管理行为 .btn:focus、.btn:active:focus、.btn.active:focus、.btn.focus、.btn:active.focus、.btn。 active.focus { 轮廓:细虚线;大纲:5px 自动-webkit-focus-ring-color;轮廓偏移:-2px; } 希望这会有所帮助
  • 这有帮助。谢谢。然后我将覆盖 .btn:focus ,但留下 :active 规则。
【解决方案2】:

angular-ui modal 可能有额外的 CSS 来创建 :focus 选择器行为,而 W3 学校没有。

【讨论】:

    【解决方案3】:

    :focus 伪类跟随具有focus on the page 的元素。这可以是一个按钮,或一个inputtextarea<a> 链接或任何其他可以Tabbed 到的元素(请参阅:tabindex attribute)或以其他方式获得焦点(触摸、鼠标单击等) .).

    angular-ui 示例中,没有任何东西窃取点击后按钮的焦点。然而,在 W3-school 上,焦点被警报框偷走了。因此,<button> 失去了 :focus 伪类。


    Curioser 和 Curioser。

    看来,至少在 Chrome 上,button:focus 上的 background-color CSS 属性应该是 #ddd 以外的其他内容,以便按钮在单击后保持焦点。

    演示:http://codepen.io/musically_ut/pen/eZjWeq

    【讨论】:

    • 那么在没有提示框的情况下怎么偷走呢?我什至没有看到它闪烁,这是我见过的第三个行为。
    【解决方案4】:

    在您的 cmets 之后,我想您正在寻找带有 background-color: #ddd; 的按钮没有 outline 的原因。

    button.buttontag:focus {
      background-color: #ddd;
    }
    <button class="buttontag" type="button">Focus me</button>

    我认为这里的主要原因是,这不是您正在寻找的 outline,因为如果您在具有不同 background-colorbutton 上禁用它,焦点效果仍然会出现。

    button.buttontag:focus {
      background-color: #dde;
      outline: none; /* I also proved with 0 */
      -webkit-box-shadow: none;
    }
    <button class="buttontag" type="button">Focus me</button>

    它似乎是一个特殊的边框,因为如果你设置另一个边框是唯一的方法,这个焦点的特殊边框会消失。

    button.buttontag:focus {
      background-color: #dde;
      outline: 0;
      -webkit-box-shadow: none;
      border: 1px solid orange;
    }
    <button class="buttontag" type="button">Focus me</button>

    我很好奇为什么会发生这种情况,也许#ddd默认的特殊边框颜色是我想到的主要问题。所以让我们知道边框颜色有什么。

    var buttontag = document.getElementById('buttontag');
    buttontag.onfocus = function(){
      var border = window.getComputedStyle(buttontag).getPropertyValue("border");
      alert(border);
    }
    
    var border = window.getComputedStyle(buttontag).getPropertyValue("border");
    alert(border);
    button {}
    :focus {background-color: #ddd }
    <button id="buttontag" type="button">Focus me</button>

    不管它是否在焦点上,它的边框上总是有颜色rgb(221, 221, 221),相当于十六进制的#DDDDDD,与#ddd相同。

    我们有它!: 这个button 在它有background-color: #ddd; 时似乎没有成为焦点的原因是因为它有相同的border colourbackground-color 所以它们之间没有任何对比(background-colorborder)。

    记住: onfocus 事件只检测focus 事件何时在button(或其他可聚焦元素)上触发。它与CSS 没有任何关系,它只是获取事件,但与CSS 没有任何关系。不过,它可以具有浏览器在可聚焦元素上设置的默认值。

    这就是为什么如果您更改buttonbackground-color 会产生好像您单击了button 的效果,因为这两个值不同并且它们之间形成对比。如果您设置相同的background-color,您将永远不会感觉到button 正在被点击。

    【讨论】:

    • 是的,你对这个问题有点正确 - “为什么带有背景颜色的按钮:#ddd; 没有轮廓。”,我在这和焦点之间混淆了。但是我不明白您在回答中要走得更远,尤其是关于边界,这对我不感兴趣。但这个问题会更准确 - “为什么带有...的按钮在单击时没有轮廓”,因为它在使用 tab 键或在 chrome 开发人员工具中手动设置时确实有它。
    • 我在谈论边界,因为我认为 outline 行消失以放置 border (看看我的示例 2,其中我禁用了 outline 并且效果仍然存在)和如果你有相同的,当然你不可能在按钮上看到任何对比(或效果)。但你是对的,在这两种情况下都有一条outline 行,但在其中一种情况下没有出现(当背景为#ddd 时)。
    • 这是你想要的吗?这是一个奇怪的效果,我会环顾四周。我创建了这个example 以查看具有背景#ddd 的按钮也有outline 行。另外,我不知道 tab 键 是什么意思。
    • @John 同样有趣的是,如果您分配给具有background-color: #ddd 的按钮,它现在具有相同的outline,当您没有专注于它。请参阅此example。我还可以在official documentation 上找到 'Invert' 预计会对屏幕上的像素执行颜色反转。这是确保焦点边框可见的常用技巧,而不管背景颜色如何。因此它似乎是某些背景的问题。
    • 感谢您的示例,很好地证明了大纲确实存在,但我认为您仍然远离我的观点。使用tab键可以看到轮廓,在plunker预览页面的任意位置点击,然后在键盘上敲tab,它会聚焦在按钮上,你会看到轮廓,但是点击时看不到它按钮。
    【解决方案5】:

    :focus 是一个pseudo-class,它被 jQuery 等工具用于触发事件、应用 CSS 样式等。查看您提供的示例,我没有看到一组明确的 :focus。单击按钮时,jQuery 会将按钮解释为 ​​:focus。普通的 HTML 按钮不会有这个。

    【讨论】:

      【解决方案6】:

      我的所有 AngularJs 应用程序都有这个问题,我通常会在单击按钮时从按钮上移除焦点,我知道这是一个 hack,但它可以工作:D。

      $('.btn').click(function(){
          $(this).blur();
      });
      

      【讨论】:

        【解决方案7】:

        如果您不想在下面的代码中显示焦点轮廓,

        <button type="button" tabindex="-1">Click Me!</button>

         :focus {outline:none;}

        如果你想勾勒出焦点然后使用下面的代码,

         :focus {outline: 1px solid #5B9DD9}
        

        您可以随意使用其他样式(如背景或边框等)。 我希望这会有所帮助,如果您有疑问,请告诉我。

        谢谢

        更新:

        我在通过 Inspect Element 检查按钮并触发 :focus 时注意到的,按钮获得了样式

        :focus { outline: -webkit-focus-ring-color auto 5px; } 

        不过,这不会在按钮上创建轮廓。

        在调试和阅读互联网上的一些页面后,我知道按钮的焦点只显示在按下键盘时,因为一开始有必要显示关注的元素,而现在用鼠标很清楚什么正在被关注,因为您正在积极地将鼠标移动到按钮上

        【讨论】:

        • 是的,您点击右键,按钮也有焦点,但该轮廓不可见。
        • 我在通过 Inspect Element 检查按钮并触发 :focus 时注意到的情况,按钮的样式为 :focus { outline: -webkit-focus-ring-color auto 5px;不过,这不会在按钮上创建轮廓。在调试和阅读互联网上的一些页面后,我知道按钮的焦点只显示在按下键盘时,因为一开始有必要显示关注的元素,而现在用鼠标很清楚关注的是什么开启,因为您正在主动将鼠标移动到按钮上。
        • 我认为您没有将其设置为:focus。您的复选框为空。但奇怪的是风格是可见的。它适用于我和其他已在此处回复的人。
        • 我没有按钮复选框,并且该样式仅在按钮处于焦点时可见。
        • 我说的是右侧样式编辑器中:focus pseido 类的复选框
        猜你喜欢
        • 1970-01-01
        • 2017-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多