`

伪元素兼容IE

阅读更多

【哪些标签不支持伪元素?】

我也是才知道这个姿势。为了不误导读者,就赶紧补充一下。

伪元素虽然强大,但是还是有一些特定的标签是不支持伪元素 before 和 after 的。

诸如 <img> 、<input>、<iframe>,这几个标签是不支持类似 img::before 这样使用。

究其原因,要想要标签支持伪元素,需要这个元素是要可以插入内容的,也就是说这个元素要是一个容器。而 input,img,iframe 等元素都不能包含其他元素,所以不能通过伪元素插入内容。

 

【css3和css伪类和伪元素区别与兼容性】

     单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素。

     伪元素由双冒号和伪元素名称组成。双冒号是在当前规范中引入的,用于区分伪类和伪元素。但是伪类兼容现存样式,浏览器需要同时支持旧的伪类,比如:first-line、:first-letter、:before、:after等。

对于CSS2之前已有的伪元素,比如:before,单冒号和双冒号的写法::before作用是一样的。

  所以,如果你的网站只需要兼容webkit、firefox、opera等浏览器,建议对于伪元素采用双冒号的写法,如果不得不兼容IE浏览器,还是用CSS2的单冒号写法比较安全。

     以上的意思为:css2伪类和伪元素都是用单引号,所有的浏览器都兼容,但是css3伪类为单引号如:hover ,伪元素为双引号::before;但是双引号IE8以下不兼容

 

【关于 ':before' 和 ':after' 伪元素】

':before' 和 ':after' 伪元素用来在一个元素的内容之前或之后插入生成的内容。

 

 

【解决方案】

 

      (1)单独写针对IE6/IE7/IE8浏览器样式,先介绍IE浏览器单独写CSS样式的几种方法,本文总结了IE hacks、条件注释 CSS、条件注释 html 标签3种方法,需要的朋友可以参考下

使用 JavaScript 判断 IE6 IE7 IE8(Q) 并在其中通过脚本实现 ':before' 及 ':after' 伪元素的效果;

       因为万恶的 IE 存在各种的不标准,因此,在进行页面开发时不免要为 IE 单独写一些 CSS 。熟悉的方法有 IE hacks 和条件注释 CSS(Conditional Stylesheets),下面,不妨讨论一下这两种方法的优缺点。

      ①IE hacks

      举个例子,一个元素在其他浏览中的左边距是 30px ,而在 IE6 中则设置为 20px ,可以如下编写:

.demo {margin-left: 30px; _margin-left: 20px; }
      对我个人而言,喜欢条件注释 CSS 是胜于 IE hacks ,光是 IE hacks 里面带有“hacks”这个单词已经让人很不舒服,总觉得这是偏方,而且是很偏的解决方案。

 

       但是,IE hacks 也有它的优点——

1.CSS hacks 内嵌在普通的 CSS 里面,不会产生更多 HTTP 请求。

2.CSS hacks 内嵌在普通的 CSS 里面,编写时比较方便。

       当然,它的缺点也很明显——

1.它是不标准的产物。

2.内嵌在其他 CSS 中,不便维护。尤其是当 hacks 的数量比较多的时候维护简直是个恶梦。

3.内嵌在其他 CSS 中,即使在非 IE 浏览器中也会被加载,浪费资源。

 

     ②条件注释 CSS

     同样是上面的例子,如果使用条件注释 CSS ,可以如下编写:

<!--[if IE 6 ]>
<link rel="stylesheet" type="text/css" media="all" href="./ie6.css" />
<![endif]-->
 
.demo {margin-left: 20px; }
      这里说明一下:条件注释是一种 IE 专有的、对常规(X)HTML 注释的 Miscrosoft 扩展。从 W3C 标准来说,它也是不标准的产物,但它是微软官方推出的针对 IE 进行开发的方式,并且条件注释对于其他所有浏览器作为常规注释出现,因此对其他浏览器无害。

 

       条件注释 CSS 的好处是在独立的 CSS 文件中编写,能准确控制在特定的 IE 中加载,不会造成资源浪费,并且便于维护。

       缺点就是会产生多余的 HTTP 请求,尤其是当你需要兼容的 IE 版本很多的时候,你就需要产生多个 HTTP 请求,这对于本来通道数目就少的低版本 IE 来说无疑会影响页面加载速度。

 

【总结对比】:显然,以上两种方法都不是很好的方法,因此,接下来介绍一种相对来说更好的解决方案。

 

      ③条件注释 html 标签

       这种方案也是利用条件注释,但并不是对 CSS 使用条件注释,而是对 html 标签使用条件注释,引入不同的 class ,从而区分不同的 IE 以及其他浏览器。例如:

 

<div id="phpcode8" class="msgborder"><pre name="code" class="html"></pre></div>
 
<!DOCTYPE html>  
<!--[if IE 6 ]> <html class="ie6 lte_ie6 lte_ie7 lte_ie8" lang="zh-CN"> <![endif]-->  
<!--[if lte IE 6 ]> <html class="lte_ie6 lte_ie7 lte_ie8" lang="zh-CN"> <![endif]-->  
<!--[if lte IE 7 ]> <html class="lte_ie7 lte_ie8" lang="zh-CN"> <![endif]-->  
<!--[if lte IE 8 ]> <html class="lte_ie8" lang="zh-CN"> <![endif]-->  
<!--[if (gte IE 9)|!(IE)]><!--><html lang="zh-CN"><!--<![endif]-->  
     然后把针对特定 IE 的 CSS 加上相应的 class 并写在普通 CSS 文件里即可。例如上面的例子则可以在 CSS 文件里编写:
.ie6 .demo {margin-left: 20px; }
     这种方法吸收了条件注释表达式的好处同时又不会产生多余的 HTTP 请求,只是由于这些针对特定 IE 的 CSS 与普通的 CSS 放在一起,即不是相应的 IE 也会被加载,因此如果 CSS 数目比较多的话就会像使用 hacks 那样,造成浪费,开发者需要根据具体情况选择方法。

 

    以IE8为例:引用IE8样式文件

 

<!--[if lte IE 8 ]> <link rel="stylesheet" type="text/css"
 media="all" href="./assets/css/ie8.css" /> <![endif]-->
  原css文件代码
.icon-spinner::before {  
content: "\f110";  
}  
.icon-circle::before {  
content: "\f111";  
} 
 

 

  ie8.css代码 :

 

</pre><pre name="code" class="css"><span style="color:#ff0000;">.icon-spinner::before {  
content: "\f110";  
}  
.icon-circle::before {  
content: "\f111";  
}</span> 
 iE8只支持:   不支持::

 

 

 

     (2)使用 jQuery 的插件 Pseudo Plugin,该组件利用 IE 特有的 CSS 行为(behavior)及 CSS 表达式来模拟 ':before' 及 ':after' 伪元素的效果。

     使用方法:

一、引入jquery,引用jquery.pseudo.js

 

<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="jquery.pseudo.js"></script>

 这里注意:经过测试,juqery版本必须是1.7.2,其他版本无效。

①jquery.pseudo.js下载链接http://static.wozhuye.com/uploadfile/2016/0118/20160118042649635.rar

②jquery-1.7.2.min.js链接http://www.htmleaf.com/js/jquery/1.7.2/jquery.min.js

 

二、修改css

      在你需要使用的html标签中加入before,after属性。

      如通常p:before{content: “before”;},要在p标签中加入{before: ‘before';after: “after”;},如不明白请看下面示例代码。

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>兼容</title>
    <script src="./jquery-1.7.2.min.js"></script>
    <script src="./jquery.pseudo.js"></script>
</head>
<body>
<style type="text/css">
    p:before {
        content: "前面";
        before: '前面';/*兼容IE*/
    }
    p:after {
        content: "后面";
        after: "后面";/*兼容IE*/
    }
</style>
<p> Aloha! </p>
</body>
</html>

 

 

 

 

 

.

分享到:
评论

相关推荐

    css-div的border属性使用&伪元素伪类.docx

    对于现代浏览器,推荐使用双冒号`::`来表示伪元素,而对于较旧的浏览器,如IE,可能需要使用单冒号`:`的CSS2语法来保证兼容性。 在实际开发中,理解并熟练运用`border`属性和伪元素,能够帮助我们创造出丰富多样的...

    纯css多级下拉菜单兼容ie6+主流浏览器

    `或者使用伪元素如`::before`和`::after`来清除浮动。 3. **层级关系**:下拉菜单的子菜单需要在鼠标悬停时显示,这涉及到CSS的`display`属性。IE6不支持`:hover`伪类在非链接元素上,但可以通过为父元素添加`hover...

    CSS完美兼容IE6_IE7_FF的通用方法

    ClearFix是一种常用的技术,通过添加伪元素来清除浮动,避免布局问题: ```css /* ClearFix */ .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .clearfix {...

    兼容ie低版本的星星评分

    首先,"兼容ie低版本的星星评分"意味着这款插件采用了能够让旧版IE浏览器识别和执行的技术,可能是通过JavaScript或者CSS。IE6到IE8并不支持现代Web技术如HTML5和CSS3,因此,插件开发者可能使用了传统的DOM操作、...

    IE6, IE7, IE8 CSS 兼容速查表

    例如,可以为父元素添加`zoom:1`触发hasLayout,或者使用`:before`伪元素结合`clear:both`。 4. **选择器支持**:IE6只支持基本的选择器,如ID、类、标签等,而不支持后代选择器、属性选择器等。IE7和IE8稍好,但仍...

    CSS兼容IE8代码

    "CSS兼容IE8代码"是指针对IE8浏览器进行优化的CSS(层叠样式表)代码,以确保在IE8中能够正常显示和运行网页设计。在IE8中,由于其对CSS2.1标准的支持不完整,以及特有的盒模型、滤镜等特性,常常会导致现代网页设计...

    CSS兼容IE和Firefox的技巧集合.rar

    这个"CSS兼容IE和Firefox的技巧集合"压缩包提供了针对这两种浏览器的兼容性解决方案。 首先,我们要理解浏览器之间的差异主要源于对CSS标准的实现不一致。例如,IE常常遵循其自己的盒模型,而Firefox等现代浏览器...

    网页模式对话框效果,兼容IE6,7,8,firefox

    在创建兼容IE6、7、8以及Firefox等主流浏览器的网页模式对话框时,开发者需要考虑不同浏览器之间的差异和兼容性问题。 首先,让我们了解一些基本概念。在HTML中,最原始的对话框是`&lt;dialog&gt;`元素,但这个元素在旧版...

    纯css二级导航 兼容ie6

    本教程将聚焦于如何利用纯CSS实现一个兼容IE6的二级导航菜单,正如“纯css二级导航 兼容ie6”这个主题所示。 首先,让我们了解纯CSS导航菜单的基本概念。CSS(层叠样式表)是一种样式语言,用于描述HTML或XML(包括...

    自定义 input radio 兼容ie6

    另外,随着浏览器更新换代,IE6的市场份额已非常低,大多数现代网站不再需要专门针对它进行兼容性处理。但如果你的网站仍需要支持较旧的浏览器,了解这些技术仍然很有价值。在开发过程中,建议使用渐进增强...

    兼容IE6的遮罩层

    在现代浏览器中,我们可以利用CSS3的`::before`和`::after`伪元素,以及`rgba()`颜色函数来创建透明遮罩。但在IE6中,这些特性是不支持的。 为了兼容IE6,我们需要使用一些特定的技术和技巧。一种常见方法是使用一...

    IEtest 5-8 css样式兼容

    6. 计算选择器和伪类:IE6不支持复杂的CSS选择器和一些伪类,如`:nth-child()`,可以使用JavaScript库进行辅助。 通过ietester这样的工具,开发者可以在实际开发过程中及时发现并解决这些问题,提高网页在旧版IE中...

    给before和after伪元素设置js效果的方法.docx

    给before和after伪元素设置js效果的方法 在CSS中,伪元素(Pseudo-elements)是一种特殊的元素,它允许我们添加额外的元素而不扰乱文档本身。在某些情况下,我们需要给before和after伪元素设置js效果,以实现某些...

    最全的CSS浏览器兼容问题整理(IE6、IE7)

    或者使用CSS伪元素: ```css #parent:after { content: ""; display: table; clear: both; } ``` 9. **自适应高度**: 在不支持`min-height`的浏览器中,可以使用JavaScript或者CSS的`overflow`属性来实现...

    JS控制伪元素的方法汇总

    CSS3推荐使用双冒号`::`来区分伪元素和伪类,但为了兼容旧版本的IE8,有时仍会使用单冒号`:`。 3. **获取伪元素的属性值**: 使用`window.getComputedStyle()`方法可以获取元素及其伪元素的样式信息。此方法返回一...

    IE5,IE6,IE7,IE8的css兼容性列表

    尽管如此,IE7仍然存在一些兼容性问题,比如它对浮动元素的处理仍不完美,有时会出现“双倍边距”bug。此外,IE7对透明度的支持需要借助滤镜(filter)属性,而不是通用的opacity属性。 最后,IE8在2009年发布,对...

    CSS伪元素 CSS:before CSS伪元素(Pseudo Element):after与:before

    :before 伪元素在元素...估计大家很少用到这些 ,但是在技术飞速发展的现在,我觉得我们不能整天把时间浪费在兼容IE6上! 先看一下:after与:before甚模样: HTML中只有一个P标签,P里面有一行文字: &lt;p&gt; 一行测试文字

    让ie兼容css选择器

    ie7.js通过动态创建DOM元素并应用样式来实现这些功能,从而帮助开发者在不牺牲样式表现的情况下,向后兼容老版本的IE。 ie8.js则是另一个类似的库,它扩展了ie7.js的功能,增加了对更多CSS3选择器的支持,比如:nth-...

    新浪多图片显示兼容IE

    标题“新浪多图片显示兼容IE”表明我们关注的是一个与网页开发相关的问题,特别是关于在Internet Explorer(简称IE)浏览器中正确显示多个图片的技术。在早期,IE由于其独特的渲染引擎,经常会在处理某些Web标准时与...

    CSS兼容IE6,IE7,FF的技巧

    ### CSS兼容IE6, IE7, FF的技巧详解 #### 一、CSS Hack技术解析 在Web开发过程中,由于不同的浏览器对CSS的支持程度不同,尤其是IE6与IE7这类较老版本的浏览器,在处理CSS样式时存在差异。为了确保网站在不同...

Global site tag (gtag.js) - Google Analytics