【问题标题】:Input effect on keyboard tab -> focus, but NOT on click键盘选项卡上的输入效果 - >焦点,但不是点击
【发布时间】:2014-07-05 11:36:28
【问题描述】:

当用户“切换”到输入时,我希望焦点效果正常显示,但在单击时,我不希望它可见。

用户点击标签,现在专注于切换按钮,我希望切换按钮有轻微的发光轮廓,这是我目前能够做到的。

现在,

用户点击切换按钮或其关联的标签,像往常一样切换更改, 但是,我希望光芒一开始就不要出现,或者尽快消失。

我知道.blur(),现在我不得不使用setTimeout 进行延迟修复,但我想知道是否有更好的方法来完成此操作,或者是否有可能 仅 CSS 解决方案

【问题讨论】:

    标签: css user-interface input focus


    【解决方案1】:

    如果您使用what-input.js 插件,您可以专门为键盘用户应用样式。您可以使用以下代码突出显示已被选项卡标记的按钮。我发现 what-input 是一个可靠的插件(与 Zurb Foundation 捆绑在一起)并且目前定期维护。

    // scss
    body[data-whatinput="keyboard"] {
      button {
        &:focus {
          // other highlight code here
          box-shadow: 0 0 5px rgba(81, 203, 238, 1);
        }
      }
    }
    

    /* vanilla css */
    body[data-whatinput="keyboard"] button:focus {
      box-shadow:  0 0 5px rgba(81, 203, 238, 1);
    }
    

    【讨论】:

      【解决方案2】:

      我认为许多前端开发人员都在努力在美学和可访问性的最佳实践之间找到平衡。这似乎是一个很好的妥协。

      这就是我的做法。这个想法是在用户使用 tab 键时打开大纲,并在他们单击时将其关闭。

      JS

      document.addEventListener('keydown', function(e) {
        if (e.keyCode === 9) {
          $('body').addClass('show-focus-outlines');
        }
      });
      
      document.addEventListener('click', function(e) {
        $('body').removeClass('show-focus-outlines');
      });
      

      样式

      body:not(.show-focus-outlines) button:focus, 
      body:not(.show-focus-outlines) [tabindex]:focus {
        outline: none;
      }
      

      【讨论】:

      • 您可能还想在您的样式中选择inputselecttextareaa 标签。 jQuery UI 很好地描述了此处可选项卡的其他一些元素。 api.jqueryui.com/tabbable-selector
      • 上面列出的
      • @Ash 抱歉,这是 SASS 功能。我会重写的。
      • 这很好!它可以更简单,只需添加类(.hide-focus)这样你就可以写.hide-focus :focus { outline: none }
      【解决方案3】:

      我目前正在为我的公司做类似的事情。不幸的是,您必须使用 JavaScript,因为 CSS 不支持此用例。

      这就是我所做的。

      var btns = document.querySelectorAll('button');
      
      var onMouseDown = function (evt) {
        evt.target.dataset.pressed = 'true';
      };
      
      var onMouseUp = function (evt) {
        evt.target.dataset.pressed = 'false';
      };
      
      var onFocus = function (evt) {
        var element = evt.target;
        if (element.dataset.pressed !== 'true') {
          element.classList.add('focus');
        }
      };
      
      var onBlur = function (evt) {
        evt.target.classList.remove('focus');
      };
      
      for(var i = 0, l = btns.length; i < l; i++) {
        btns[i].addEventListener('mousedown', onMouseDown);
        btns[i].addEventListener('mouseup', onMouseUp); 
        btns[i].addEventListener('focus', onFocus);
        btns[i].addEventListener('blur', onBlur);
      }
      * { box-sizing: border-box; }
      
      body { background-color: white; }
      
      button {
        -webkit-appearance: none;
        -moz-appearance: none;
        appearance: none;
        min-width: 100px;
        margin: 0 1px;
        padding: 12px 10px;
        font-size: 15px;
        color: white;
        background-color: #646e7c;
        border: none;
        border-radius: 5px;
        box-shadow: 0 2px 2px 0 rgba(0,0,0,.2);
        cursor: pointer;
        -webkit-user-select: none;
        -moz-user-select: none;
        user-select: none;
      }
      
      button:focus { outline: none; }
      
      button:active {
        -webkit-transform: translateY(1px);
        -moz-transform: translateY(1px);
        transform: translateY(1px);
        box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
      }
      
      button.focus {
        font-weight: bold;
      }
      
      button.primary { background-color: #2093d0; }
      
      button.success { background-color: #71a842; }
      
      button.danger { background-color: #ef4448; }
      <!DOCTYPE html>
      <html>
      <head>
        <meta charset="utf-8">
      </head>
      <body>
        <button>Default</button>
        <button class="primary">Primary</button>
        <button class="success">Success</button>
        <button class="danger">Danger</button>
      </body>
      </html>

      基本上,我不依赖浏览器的原生焦点,而是根据情况在按钮上添加/删除focus 类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-26
        • 2014-11-18
        • 2019-06-22
        • 1970-01-01
        • 2021-12-07
        • 2020-03-22
        • 1970-01-01
        相关资源
        最近更新 更多