代码之家  ›  专栏  ›  技术社区  ›  Flo

SharePoint:向CssRegistration类注册CSS文件时排序CSS引用时出现问题

  •  2
  • Flo  · 技术社区  · 15 年前

    我正在开发一个需要一些自定义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进行设计几乎不可能。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Peter Jacoby    15 年前

    您看过CssRegistration控件的“After”属性吗?我认为,如果不使用这个属性指定顺序,那么结果在源代码中是按字母顺序排列的。这并不完全符合你所看到的,但可能有其他原因导致你的行为不一致。

    http://www.wictorwilen.se/Post/What-is-new-with-the-CssRegistration-control-in-SharePoint-2010.aspx