我收到了一个用:focus
和:hover
设置的输入。
当输入为:focus
时,我不想在将鼠标悬停在输入上时触发:hover
样式。
我该如何设计风格?
我的css如下:
.form-control:hover {
border-color: #a9a9a9;
}
.form-control:focus {
box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 2px rgba(102,175,233,.6);
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 2px rgba(102,175,233,.6);
}
答案 0 :(得分:23)
这是:not
选择器的特定CSS选择器。它有good compatibility:
a:hover:not(:focus) {
color: magenta;
}
a:focus:not(:hover) {
color: cyan;
}

<a href="example.com">Stackoverflow</a>
&#13;
我还建议你优先考虑focus
事件,因为它比悬停状态更像&#34;静态&#34; ,有这样的事情:
a:hover:not(:focus) {
color: magenta;
}
a:focus {
color: cyan;
}
&#13;
<a href="example.com">Stackoverflow</a>
&#13;
对于向后兼容的替代方案:
a:hover {
color: magenta;
}
a:focus {
color: cyan;
}
a:focus:hover {
color: cyan;
}
&#13;
<a href="example.com">Stackoverflow</a>
&#13;
简单来说:
每种状态都有一个规则(hover
的洋红色和focus
的青色),两者都有一个规则,给出了优先级(视觉效果) )到focus
状态:青色。
答案 1 :(得分:2)
只需在您的:not(:focus)
规则中添加:hover
即可:
.form-control:hover:not(:focus) {
border-color: #a9a9a9;
}
如果浏览器支持是一个问题(因为IE8及更低版本不支持:not()
),您可能只需要编写一个组合:hover
和:focus
的新规则来覆盖具有硬编码颜色值的:hover
规则(作为border-color
的初始值currentColor
,在IE8中不受支持且更低):
.form-control:hover {
border-color: #a9a9a9;
}
.form-control:hover:focus {
border-color: /* Default border color depending on your layout */;
}
答案 2 :(得分:0)
快速破解:添加边框:固定0px #FFFFFF到.form-control:focus
答案 3 :(得分:0)
删除焦点上的边框:
.form-control:hover {
border-color: #a9a9a9;
}
.form-control:focus {
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 2px rgba(102, 175, 233, 0.6);
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 2px rgba(102, 175, 233, 0.6);
border: none;
}
或者在焦点上将边框设置为透明,使其不具有“跳转”形式。
.form-control:hover {
border-color: #a9a9a9;
}
.form-control:focus {
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 2px rgba(102, 175, 233, 0.6);
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 2px rgba(102, 175, 233, 0.6);
border-color: rgba(0, 0, 0, 0);
}
答案 4 :(得分:0)
一种解决方案是在输入pointer-events: none
时使用:focus
声明:http://jsfiddle.net/kbLP9/。
.form-control:focus {
box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 2px rgba(102,175,233,.6);
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 2px rgba(102,175,233,.6);
pointer-events: none;
}
另一种解决方案是将伪类:focus
和:hover
结合起来以达到预期的效果:http://jsfiddle.net/7LbNV/。
.form-control:focus:hover {
border-color: initial;
}