【发布时间】:2017-01-07 21:13:13
【问题描述】:
:focus 选择器用于对具有一般意义的焦点元素进行样式设置。但考虑到鼠标按下或触摸等情况,它究竟何时应用?作为 Web 开发人员,我如何控制它以保持一致?
例如在 Stack Overflow 上,如果我在其中一个链接上按下鼠标,但没有激活,通过在释放之前将鼠标移开,链接将获得键盘焦点(然后按 Tab 键,焦点转到下一个链接)。然而,即使它有焦点,它也没有得到:focus 样式。如果我点击链接,我会得到:focus 轮廓样式。
但是在我正在开发的一个网站上,鼠标按下立即给了我:focus 样式,所以肯定有一些微妙的细节。
在这个 sn-p 中,Chrome 中的 <a> 和 <button> 元素就像我之前的描述一样工作,而可点击的 <div> 似乎像后者一样工作。但是在我的一个网站上,后者在所有 3 种情况下都发生了,我什至不确定为什么它们在这个 sn-p 中不一样,因为我这里没有额外的样式或 JS。
$('button').on('click', function() {});
$('.fake-btn').on('click', function() {});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>
<a href="www.example.com">A link</a>
</p>
<p>
<button>A button</button>
</p>
<p>
<div class="fake-btn" tabindex="0">A clickable element</div>
</p>
在 IE11 中,一切都像 GIF 中的默认 <a> 和 <button> 一样工作,包括在我的其他网站上。也许这是一个 Chrome 错误,或者当应用 :focus 样式时,我是否仍然遗漏了一些细微的规范?伪类 CSS 规则的顺序在这里是否以某种不明显的方式很重要?
【问题讨论】:
-
您确定要区分
:focus和:active? -
:focus不一定与鼠标有关。:focus即使您在键盘上单击tab也会触发,直到您在没有鼠标的情况下获得元素(button、a等)。我的问题是你的问题到底是什么?实际结果是什么(用文字描述 UI - 例如,按钮应该有一个border)以及预期的结果是什么? -
是的,active 有不同的焦点样式(事实上,默认情况下
<div>似乎没有 active 样式,但是所有元素都有一个:focus规则)。描述的哪一部分不清楚,用鼠标点击有时会给出焦点样式,有时不是我描述的不同方式,但它总是给出键盘焦点?例如为什么在 sn-p 中<div>和<a>不同? -
@Paulie_D 即使使用默认浏览器样式,我也会得到某种程度的“奇怪”行为,例如在sn-p。 :active 在键盘激活或鼠标单击期间都按预期工作,但 :focus 有时仅显示,即使元素肯定具有键盘焦点
-
我在sn-p中找到了一些可以快速记录案例的东西,希望更清楚。在其他一些网站上,我的
<a>和<button>的行为与此处的<div>完全一样(焦点样式应用于mousedown),但我认为没有什么可以做到这一点(例如,一些JS 调用focus()mousedown事件处理程序)
标签: html css css-selectors focus