关于css hover伪类的问题。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
.box{ width:300px;

  height:300px;
  background:#E00;}
  

.boxs{ width:200px;

   height:200px;
  background:#F9F;}

.box:hover .boxs{background:#050; }
</style>
</head>

<body>

<div class="box">

<div class="boxs"></div>

</div>

</body>
</html>
图片描述

图片描述

图片描述
图片描述

为什么下面的图片鼠标并没有hover过box,boxs也变了色呢,我把box宽高设置到100px,boxs也会变色,是只要是子元素的父元素设置了hover,不管鼠标是否hover到父元素,子元素都会变化吗?谢谢!

阅读 8.1k
6 个回答

这个我觉得应该是浏览器解析CSS的bug,我们认为hover作用于哪个元素应该取决于屏幕位置(坐标)而不是DOM树中的位置(向父元素传递)。如果给子元素加一个样式“pointer-events: none;”,则鼠标指针必须放到父元素范围(包括被遮挡部分)才会生效。因为此时子元素不再接受鼠标指针事件,这也旁证了该事件是按照DOM树结构向上传递的。

.boxs {
                position: absolute;
                right: 0;
                width: 200px;
                height: 200px;
                background: #F9F;
            }

鼠标移到子块上也会变色,说明css的伪类是按照dom结构来的。
子元素从属父元素,进入子元素相当于进入父元素。
跟文档流和渲染流没有关系。

这个我理解应该遵循事件模型的吧,:hover发生在子级,如果没响应会向父级冒泡的。解决时可以给子级手动加个pointer-events: none;就行了。
还有种方法是把这俩写成兄弟关系,比如:

<div class="hover"></div>
<div class="box"></div>

然后用:

.hover:hover+.box {}

触发,就不用写pointer-events了。不过可能定位要麻烦点~

.box:hover .boxs{background:#050; } 你这行代码的意思为啥是鼠标移上去里面变色呢,有点懵逼……

你这个hover的意思是 鼠标滑过父级,子级变色

.box:hover .boxs
这句什么意思?
鼠标在外面的box上的时候,box里面的box变色!?是吧?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题