Internet Explorer 8 上的独生子女替代方案

Posted

技术标签:

【中文标题】Internet Explorer 8 上的独生子女替代方案【英文标题】:Alternative to only-child on Internet 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 的替代品?

【问题讨论】:

【参考方案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 对不起,如果我没有说清楚。我的意思是我找不到另一个选择器可以让他做他想做的事......当然我知道没有其他选择器会做同样的事情......

以上是关于Internet Explorer 8 上的独生子女替代方案的主要内容,如果未能解决你的问题,请参考以下文章

从 Internet Explorer 8 打印时,我需要为不透明度设置哪种 css 样式?

为啥即使在模拟 Internet Explorer 8 文档模式时,Internet Explorer 11 也不支持条件注释?

在 Internet Explorer 9 中更改域名后,Ajax 停止工作

markdown IE上的保证金自动问题(Internet Explorer)

Internet Explorer 上的 :before 和 :after 选择器

Internet Explorer 8 + 放气