我对:focus-visible和Bootstrap有意见.我正在工作的项目使用Bootstrap,它有button:focus:not(:focus-visible)button:focus:not(.focus-visible)两个按钮.在我的css中,我有:

button {
  &:focus-visible {
     outline: var(--outline-size) var(--outline-style) var(--outline-color);
  }
}

但我的:focus-visible美元没有显示出来.当我判断按钮并执行强制元素状态:Focus时,它显示(如预期的):

button:focus:not(:focus-visible) {
  outline: 0;
}
button:focus:not(.focus-visible) {
  outline: 0; //crossed out
}

当我执行强制元素状态:焦点-可见时,我得到了我的样式:焦点-可见.但是,当我按Tab键到按钮时,没有显示:focus-visible.如果我在开发工具中取消选中button:focus:not(.focus-visible),则选项卡上会显示:focus-visible.就我所知,:focus不应该超越:focus-visible,那么我做错了什么呢?如有任何帮助,不胜感激!

推荐答案

基本上,这是正在发生的事情:https://jsfiddle.net/eaL3vrmf/

button:focus:not(:focus-visible) {
  outline: 0;
}

/* The :focus-visible works if this is removed */
button:focus:not(.focus-visible) {
  outline: 0;
}

button:focus-visible {
  outline: 2px dashed hotpink;
}
Test: <button>I am a button</button>

好吧,那就specificity期吧.button:focus:not(.focus-visible)有特异度0-2-1,而你的button:focus-visible只有0-1-1(https://specificity.keegan.st),所以你需要增加你自己 Select 器的特异度(除非你想使用JUCKY !important)一个简单的方法让你的 Select 器达到与现有 Select 器相同的特定性,那就是添加一个类 Select 器--或者一个:not(),它包含一个按钮在现实中永远得不到的无意义的类.

button:focus:not(:focus-visible) {
  outline: 0;
}

/* The :focus-visible works if this is removed */
button:focus:not(.focus-visible) {
  outline: 0;
}

button:not(.never-ever-gonna-be-set):focus-visible {
  outline: 2px dashed hotpink;
}
Test:
<button>I am a button</button>

如果您的规则在框架中的现有规则之后,那么这将是可行的--因为两个 Select 器现在具有相同的特异性.如果该顺序不是这样,那么您将需要进一步增加您自己的顺序的特殊性.

Css相关问答推荐

在react native中应用阴影

添加Angular 17的Stackblitz项目的Angular material 主题?

如何为垫子制作圆角- Select 所有角点上的下拉列表

VueJS CSS动画不会扩展到v-card/v-col之外

如何在元素上打孔才能看到下面的背景图像?

尽管 URL 路径正确,但背景图像未显示

如何更改导航栏标题中链接的文本 colored颜色 和导航丸中的链接(在shiny 的应用程序中)?

如何使用props 为 Vue 中的组件创建动态背景图像?

我怎样才能将我的按钮向上移动,因为文本是

在revealjs/Quarto中定义一类反背景的幻灯片

BootStrap:右对齐嵌套手风琴

如何测试页面上的文本被删除

使用border-radius CSS时平滑边框

用 svelte 设计 body 元素

隐藏元素,但显示 CSS 生成的内容

完成后如何防止css3动画重置?

如果容器 div 较小,如何将子 div 扩展到 100% 屏幕宽度?

如何根据容器大小设置字体大小?

CSS显示:表格列应该如何工作?

谷歌的无图像按钮