___ 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.
___