【问题标题】:CSS pseudo selector on drop down menu下拉菜单上的 CSS 伪选择器
【发布时间】:2013-04-12 08:33:34
【问题描述】:

我正在使用 CSS :before 伪选择器在下拉列表中的第一项上方创建一个块。我一直无法让使用伪选择器创建的这个块与它上面的

  • 宽度相同。

    例如,当您将鼠标悬停在“关于”上时,出现在其下方的伪块的宽度应与包含“关于”一词的块的宽度相同,其他 3 个块以此类推。

    这是我到目前为止所得到的一个小提琴:http://jsfiddle.net/jh67P/

    这是我的 HTML:

    <nav>
        <ul class="main">
            <li><a href="#">About</a>
                <ul class="secondary">
                    <li><a href="#">Learn About Us</a></li>
                    <li><a href="#">Nice things to know</a></li>
                </ul>        
            </li>
            <li><a href="#">Products</a>
                <ul class="secondary">
                    <li><a href="#">Product One</a></li>
                    <li><a href="#">Product Two</a></li>
                </ul>        
            </li>
            <li><a href="#">Features</a>
                <ul class="secondary">
                    <li><a href="#">Something Nice</a></li>
                    <li><a href="#">Another nice thing</a></li>
                </ul>        
            </li>
        </ul>
    </nav>
    

    这是 CSS:

    nav .main {
        font-size: 1em;
        margin: 0;
        padding: 0;
        list-style: none;
    }
    
    .main > li {
        display: block;
        position: relative;
        float: left;
    }
    
    .main > li a {
        display: block;
        text-decoration: none;
        color:#FFF;
        border-top: 1px solid #ffffff;
        padding: 5px 15px 5px 15px;
        background: #1e7c9a;
        margin-left: 1px;
        white-space: nowrap;
    }
    
    .main > li a:hover {
        background: #3b3b3b;
        color:#FFF;
    }
    
    .secondary {
        display:none;
        list-style: none;
        margin: 0;
        padding: 0;
    }
    
    
    .main li:hover .secondary {
        display: block;
        position: absolute;
    }
    
    .main li:hover ul li {
        float: none;
        font-size: 1em;
    }
    
    .main > li:hover a { background: #3b3b3b; }
    
    .main > li:hover li a:hover {
        background: #1e7c9a;
    }
    
    .main  li:hover ul:before {
        content:'';
        display:block;
        width:100%;
        height:10px;
        border-bottom:10px solid #1e7c9a;
        border-right: 10px solid transparent; 
    }
    

    编辑:使用绝对定位我能够达到效果。这是更新后的 CSS。

    nav .main {
        font-size: 1em;
        margin: 0;
        padding: 0;
        list-style: none;
    }
    
    .main > li {
        display: block;
        position: relative;
        float: left;
    }
    
    .main > li a {
        display: block;
        text-decoration: none;
        color:#FFF;
        border-top: 1px solid #ffffff;
        padding: 5px 15px 5px 15px;
        background: #1e7c9a;
        margin-left: 1px;
        white-space: nowrap;
    }
    
    .main > li a:hover {
        background: #3b3b3b;
        color:#FFF;
    }
    
    .secondary {
        display:none;
        list-style: none;
        margin: 0;
        padding: 0;
    }
    
    
    .main li:hover .secondary {
        display: block;
        position: absolute;
        top:40px;
    }
    
    .main li:hover ul li {
        float: none;
        font-size: 1em;
    }
    
    .main > li:hover a { background: #3b3b3b; }
    .main > li:hover li a:hover {
         background: #1e7c9a;
    }
    
    .main > li:hover:after {
        content:'';
        display:block;
        width:100%;
        height:10px;
        border-bottom:10px solid #1e7c9a;
        border-right: 10px solid transparent; 
        position:absolute;
        top:20px;
        margin-left:1px;
    }
    
  • 【问题讨论】:

      标签: css html css-transitions pseudo-element


      【解决方案1】:

      换个方式怎么样:

      .main  li:hover ul:before {
      

      收件人:

      .main > li:hover > a:after {
      

      这就是你所追求的吗?

      jsFiddle

      【讨论】:

      • 差不多。我试图查看是否可以让伪元素出现在 .main > li 和 .secoondary > li 之间所以当 .main > li 悬停时它显示伪元素,然后是下面的 .secondary
          列表那。对不起,如果我解释得不好。我只是在阅读有关伪元素的内容,并且正在查看是否可以使用 on 来设置下拉列表的样式。
      • 您没有很好地解释它,它目前仅在悬停.main li 时才显示伪元素,然后在其正下方显示ul.secondary。所以伪元素位于.main li.secondary li 之间的正确位置。在你原来的小提琴中已经是这样了,我改变的只是伪元素的宽度与里面有“关于”这个词的块一样宽。那么还有什么不对呢?
      • 我已经编辑了答案,因为上一行使伪元素出现在li 中的每个a 之后,现在它只在a 之后添加它li.main 的直系后代。
      • 这是一个更新的小提琴。 jsfiddle.net/jh67P/5 这与我想要做的很接近。例如,将鼠标悬停在“关于”上。我希望伪元素出现在 ul.seconday > li 元素之上。在更新的小提琴中,伪元素似乎就在其中。感谢您的观看。
      • ul.secondary 内的每个li 之上还是仅在ul.secondary 之上?在我帖子的 jsFiddle 中,它确实出现在“ul.secondary”上方,而不是在里面。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      相关资源
      最近更新 更多