Je suis en train de développer un composant WebPart qui nécessite des fichiers CSS personnalisés. J'utilise donc la classe CssRegistration pour les ajouter à l'en-tête de la page.SharePoint: Problème de classement des références CSS lors de l'enregistrement de fichiers CSS avec la classe CssRegistration
Le code enregistre 4 fichiers CSS qui ont été déployés dans le dossier Layouts par la fonction de composant WebPart. Un cinquième fichier CSS est enregistré en option lorsqu'un chemin d'accès est défini dans la propriété du composant Web AdditionalCss
. Les fichiers CSS doivent être insérés dans l'en-tête après tous les fichiers CSS SharePoint et doivent être triés dans l'ordre où ils ont été ajoutés par le code.
Le code j'est le suivant:
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);
}
Lorsque j'ajoute la partie Web à une page tous les fichiers CSS sont ajoutés à la page comme prévu. Sauf que les fichiers sont triés dans le mauvais ordre.
Sans le fichier CSS personnalisé l'ordre est le suivant: (attribut de type perti- et de liaison ont été retirés pour une meilleure vue d'ensemble)
...
<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"/>
Avec le fichier CSS personnalisé, l'ordre est:
...
<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"/>
Comme vous pouvez voir les deux cas fournissent un ordre totalement différent et les fichiers CSS n'ont jamais été triés dans l'ordre où ils ont été ajoutés par le code.
Avec ce comportement étrange, toute la classe CssRegistration n'est pas très utile car vous ne pouvez pas relayer que les fichiers CSS sont toujours dans le même ordre. Cela rend la conception avec CSS presque impossible.
Comme vous pouvez le voir dans l'extrait de code dans ma question, je suis déjà en utilisant la propriété après. – Flo
Désolé, j'ai manqué cela dans votre code. –