CSS 边框和 :hover 动态伪类

Posted

技术标签:

【中文标题】CSS 边框和 :hover 动态伪类【英文标题】:CSS border and the :hover dynamic pseudo-class 【发布时间】:2011-02-22 23:28:56 【问题描述】:

我只使用 CSS 构建了一个具有两个级别的持久下拉菜单。这是相当标准的。

它是一组嵌套的 UL,UL 的 :hover 状态用于显示和隐藏子菜单级别。

类似这样的:

| *Pets* | Colors | Cars |
| Cats | Dogs | Birds| Goats | Sheep | 


| Pets | *Colors* | Cars |
| Red | Orange | Green | Blue| Yellow |

然后我在第一级 UL 元素的底部添加了一个 1px 的边框。像这样:

| *Pets* | Colors | Cars |
--------------------------------------
| Cats | Dogs | Birds| Goats | Sheep | 

当我将鼠标悬停在第一级项目(宠物)上,然后将鼠标向下移动到第二级(猫)时,整个第二级都会消失。

我终于发现UL的1px边框不包含在UL的悬停区域中。

我可以在下拉菜单级别的底部添加边框,而不会弄乱菜单悬停吗?

谢谢!

【问题讨论】:

【参考方案1】:

由于您实际上是将:hover 状态添加到<ul> 内的<li>s,因此父<ul> 上的边框不包含在:hover 区域中。将边框添加到每个<li> 而不是父<ul> 将解决您的问题。确保将 0 的左右边距添加到 <li>s,即使这样做,您仍然可能需要添加负的左边距或左边距以消除边框中的任何间隙,以及添加覆盖样式到子菜单<li>s 如果它们也以底部边框结束。


编辑:好的,我有一个解决方案,希望对你有用,使用以下 html
<ul>
    <li>Main1
      <ul><li>sub1</li><li>sub2</li><li>sub3</li></ul>
    </li>
    <li>Main2
      <ul><li>sub1</li><li>sub2</li><li>sub3</li></ul>
    </li>
    <li>Main3
      <ul><li>sub1</li><li>sub2</li><li>sub3</li></ul>
    </li>
    <li>Main4
      <ul><li>sub1</li><li>sub2</li><li>sub3</li></ul>
    </li>
</ul>

还有这个 CSS:

ul  background:#ccc; border-bottom:5px solid #0c0; height:25px; 
ul li  cursor:pointer; display:inline-block; position:relative; height:30px; 
        zoom:1; _display:inline; 
ul li:hover ul  display:block; 
ul li ul  border:0 none; display:none; position:absolute; top:30px; 
ul li ul li  display:inline; padding:5px; 

​ ​这里的关键部分是:

ul 的高度设置为比主ul li 的高度小等于border-width 的数量 在li上设置display:inline-block,使高度属性生效 (注:zoom:1; _display:inline; 用于 IE6) 在主ul li 上设置position:relative 和在子'ul li ul' 上设置position:absolute,'top' 值为主'ul li' 高度

测试和工作:http://jsfiddle.net/TKrSM/1/ (可能需要在您的版本中调整填充高度和顶部值)

【讨论】:

感谢您的回答。我尝试为 LI 子元素添加边框,但它引发了一些问题。例如,一些菜单级别只有几个项目。它们的宽度不足以跨越整个页面宽度。 LI 上的任何边框也不够宽,无法跨越整个页面宽度。 哇!惊人的!这正是我所需要的。感谢您的回答。 还有一个问题。如何让子 UL 元素与*** UL 左对齐?它们出现在悬停的父 LI 下方。谢谢!【参考方案2】:

您可以使用背景并在底部给它一个 1px 的黑线,或者您可以添加一个元素并将其绝对定位为 1px 高度和黑色背景。我会选择背景选项,因为它更容易。

【讨论】:

非常感谢您的回答。我也考虑过背景图像解决方案。我没有想到 1px 高度的绝对定位块。

以上是关于CSS 边框和 :hover 动态伪类的主要内容,如果未能解决你的问题,请参考以下文章

伪类(伪类选择器)

关于css伪类,伪元素详解总结

常用伪类伪元素选择器

CSS 六边形边框hover闭合动画效果

第一章入门篇伪类伪对象

css3 伪类