[英]SharePoint: Problem ordering the CSS references when registering CSS files with the CssRegistration class
我正在開發一個需要一些自定義CSS文件的Web部件。 所以我正在使用CssRegistration類將它們添加到頁面標題中。
該代碼注冊了4個CSS文件,這些文件已通過Web部件功能部署到布局文件夾中。 如果在Web部件的屬性AdditionalCss
設置了第五個CSS文件的路徑,則可以選擇注冊該文件。 應將CSS文件插入所有SharePoint CSS文件之后的標頭中,並應按照代碼添加它們的順序進行排序。
我使用的代碼如下:
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文件,則順序為:(為了更好的概述,刪除了鏈接的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文件從未按它們通過代碼添加的順序進行排序。
由於這種奇怪的行為,整個CssRegistration類不是很有用,因為您無法傳達CSS文件總是相同的順序。 這使得使用CSS進行設計幾乎是不可能的。
您是否看過CssRegistration控件的“ After”屬性? 我認為,如果不使用此屬性指定順序,則結果在源中將按字母順序排列。 這與您所看到的不完全匹配,但是可能正在發生其他事情,導致您的行為不一致。
http://www.wictorwilen.se/Post/What-is-new-with-the-CssRegistration-control-in-SharePoint-2010.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.