【问题标题】:Alternative to only-child on Internet Explorer 8Internet Explorer 8 上的独生子女替代方案
【发布时间】:2014-10-15 08:46:54
【问题描述】:

我创建了一个看起来像这样的 CSS 菜单 - jsfiddle

使用的 CSS 类。

#main_nav {
    margin-top:15px
}            

#main_nav ul {
    list-style:none;
    position:relative;
    float:left;
    margin:0;
    padding:0;
    background: #888;
}

#main_nav ul a {
    display:block;
    text-decoration:none;
    font-size:12px;
    line-height:32px;
    padding:0 15px;
    color: #fff;
    font-family: "Helvetica Neue", Helvetica, Arial, Verdana, sans-serif;
}

#main_nav ul li {
    position:relative;
    float:left;
    margin:0;
    padding:0
}

#main_nav ul li.current-menu-item {
    background:#ddd
}

#main_nav ul li:hover {
    background: #008000
}

#main_nav ul ul {
    display:none;
    position:absolute;
    top:100%;
    left:0;
    background:#888;
    padding:0
}

#main_nav ul ul li {
    float:none;
    width:200px;                
}

#main_nav ul ul a {
    line-height:120%;
    padding:10px 15px
}

#main_nav ul ul ul {
    top:0;
    left:100%
}

#main_nav ul li:hover > ul {
    display:block
}

.menu li > a:after { margin-left: 5px; float: right; content: '\25BA'; }
.menu > li > a:after { margin-left: 5px; float: right; content: '\25BC'; }
.menu li > a:only-child:after { margin-left: 0; content: ''; }
<div id="main_nav">
    <ul class="menu">
        <li class="current-menu-item"><a href="#">Home</a></li>
        <li><a href="#">Menu 1</a>
            <ul>
                <li><a href="#">Sub Menu 1</a></li>
                <li><a href="#">Sub Menu 2</a></li>
                <li><a href="#">Sub Menu 3</a></li>
                <li><a href="#">Sub Menu 4</a>
                    <ul>
                        <li><a href="#">Deep Menu 1</a>
                            <ul>
                                <li><a href="#">Sub Deep 1</a></li>
                                <li><a href="#">Sub Deep 2</a></li>
                                <li><a href="#">Sub Deep 3</a></li>
                                <li><a href="#">Sub Deep 4</a></li>
                            </ul>
                        </li>
                        <li><a href="#">Deep Menu 2</a></li>
                    </ul>
                </li>
                <li><a href="#">Sub Menu 5</a></li>
            </ul>
        </li>
        <li><a href="#">Menu 2</a>
            <ul>
                <li><a href="#">Sub Menu 1</a></li>
                <li><a href="#">Sub Menu 2</a></li>
                <li><a href="#">Sub Menu 3</a></li>
            </ul>
        </li>
        <li><a href="#">Menu 3</a>
            <ul>
                <li class="dir"><a href="#">Sub Menu 1</a></li>
                <li class="dir"><a href="#">Sub Menu 2</a>
                    <ul>
                        <li><a href="#">Category 1</a></li>
                        <li><a href="#">Category 2</a></li>
                        <li><a href="#">Category 3</a></li>
                        <li><a href="#">Category 4</a></li>
                        <li><a href="#">Category 5</a></li>
                    </ul>
                </li>
                <li><a href="#">Sub Menu 3</a></li>
                <li><a href="#">Sub Menu 4</a></li>
                <li><a href="#">Sub Menu 5</a></li>
            </ul>
        </li>
        <li><a href="#">Menu 4</a></li>
        <li><a href="#">Menu 5</a></li>
        <li><a href="#">Menu 6</a></li>
    </ul>
</div>

给定 CSS 中的a:only-child:after 在 Internet Explorer (8) 上不起作用。因此,每个菜单项上都会出现一个箭头,包括那些没有子菜单的项。

在 Internet Explorer 8 中是否有 a:only-child:after 的替代品?

【问题讨论】:

    标签: html css internet-explorer internet-explorer-8 css-selectors


    【解决方案1】:

    我找不到任何其他可以在这种情况下代替:only-child 的伪选择器。我尝试使用一些兄弟选择器,但没有成功。

    一个可能的解决方案是使用 Jquery “模拟”only-child。 Jquery 原生支持大多数 css 伪,独立于浏览器。你可以这样:

    $(document).ready(function() {
        $("a:only-child").addClass("only-child");
    });
    

    为每个满足伪的a 设置一个类.only-child。然后,将您的 css 规则更改为:

    .menu li > a.only-child:after {
    

    工作小提琴:http://jsfiddle.net/xgjhk0kw/2/

    【讨论】:

    • "我找不到任何其他可以与 :only-child 相同的伪选择器。"如果这样的选择器已经存在,他们可能不会费心去创建一个新的;)
    • 我也推荐这个解决方案——你不能用 CSS 模拟 :only-child 的主要原因是因为没有前面的兄弟选择器。见Faking CSS :only-child in IE8 with jQuery/JavaScript
    • 对不起,如果我没有说清楚。我的意思是我找不到另一个选择器可以让他做他想做的事......当然我知道没有其他选择器会做同样的事情......
    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 2010-12-14
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2016-08-17
    • 1970-01-01
    相关资源
    最近更新 更多