2

我试图根据用户使用的浏览器有条件地包含一个 css 文件。而且我已经能够让它以一种方式工作,但不是我想要的方式,因为它需要一个额外的样式表。工作方式,在我的 Site.Master 文件中,我包含了 ie8 的样式表。

<link href="~/Styles/ie8.css" rel="Stylesheet" type="text/css" />

然后在 Site.Master.cs 中的Page_Load函数。

    if (!(browser.Type == "IE8" ||
        browser.Type == "IE7" ||
        browser.Type == "IE6" ||
        browser.Type == "IE5"))
    {
        Page.Header.Controls.Add(new LiteralControl(
            "<link rel=\" stylesheet\" type=\"text/css\" href=\"" + ResolveUrl("~/Styles/ie.css") + "\" />"));
    }

这工作并且css是正确的并且在ie10中使用开发者工具和兼容性我可以看到它包含正确的css。但是,如果我将代码更改为应该等效的代码。它不起作用。Site.Master:

<link href="~/Styles/ie.css" rel="Stylesheet" type="text/css" />

站点.Master.cs

    if ((browser.Type == "IE8" ||
        browser.Type == "IE7" ||
        browser.Type == "IE6" ||
        browser.Type == "IE5"))
    {
        Page.Header.Controls.Add(new LiteralControl(
            "<link rel=\" stylesheet\" type=\"text/css\" href=\"" + ResolveUrl("~/Styles/ie8.css") + "\" />"));
    }

如果我在 ie10 的兼容模式下放置断点,Page.Header.Controls.Add我可以看到该函数被调用。但是当我去开发工具并寻找使用 ie8.css 中定义的类的元素时,它们并不存在,就像它从未包含在内一样。这里发生了什么?

4

1 回答 1

1

您应该使用条件注释,而不是检查 IE 服务器端:

<!--[if lte IE 8]><link href="ie8.css" rel="Stylesheet" type="text/css" /><![endif]-->
<!--[if lte IE 7]><link href="ie.css" rel="Stylesheet" type="text/css" /><![endif]-->
于 2013-04-17T14:20:23.907 回答