CSS-Stil Konfliktprävention und Namespacing-Techniken

8

Angenommen, Sie erstellen ein konzeptionelles Widget namens "Awesome Widget" und möchten es vollständig vor Konflikten mit umgebenden Elementen oder untergeordneten Elementen schützen, die sich als Inhalt im Widget befinden.

Was wir nicht wollen

%Vor%

Lösung 1: CSS-Kindkombinator

Verwenden Sie den CSS-Unterkombinator-Selektor, um anzugeben, dass nur direkte untergeordnete Elemente ausgewählt werden sollen.

%Vor%

Lösung 2: Klassennamespacing

Verwenden von aw (Awesome Widget) als Namespace für jede Klasse, verringert die Wahrscheinlichkeit anderer Elemente auf der Seite mit genau diesem Namespace + Klassennamen.

%Vor%

Es gibt auch etwas wie @namespace in CSS, aber das ist nur für XML.

Gibt es neben Lösung 1 und 2 noch weitere? Welchen würdest du bevorzugen? Best Practices?

BEARBEITEN: Beispiel für ein Problem, das ohne geeignete Namespacing- / Styling-Konfliktprävention auftritt

Widget-Styling:

%Vor%

Benutzer Styling:

%Vor%

Auszeichnung:

%Vor%     
DADU 25.05.2011, 16:18
quelle

4 Antworten

3

Ich würde bevorzugen, eine Kombination der beiden Lösungen zu verwenden, wie:

%Vor%

Weil der zweite dem Markup eine Menge unnötigen Gewichts hinzufügt.

Aktualisieren

Für Ihr Beispiel würde ich einen Wrapper um den Benutzerinhalt mit der Klasse .user einfügen und dann ihr CSS mit .user voranstellen. Dies ist jedoch nicht anmutig, es fügt etwas Markup hinzu und ich denke, es wäre anfällig für Fehler.

    
rockerest 25.05.2011, 16:21
quelle
1

XBL könnte helfen, wenn es jemals in Browsern implementiert wird, da es Möglichkeiten zum Entwerfen von Widgets gibt, die eine Weitergabe verhindern können Styling-Informationen.

Ein weiterer Vorteil ist die Performance, wenn man den Child-Kombinator mit einbezieht. Es muss nicht alle Ebenen möglicher Kinder überprüft werden, um zu bestimmen, wie gerendert wird.

Aber wenn Sie der Kürze halber Klassennamen verwenden, sollten höchstens zwei ausreichen, denke ich, es sei denn, Sie benennen nicht deutlich genug:

%Vor%

Sie könnten den Nicht-Benutzer-Inhaltsbereichen auch einen Container (mit einer Namespace-Klasse) auf der höchsten möglichen Ebene geben, der den Benutzerinhalt nicht einschließt, wodurch Sie sich vor diesem Risiko schützen. <div/> ist ziemlich praktisch für diese Art von beliebiger Gruppierung und zu diesem Zweck gemacht ...

    
Brett Zamir 25.05.2011 17:31
quelle
1

Wenn Sie viele CSS-Namespacing-Konflikte haben, ist es vielleicht an der Zeit, einen Wechsel zu einem Front-End-JS-Framework wie Facebook ReagierenJS . In Verbindung mit Webpack Module Loader können Sie so viele feine JS-Bibliotheken nutzen, die Ihren Entwicklungsworkflow optimieren. CSS-loader zum Beispiel hilft Ihnen bei der Verwaltung Ihrer CSS-Entwicklung, indem Sie lokales Scoping , das genau das ist, wonach Sie suchen.

    
emisilva 24.04.2016 15:13
quelle
0
___ qstnhdr ___ CSS-Stil Konfliktprävention und Namespacing-Techniken ___ answer36824962 ___

Wenn Sie viele CSS-Namespacing-Konflikte haben, ist es vielleicht an der Zeit, einen Wechsel zu einem Front-End-JS-Framework wie Facebook ReagierenJS . In Verbindung mit Webpack Module Loader können Sie so viele feine JS-Bibliotheken nutzen, die Ihren Entwicklungsworkflow optimieren. CSS-loader zum Beispiel hilft Ihnen bei der Verwaltung Ihrer CSS-Entwicklung, indem Sie lokales Scoping , das genau das ist, wonach Sie suchen.

    
___ qstntxt ___

Angenommen, Sie erstellen ein konzeptionelles Widget namens "Awesome Widget" und möchten es vollständig vor Konflikten mit umgebenden Elementen oder untergeordneten Elementen schützen, die sich als Inhalt im Widget befinden.

Was wir nicht wollen

%Vor%

Lösung 1: CSS-Kindkombinator

Verwenden Sie den CSS-Unterkombinator-Selektor, um anzugeben, dass nur direkte untergeordnete Elemente ausgewählt werden sollen.

%Vor%

Lösung 2: Klassennamespacing

Verwenden von aw (Awesome Widget) als Namespace für jede Klasse, verringert die Wahrscheinlichkeit anderer Elemente auf der Seite mit genau diesem Namespace + Klassennamen.

%Vor%

Es gibt auch etwas wie @namespace in CSS, aber das ist nur für XML.

Gibt es neben Lösung 1 und 2 noch weitere? Welchen würdest du bevorzugen? Best Practices?

BEARBEITEN: Beispiel für ein Problem, das ohne geeignete Namespacing- / Styling-Konfliktprävention auftritt

Widget-Styling:

%Vor%

Benutzer Styling:

%Vor%

Auszeichnung:

%Vor%     
___ tag123html ___ HTML (Hyper Text Markup Language) ist die Standard-Auszeichnungssprache, die zum Strukturieren von Webseiten und zum Formatieren von Inhalt verwendet wird. HTML beschreibt die Struktur einer Website semantisch zusammen mit Hinweisen für die Präsentation, wodurch sie eine Markup-Sprache statt einer Programmiersprache wird. Die neueste Revision der HTML-Spezifikation ist HTML5.2. ___ tag123css ___ CSS (Cascading Style Sheets) ist eine Darstellungsstilsprache, die das Aussehen und die Formatierung von HTML (Hyper Text Markup Language), XML-Dokumenten (Extensible Markup Language) und SVG-Elementen einschließlich (aber nicht beschränkt auf) Farben beschreibt. Layout, Schriftarten und Animationen. ___ tag123namespaces ___ Ein Namespace ist ein Container, der Kontext für Bezeichner bereitstellt, in denen Namen eindeutig sind. ___ antwort12396736 ___

Hier sind ein paar Lösungen:

  • Überprüfen Sie die Quellenreihenfolge, um sicherzustellen, dass globale Stile vor den seitenspezifischen Stilen im head
  • verknüpft sind
  • Verwenden Sie das Ziel , um das Nutzer-CSS auszulösen
  • Verwenden Sie generierten Inhalt , um Stile zu binden
  • Verwenden Sie Attributselektoren , um die Spezifität zu erhöhen
___ tag123widget ___ Ein Widget ist ein Element einer Benutzeroberfläche (GUI-Widget) oder einer eigenständigen (meist kleinen) Softwareanwendung (Desktop-Widget). Beim Computing eine Anwendung oder eine Komponente einer Schnittstelle, die es einem Benutzer ermöglicht, eine Funktion auszuführen oder auf einen Dienst zuzugreifen. ___ answer6128459 ___

XBL könnte helfen, wenn es jemals in Browsern implementiert wird, da es Möglichkeiten zum Entwerfen von Widgets gibt, die eine Weitergabe verhindern können Styling-Informationen.

Ein weiterer Vorteil ist die Performance, wenn man den Child-Kombinator mit einbezieht. Es muss nicht alle Ebenen möglicher Kinder überprüft werden, um zu bestimmen, wie gerendert wird.

Aber wenn Sie der Kürze halber Klassennamen verwenden, sollten höchstens zwei ausreichen, denke ich, es sei denn, Sie benennen nicht deutlich genug:

%Vor%

Sie könnten den Nicht-Benutzer-Inhaltsbereichen auch einen Container (mit einer Namespace-Klasse) auf der höchsten möglichen Ebene geben, der den Benutzerinhalt nicht einschließt, wodurch Sie sich vor diesem Risiko schützen. %code% ist ziemlich praktisch für diese Art von beliebiger Gruppierung und zu diesem Zweck gemacht ...

    
___ answer6127649 ___

Ich würde bevorzugen, eine Kombination der beiden Lösungen zu verwenden, wie:

%Vor%

Weil der zweite dem Markup eine Menge unnötigen Gewichts hinzufügt.

Aktualisieren

Für Ihr Beispiel würde ich einen Wrapper um den Benutzerinhalt mit der Klasse %code% einfügen und dann ihr CSS mit %code% voranstellen. Dies ist jedoch nicht anmutig, es fügt etwas Markup hinzu und ich denke, es wäre anfällig für Fehler.

    
___
Paul Sweatte 12.09.2012 22:00
quelle

Tags und Links