是否可以有条件地包含CSS?

时间:2011-08-22 16:56:27

标签: asp.net html css

我有一个包含CSS的ascx。这个ascx可能会多次添加到页面中。它使用的CSS只需要包含一次。

  1. 是否可以有条件地包含CSS?如果是这样的话?
  2. 这被认为是不好的做法吗?

5 个答案:

答案 0 :(得分:5)

  

我有一个带有一些CSS的ascx ......这被认为是不好的做法吗?

是。理想情况下,CSS规则应该在一个单独的静态css文件中定义,该文件只能在主页的标题中加载一次。正文中的CSS不符合标准。

如果您在静态CSS文件上设置了良好的缓存规则,这将显着减少您通过网络传输的数据量,因为不需要为每个页面加载再次加载CSS规则。如果您希望仅在呈现某些相关ASCX文件时在标题中包含此文件,请查看Neil Fenwick's answer

更新

无论出于何种原因,尼尔芬威克似乎已经删除了他的答案。希望他不会介意我在这里复制它:

  

肯定是的,这是可能的。

     

我建议您查看像ClientDependency这样的库来管理您的CSS和JS包含&的依赖关系。

     

如何在ClientDependency codeplex页面上包含的好例子。   组织CSS和JS依赖项的好习惯是,您可以多次断言它们的需求,但只在输出中发出一次依赖。

答案 1 :(得分:1)

ClientScriptManager可以通过检查是否添加了某个特定的“脚本”来处理这个问题。用于javascript,但适用于任何事情。

if(!Page.ClientScript.IsStartupScriptRegistered("mykey")) {
    Page.ClientScript.RegisterStartupScript(this.GetType(), "mykey", "<link type=\"text/css\" href=\"stylesheet.css\"/>", false);
}

答案 2 :(得分:0)

您可能对查看Modernizr非常感兴趣,它允许您根据测试结果进行大量有趣的测试并加载不同的资源(例如CSS)。例如,如果浏览器不支持border-radius等,您可能需要加载rounded-images.css。

答案 3 :(得分:0)

Neil's answer为基础。我们使用Telerik's ASP MVC extensions来管理ASP.NET MVC中的JavaScript和CSS。它允许“智能”包含JS和CSS(甚至从部分视图),防止文件重复。它还带有其他铃声和口哨(如文件合并和压缩)。

这可能不适用于基于你的帖子(原始ASP.NET)的确切情况,但我认为我会提到它是为了寻找同样的事情的ASP.NET MVC用户。

答案 4 :(得分:-2)

把它放在html的头部。

<pre>
<!--[if gte IE 8]>         
 <link rel="stylesheet" type="text/css" href="ie8-and-up.css" />  <![endif]-->
</pre>

欲了解更多信息,请访问:http://css-tricks.com/132-how-to-create-an-ie-only-stylesheet/ GTE意味着大于。

可怕的做法。除非这是你在工作中所做的一切,因为这会产生很大的工作量,因为将来可能需要更改每个css文件。