设置其他子项';s属性悬停在具有纯CSS(HTML列表)的同一父级下
我正在尝试制作一个带有子菜单的CSS菜单。当我将鼠标移动到列表的子元素上时,如果有子菜单,我希望子菜单显示在该子元素的内部设置其他子项';s属性悬停在具有纯CSS(HTML列表)的同一父级下,html,css,hover,html-lists,Html,Css,Hover,Html Lists,我正在尝试制作一个带有子菜单的CSS菜单。当我将鼠标移动到列表的子元素上时,如果有子菜单,我希望子菜单显示在该子元素的内部 正如上面可以看到的,子菜单出现了,但我不希望在我用圆圈标记的区域上移动光标时发生这种情况。这些是填充区域 以下是我的标记: <ul> <li><a href="/home">Home</a></li> <li><a href="#">About Us</a>
正如上面可以看到的,子菜单出现了,但我不希望在我用圆圈标记的区域上移动光标时发生这种情况。这些是填充区域 以下是我的标记:
<ul>
<li><a href="/home">Home</a></li>
<li><a href="#">About Us</a>
<ul>
<li><a href="/mission">Our Mission</a></li>
<li><a href="/vision">Our Vision</a></li>
</ul>
</li>
</ul>
现在这个代码没有问题了。正如您在中所看到的,它按照我的要求工作,当我将鼠标移到“关于我们”菜单上时,子菜单将出现
但是,我这里的问题是,菜单项中有空格(填充),即使我将鼠标悬停在这些空格上,子菜单也会出现。但我希望子菜单仅在我将
元素悬停在
中时显示
为了实现这一点,我尝试了以下代码:
ul > li > a:hover > ul { display: inline; }
而不是现有的:
ul > li:hover > ul { display: inline; }
但是它没有起作用,我没有预料到,因为
和
是同一
元素的子元素
我正在为CMS创建一个模板,所以我不想过多地涉及jQuery实现,比如为列表元素设置id
s或class
es。我想用纯CSS实现
我将在列表元素之间使用分隔图像,因此我必须使用填充
而不是边距
如果我使用的是边距
,这将很容易,因为list元素的宽度
将与
元素的宽度
相同
但是在这里,在所有这些例外之后,我需要一些帮助。任何想法都将受到高度赞赏
提前感谢。这是可能的,但只是公正的,并且有一些相当严重的警告;首先使用CSS隐藏/显示子菜单:
ul > li > ul {
position: fixed;
opacity: 0;
-moz-transition: opacity 1s linear;
-ms-transition: opacity 1s linear;
-o-transition: opacity 1s linear;
-webkit-transition: opacity 1s linear;
transition: opacity 1s linear;
}
ul > li a:hover + ul,
ul > li:hover a + ul:hover{
opacity: 1;
-moz-transition: opacity 1s linear;
-ms-transition: opacity 1s linear;
-o-transition: opacity 1s linear;
-webkit-transition: opacity 1s linear;
transition: opacity 1s linear;
}
现在,需要注意的是:
display
属性不会产生动画(它不能,在none
和inline block
之间(或属性的任何其他有效值之间)没有过渡状态),因此子菜单在页面上始终必须是“可见的”/“存在的”(尽管在大多数浏览器中不透明度为0
将其隐藏)a
链接移动到ul
而不立即隐藏的唯一方式;转换基本上是一个延时,允许第二个选择器ul>li:hover a+ul:hover
匹配转换
,请注意,在版本9之前,不透明性也不受支持这是可能的,但只是有一些相当严重的警告;首先CSS隐藏/显示子菜单:
ul > li > ul {
position: fixed;
opacity: 0;
-moz-transition: opacity 1s linear;
-ms-transition: opacity 1s linear;
-o-transition: opacity 1s linear;
-webkit-transition: opacity 1s linear;
transition: opacity 1s linear;
}
ul > li a:hover + ul,
ul > li:hover a + ul:hover{
opacity: 1;
-moz-transition: opacity 1s linear;
-ms-transition: opacity 1s linear;
-o-transition: opacity 1s linear;
-webkit-transition: opacity 1s linear;
transition: opacity 1s linear;
}
现在,需要注意的是:
display
属性不会产生动画(它不能,在none
和inline block
之间(或属性的任何其他有效值之间)没有过渡状态),因此子菜单在页面上始终必须是“可见的”/“存在的”(尽管在大多数浏览器中不透明度为0
将其隐藏)a
链接移动到ul
而不立即隐藏的唯一方式;转换基本上是一个延时,允许第二个选择器ul>li:hover a+ul:hover
匹配转换
,请注意,在版本9之前,不透明性也不受支持也许更简单的方法是使用CSS对等选择器
+
。因为子菜单
不是的直接子菜单,也许更简单的方法是使用CSS对等选择器+
。因为子菜单
不是的直接子菜单,我想我不是我不太确定问题是什么。你能试着重新解释一下你想完成什么吗?当然,我添加了一个屏幕截图。我希望现在看起来更清楚。啊。这是有道理的。你非常非常接近。看我的答案。我想我不太确定问题是什么。你能试着重新解释一下你想完成什么吗?当然,我添加了一个屏幕截图。我希望它现在看起来更清晰。啊。这是有道理的。你是如此,如此,接近。看我的答案。为了完成非常基本的标记,我不想涉及转换。但是我同意必要性。否则,我必须将ul元素放在父元素的正下方,没有边距。这段代码工作得很好,谢谢你u、 为了完成最基本的标记,我不想涉及转换。但是我同意这一必要性。否则,我必须将ul元素放在父元素的正下方,没有任何边距。这段代码运行得很好,谢谢。是的,似乎我只是缺少了理论。谢谢你的解释。是的,似乎我只是错过了理论。谢谢你的解释。