2017-09-09 3 views
1

Ich entwickle ein Webprodukt, das bei der Verwendung Code generiert, den die Benutzer in ihre Site einbetten.Namespaces in CSS und in Stylingkonflikten

Der generierte Code enthält HTML, JavaScript und CSS. Und wenn es in eine Seite eingebettet wird, wird es zusammen mit anderen Inhalten auf dieser Seite angezeigt, auf die ich keine Kontrolle habe. Mit anderen Worten, der von meinem Produkt generierte Code wird in eine Webseite eingebettet, die bereits andere Inhalte enthält. Ich habe keine Kontrolle über das Styling und den Inhalt dieser Seite.

Jetzt mache ich mir Sorgen über das Formatieren von Namenskonflikten. Angenommen, ich verwende eine CSS-Klasse mit dem Namen .amazing-color und formatiert bestimmte Komponenten auf eine bestimmte Weise.

Angenommen, eine Webseite, die meinen Code zufällig verwendet, hatte auch ein Styling namens .amazing-color, das einen anderen Styling-Code hätte und mein eigenes Styling überschreiben könnte.

Meine Frage ist, wie kann ich verhindern, dass dies geschieht? Wie kann ich Namenskonflikte in CSS verhindern?

Sie können vorschlagen, dass ich komplexe Namen für meine Stile habe, also würde ich .my-super-amazing-color-212321 verwenden, aber das würde zu komplexen CSS-Klassen führen, die nicht lesbar sind. Ich denke, eine bessere Lösung wäre die Verwendung von Namespaces. Ich bin mir jedoch nicht sicher, ob es Namespaces in CSS gibt, und wenn sie existieren, wie kann ich sie verwenden. Also, gibt es Namensräume in CSS? Können Sie einen Beispielcode zur Verwendung bereitstellen?

Danke.

Antwort

1

Zuerst fragen Sie nicht nach Namespaces in CSS, aber Namespaces in Klassen. Klassen sind eine HTML-Funktion, keine CSS-Funktion.

Nun gibt es keinen formellen Namespacing-Mechanismus für Klassen, aber eine Konvention in solchen Situationen besteht darin, eine allgemeine Abkürzung oder einen Initialismus als Präfix für alle von Ihnen verwendeten Klassen zu verwenden. Sie könnten also "mwp-" für "Mein Webprodukt" verwenden.

Da Sie den HTML-, CSS- und JS-Code generieren, können Sie dieses Präfix möglicherweise konfigurieren, damit Benutzer Ihres Produkts bei einem Konflikt ein anderes Präfix auswählen können.

Schließlich, machen Sie in Ihrer Dokumentation für die Verwendung Ihres Produkts klar, welches Präfix Sie verwenden und wie jemand, der Ihr Produkt verwendet, das Präfix bei Bedarf ändern kann.

+0

Danke für Ihre Antwort. Dies ist eine Lösung, die ich mir auch ausgedacht habe, aber es ist möglicherweise keine gute Lösung, weil ich die BEM-Namenskonvention verwende (Details hier: http://getbem.com/). Also, wie kann ich das überwinden? – Greeso

+0

Sorry, ich bin kein Fan von BEM und verwende es nicht, daher kann ich dort nicht wirklich beraten. Ich sehe keinen Grund, warum Sie in Ihren Blocknamen kein gemeinsames Präfix einfügen sollten, aber ich weiß nicht, ob das gegen die BEM-Konventionen verstößt. – Alohci

+0

Ich verstehe, was Sie in Bezug auf BEM meinen. Ich benutze ** modifizierte ** BEM (oder was heißt BEVM wie hier beschrieben https://www.youtube.com/watch?v=nwS7M2L07uU); Dieses Modell ist flexibler und hilft, viele Nachteile von BEM zu überwinden. In Bezug auf Ihre Frage, ob es gegen BEM-Konventionen verstößt, glaube ich nicht, dass es gegen diese Konventionen verstößt, aber es macht den Code weniger lesbar und hoffte, Dinge über Namespaces zu gruppieren, wenn möglich. – Greeso