我正在开发一个需要一些自定义CSS文件的web部件。所以我使用CssRegistration类将它们添加到页眉中。
代码注册了4个CSS文件,这些文件被web部件特性部署到layouts文件夹中。当web部件的属性中设置了指向它的路径时,可以选择注册第五个CSS文件
AdditionalCss
. CSS文件应该插入到所有sharepointcss文件之后的头中,并且应该按照代码添加它们的顺序进行排序。
我使用的代码如下:
var contentCss = new CssRegistration
{ Name = "/_layouts/MyWebPart/css/content.css",
RevealToNonIE = true };
if (SPContext.Current.Web.UIVersion == 4)
contentCss.After = "corev4.css";
else
contentCss.After = "core.css";
Controls.Add(contentCss);
var customCss = new CssRegistration
{ Name = "/_layouts/MyWebPart/css/cn_custom.css",
After = contentCss.Name, RevealToNonIE = true };
Controls.Add(customCss);
var styleCss = new CssRegistration
{ Name = "/_layouts/MyWebPart/css/styles.css",
After = customCss.Name, RevealToNonIE = true };
Controls.Add(styleCss);
var colorsCss = new CssRegistration
{ Name = "/_layouts/MyWebPart/css/colors.css",
After = styleCss.Name, RevealToNonIE = true};
Controls.Add(colorsCss);
if (!string.IsNullOrEmpty(AdditionalCss))
{
var webPartCustomCss = new CssRegistration
{ Name = AdditionalCss,
After = colorsCss.Name,
RevealToNonIE = true };
Controls.Add(webPartCustomCss);
}
当我将web部件添加到页面时,所有CSS文件都会按预期添加到页面中。只是文件的排序顺序不对。
如果没有自定义CSS文件,顺序是:(link的rel-和type属性被删除以获得更好的概述)
...
<link href="/_layouts/1033/styles/Themable/corev4.css"/>
<link href="/_layouts/MyWebPart/css/colors.css"/>
<link href="/_layouts/MyWebPart/css/content.css"/>
<link href="/_layouts/MyWebPart/css/cn_custom.css"/>
<link href="/_layouts/MyWebPart/css/styles.css"/>
对于自定义CSS文件,顺序是:
...
<link href="/_layouts/1033/styles/Themable/corev4.css"/>
<link href="/_layouts/MyWebPart/css/cn_custom.css"/>
<link href="/sites/mysite/Style%2520Library/de-de/test.css"/>
<link href="/_layouts/MyWebPart/css/styles.css"/>
<link href="/_layouts/MyWebPart/css/content.css"/>
<link href="/_layouts/MyWebPart/css/colors.css"/>
正如您所看到的,这两种情况提供了完全不同的顺序,CSS文件从来没有按照代码添加的顺序排序。
转发CSS文件的顺序始终相同。这使得用CSS进行设计几乎不可能。