css - 如何使伪类与 Internet Explorer 7/8 一起工作?

标签 css pseudo-class

我编写了以下代码来创建一个三列布局,其中第一列和最后一列分别没有左右边距(根据定义,三列将具有完全相同的类,因为它们是动态生成的 - -见最后一段):

#content {
    background-color:#edeff4;
    margin:0 auto 30px auto;
    padding:0 30px 30px 30px;
    width:900px;
}
    .column {
        float:left;
        margin:0 20px;
    }
    #content .column:nth-child(1) {
        margin-left:0;
    }
    #content .column:nth-child(3) {
        margin-right:0;
    }

.width_33 {
    width:273px;
}

HTML:

<div id="content">
    <cfoutput query="IndexView" group="pName"> <!--loop one to create the columns -->
        <div class="column width_33"> <!-- Columns -->
            <h3>#IndexView.pName#</h3>
            <ul>
            <!---LOOP two--->
            <cfoutput>
                <li>
                    #IndexView.titles#
                </li>
            </cfoutput>
        </div>
    </cfoutput>
</div>

问题是这段代码在 Internet Explorer 7 和 8 中不起作用?我可以在 IE 中使用的唯一伪类(在本例中)是“first-child”,但这不会消除第三列和最后一列的右边距。有谁知道我可以让这段代码在 IE 7/8 上运行的方法吗?

一个重要的旁注:这三列是通过查询循环动态生成的,因此每列的类属性都是相同的。

最佳答案

我会使用 jquery。您甚至可以将对脚本的调用包装在条件注释中。 jquery 1.4 在选择器方面完全符合 CSS 3,因此您可以使用相同的选择器,然后为您想要设置样式的元素指定一个类。像这样的东西:

This is the jquery code:
 <!--[if IE]>  
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
 <script type="text/javascript"> 
    $(function() {
     $("#content .column:nth-child(1)").addClass("childone");
     $("#content .column:nth-child(3)").addClass("childthree");
    });
 </script>
 <![endif]-->
This is your CSS, with the new classes for IE support:

 #content .column:nth-child(1), .childone {
    margin-left:0;
 }
 #content .column:nth-child(3), .childthree {
    margin-right:0;
 }

编辑

上面的有效,但您不熟悉 jquery 或如何进行动态添加类等更改,我可以理解您对解决方案的困惑和抵制。这是一个稍微修改过的版本,可以使事情更清楚一些:

 <!--[if IE]>  
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
 <script type="text/javascript"> 
     $("#content .column:nth-child(1)").css("margin-left","0");
     $("#content .column:nth-child(3)").css("margin-right","0");
 </script>
 <![endif]-->

在这种情况下,脚本简单地将您想要的相同样式规则添加到相同的 CSS 选择器,而不是使用可以添加到样式表中的虚拟类。我更喜欢使用虚拟类,因为它允许我在不阻塞脚本的情况下为同一个类设置多个样式规则,但是由于每个选择器只有一个规则,所以这是一个很好的示例,说明了 jquery 的工作方式,无论您使用哪种方法进去吧。

关于css - 如何使伪类与 Internet Explorer 7/8 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2406241/

相关文章:

jquery - 在 jQuery 中重新创建 CSS 伪类

javascript - 对 :host CSS pseudo class 应用更深入的选择

CSS 父亲选择器

html - 不需要的间距与 css 显示和表格单元格

css - html[lang ="en"] 和 html :lang(en) in CSS? 有什么区别

html - 颜色不适用于事件按钮

css - 使用转换隐藏内容时让以下内容折叠

html - 需要有关 html/css 编码的建议

javascript - jquery,切换 css 内容(上下箭头)