浏览器兼容性:条件注释

条件注释与 HTML 注释 ( <!-- -->) 具有相同的语法,但它们仅适用于 Internet Explorer 浏览器 (IE)。尽管现在网络上不再使用该技术。

注释里面的内容只在IE 5-9上可用,其他浏览器会忽略。从 IE 10 开始,语法被禁用。

<!--[if IE]>Only IE sees this<![endif]-->

还可以添加一些约束来限制 IE 版本,例如:

<!--[if IE 8]>Only IE 8 sees this<![endif]-->

<!--[if gte IE 8]>Only IE 8 and higher versions see this<![endif]-->

<!--[if lte IE 8]>Only IE 8 and lower versions see this<![endif]-->

表示IE版本的特殊字符如下:

特点描述
gt大于
gte大于或等于
lt少于
lte小于或等于

可以为给定的 IE 版本应用样式或修复,例如:

<link href="styles.css" rel="stylesheet" />

<!--[if IE 8]>
    <link href="fix-ie8.css" rel="stylesheet" />
<![endif]-->

<!--[if IE 9]>
    <link href="fix-ie9.css" rel="stylesheet" />
<![endif]-->

styles.css文件包含适用于现代浏览器的样式,而fix-ie8.cssfix-ie9.css文件分别提供适用于 IE 8 和 IE 9 的修复程序。 

但如此,就会多一个 HTTP 请求。但是,可以通过对根元素使用条件注释来减少请求的数量html:

<!--[if lt IE 7]><html class="ie6"><![endif]-->
<!--[if IE 7]><html class="ie7"><![endif]-->
<!--[if IE 8]><html class="ie8"><![endif]-->
<!--[if IE 9]><html class="ie9"><![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--><html><!--<![endif]-->

html根据访问者当前使用的 IE 版本,根元素将有一个额外的 CSS 类。例如,IE 9 浏览器将添加ie9CSS 类。这些样式现在合并为一个CSS文件:

<link href="all-styles.css" rel="stylesheet" />

它包含针对不同 IE 版本的修复:

.card {
    background: rgba(0, 0, 0, 0.5);
}

/* Background with opacity is only available on IE 9 and later */
.ie6 .card,
.ie7 .card,
.ie8 .card {
    background: #ccc;
}

HTTP 请求数问题已解决。但是,样式现在包含许多重复代码。我们可以通过向html元素添加更多 CSS 类来解决此问题:

<!--[if lt IE 7]><html class="lt-ie7 lt-ie8 lt-ie9"><![endif]-->
<!--[if IE 7]><html class="lt-ie8 lt-ie9"><![endif]-->
<!--[if IE 8]><html class="lt-ie9"><![endif]-->
<!--[if gt IE 8]><!--><html><!--<![endif]-->

如此,IE 6、7、8 中 card 的附加样式现在可以合并到一个类声明中:

.lt-ie9 .card {
    /* Styles for IEs before 9 */
}

除了 Internet Explorer (IE),其他浏览器会忽略条件注释。IE 10 也禁用了该标签。如何为其他浏览器和旧版本的 IE 添加额外的类?

可以根据用户代理检测浏览器及其版本。以下代码片段检查当前浏览器是否为 IE 11,并在需要时添加相应的 CSS 类:​​​​​​​

function detectIE11() {
    if (navigator.userAgent.match(/Trident.*rv:11\./)) {
        document.documentElement.classList.add('ie11');
    }
}

一旦ie11将类添加到根html元素,就可以为 IE 11 显式添加更多样式:

.ie11 .otherClass {
    /* Styles for IE 11 */
}

该方法不仅适用于 IE 11,还可以用于支持其他浏览器。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的猫96

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值