CSS:将元素定位在悬停或焦点上,但不能同时定位

Posted

技术标签:

【中文标题】CSS:将元素定位在悬停或焦点上,但不能同时定位【英文标题】:CSS: Target an element on hover OR focus, but not both 【发布时间】:2020-05-09 15:07:43 【问题描述】:

我正在使用typeahead.js 创建一个简单的下拉列表。

用户应该能够使用向下键滚动浏览建议,并能够使用鼠标选择建议。这些建议应在其中任何一种情况下适当突出显示。

我遇到的问题是在没有突出显示悬停状态和使用向下/向上箭头滚动时实现上述目标。

这可以在下面的 gif 中清楚地看到。

要突出显示我正在使用的悬停状态:

.tt-suggestion:hover 
  color: #f0f0f0;
  background-color: #0097cf;

并突出显示我正在使用的向下/向上箭头滚动到的元素:

.tt-cursor 
  color: #f0f0f0;
  background-color: #0097cf;

注意:.tt-cursor 是一个在滚动到时自动附加到建议 div 的类,然后在滚动离开时删除。

这里是CodePen,以便更好地了解正在发生的事情。

我正在使用 Rails 后端,并使用 javascript 和 jQuery 处理大部分内容。

编辑:为了澄清。我只想在悬停或滚动到时突出显示一个建议,而不是在悬停并滚动到时突出显示(以避免一次突出显示多个建议)。

【问题讨论】:

然而,双高亮的含义很清楚:一个高亮显示使用键盘选择的内容,另一个高亮显示如果他们使用鼠标单击可能会选择的内容。也许更好地区分颜色以使区分更清晰。悬停的高亮还不是选择,键盘会立即影响文本框(从而进行选择)。 【参考方案1】:

我认为这是您需要的,只需删除悬停 css

/* .tt-suggestion:hover 
    color: #f0f0f0;
    background-color: #0097cf;
 */

  $('div').on("mouseover",'.tt-suggestion',function()

    $('.tt-selectable').removeClass('tt-cursor')
    $('.tt-selectable').css( "color", '')
    $('.tt-selectable').css( "background-color", '')
    $(this).css( "color", '#f0f0f0')
    $(this).css( "background-color", '#0097cf')
  )
  document.onkeydown = checkKey;

function checkKey(e) 

    e = e || window.event;


    if (e.keyCode == '40') 
      $('.tt-selectable').css( "color", '')
      $('.tt-selectable').css( "background-color", '')
    
   if (e.keyCode == '38') 
      $('.tt-selectable').css( "color", '')
     $('.tt-selectable').css( "background-color", '')
  

【讨论】:

您能修改我的 CodePen 以显示此功能吗?我不确定如何实施。 我已经检查了你的 coedpen,它的工作就像魅力一样 只要在下面使用 var sample = ['a', 'aa', 'aaa', 'aaaa']; 你在哪里使用它只需将相同的代码放在下面 var sample = ['a', 'aa', 'aaa', 'aaaa']; 是的,我把你的代码 sn-p 放在 var 示例下面,结果保持不变。您可以创建一个 codepen,但请记住包含 jquery 和 typeahead 库。【参考方案2】:

不清楚你想要达到什么效果,但如果你想以某种方式直观地显示元素被选中并悬停在上面,你应该像这样针对这两个条件

.tt-cursor.tt-suggestion:hover 
  background-color: red;

【讨论】:

我编辑了问题以提高说明性。此解决方案适用于您的用例,但不幸的是不是我想要的。

以上是关于CSS:将元素定位在悬停或焦点上,但不能同时定位的主要内容,如果未能解决你的问题,请参考以下文章

CSS 定位和选择器

使用 CSS 定位单个 iframe

css定位

仅工具提示 CSS:焦点和悬停可防止访问以下按钮

css 相对定位 绝对定位 浮动 分析

以 IE9 或 IE8 为目标,但不能同时使用 CSS