减少 IE8 的 hack background-image

Less hack background-image for IE8

我想用 Less 为 IE8 设置不同的背景图片,因为它不支持 background-size

我在 Google 中搜索过关于 IE8 的 hack,结果是编写这样的代码 height: 300px;,以 </code> 结尾。</p> <p>我试过了,但我发现它不支持 <code>background-image 设置。

如果我这样写

.backgroundImage(@url) {
  background-image: url('@{base_url}@{url}.png');
  background-image: e("url('@{base_url}x/@{url}.png')");
}

#demo {
  .backgroundImage('large_cloud');
}

, Less 编译器会报错,如果我这样设置 height: 300px;,编译器不会显示任何错误。

所以,我很困惑。如何使用 Less hack 在 IE8.

中设置 background-image

Less 是为了与正确的 CSS 兼容而编写的,因此当用于 hack 时它可能并不总是正常工作。虽然 heightcolor(在下面链接的线程中)等一些 hack 可能会起作用,但不能保证所有这些都会起作用。如果您需要具有 hack 的值才能正确编译,那么可以安全地为以下值执行 CSS escaping

#demo{
  background-image: ~"url('myimage-400px.png')";
}

#demo{
  background-image: e("url('myimage-400px.png')");
}

以上解决方案纯粹是针对 Less 编译器错误的解决方案,我不太清楚它是否真的适用于 IE8。如果该方法不起作用,那么您可能需要查看 this SO thread.

中建议的选项

注意:这个问题类似于this one但不一样,因为那是关于属性名称插值而这个更多的是关于价值观。

您应该完全避免 黑客攻击。相反,有条件地向 IE 8 用户提供样式表,以解决您面临的 version-specific 问题。

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

依赖语法怪癖通常会导致意想不到的 side-effects,并且通常会带来比宣传的更大的影响范围。另一方面,条件注释本质上是为应用 version-specific 指令而设计的。

这是我使用的技术以及在用 LESS 编写时让它编译的技巧。

1) 为包含background-size的旧浏览器编写背景css属性。 例如:background:transparent url(/img/path-to-image-ie8.png) 0% 0% no-repeat;

2) 为 包括 background-size [=36] 的现代浏览器编写背景 css =].例如:background:transparent url(/img/path-to-image.png) 0% 0%/100% auto no-repeat;

旧浏览器无法识别第二行并忽略它,现代浏览器会用第二行覆盖第一行。

让它在 LESS 中编译的技巧是这样写 /background:transparent url(/img/path-to-image.png) 0% 0%~"/"100% auto no-repeat;