最近碰到了一个设置h标签的hover失效问题,找了些资料,趁此机会做个总结
在 CSS 定义中,它们同时存在的时候,a:hover 必须被置于 a:link 和 a:visited 之后,才是有效的。,即visitied / link> hover > active
**
**在 CSS 定义中,它们同时存在的时候,a:active 必须被置于 a:hover 之后,才是有效的。
:hover 被置于 :link 和 :visited 之前
类名写错了
设置了hover的元素被其他元素覆盖住了
自定义css覆盖优先级不够
关于这方面的资料,参考CSS样式覆盖规则
hover:{}内部定义样式有错误存在
hover和:和{}之间有空格存在或使用了中文冒号
不只是hover,其他的link、focus等失效也同样有可能是因为这个点。
在设置:hover前加了空格,致使只对后代有效
例如a :hover
,该a标签本身不会有:hover的效果,而其后代元素才会有:hover的效果。
1 | <style type="text/css"> |
鼠标经过的时候,one的背景不变,而经过one里面的其他div背景颜色发生变化,
hover只会与子代元素元素及兄弟元素起作用
hover属性只作用于它的子代元素,并且自带设置属性(style、class、id)的子代元素不受hover的影响。
在做作业的过程中,会发现元素a会作用于自己不想要产生变化的元素,在这称为元素b,刚开始第一个想法就是将b与a分隔开,进而与a成为了兄弟元素,但有想要a:hover单独作用于b,这时发现代码a:hover .b{}
失去了效果,通过查询资料了解到,当想要hover作用于兄弟元素时,代码会发生相应的变化,我们需要在b前加上+号,即a:hover +.b{}
。但后面的过程又发现,这个方法并不是对所有的兄弟元素都适用,通过了解得知,hover作用的兄弟元素,仅仅只是对相邻的兄弟元素有用。
还是上个例子,把
1 | .one :hover { |
改为
1 | .one:hover .two { |
发现能达到我们想要的效果,改为
1 | .two:hover +.three { |
也能达到效果(注意把”+”号去掉,就不能达到效果了),而改为
1 | .two:hover .four { |
不能达到我们的效果(无论带不带加号)
IE下:hover无效时
在页面中, 正确书写DOCTYPE,另外确保浏览器处于非兼容模式下
1 | <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> |
参考文章:
关于CSS中hover失效的几个原因
css中关于hover失效问题总结
关于hover失效的问题
IE8下hover无效
最后更新: 2019年10月13日 22:27