Welcher CSS-Selektor ist besser geeignet? [geschlossen]

8

Ich frage mich, welcher Selektor besser ist und warum?

Beispiel-HTML-Code

%Vor%

und wir möchten .product mit CSS Selektoren erreichen:

  1. .product
  2. .main .category .product
  3. div.main div.category div.product

Ich vergleiche sie mit den folgenden Kriterien:

  • Leistung
  • Wartbarkeit
  • Lesbarkeit

Wir können annehmen, dass .product auf der ganzen Seite eindeutig ist. Wir können ID anstelle von Klasse verwenden, aber in diesem Fall haben wir das Klassenattribut gewählt.

    
Tarik 28.02.2012, 22:08
quelle

6 Antworten

13
  

Wir können annehmen, dass .product auf der ganzen Seite eindeutig ist.

Leistungsmäßig wäre best natürlich ein ID-Selektor gewesen, aber da Sie stattdessen eine Klasse verwenden, würde .product an zweiter Stelle stehen.

Was Wartbarkeit, Lesbarkeit und Semantik betrifft (es gibt auch etwas mehr Leistung) ...

  1. .product bedeutet

      

    Suchen Sie nach Elementen mit der Klasse product .

    Sehr einfach zu verstehen, fast identisch mit einem ID-Selektor, wenn Sie dies auf der Grundlage der obigen Annahme verwenden.

    Ich denke, der einzige Unterschied zwischen der Verwendung eines Klassenselektors und eines ID-Selektors in diesem Fall besteht darin, dass ein ID-Selektor die Eindeutigkeit dieses Elements erzwingt, und nicht nur, weil passiert , um ein solches Element zu sein . Mit anderen Worten, ein ID-Selektor wirkt auf das Wissen ein, dass ein Dokument nur ein solches eindeutiges Element hat, während ein Klassenselektor dies nicht tut.

  2. .main .category .product bedeutet

      

    Finde alle Elemente, die eine Klasse product
    haben   die in allen Elementen enthalten sind, die eine Klasse category
    haben   die in allen Elementen enthalten sind, die eine Klasse main haben.

    Browser haben die Aufgabe, die Abstammung dieser Elemente zu überprüfen, was überflüssig ist, wenn Sie nur ein .product haben. Viele Browser-Layout-Engines bewerten CSS-Selektoren von rechts nach links , ähnlich wie ich den Selektor wie oben auf Englisch übersetzt habe.

  3. div.main div.category div.product bedeutet

      

    Finde nur <div> Elemente, die eine Klasse product
    haben   die nur in <div> -Elementen enthalten sind, die eine Klasse category
    haben   die nur in <div> -Elementen enthalten sind, die eine Klasse main haben.

    Wenn Sie die Hierarchie der Elemente überprüfen, erwarten Sie außerdem, dass ein Browser nur ein div mit der Klasse product vergleicht. Wenn Sie beliebiges -Element dieser Klasse zuordnen möchten, funktioniert dieser Selektor nicht wie vorgesehen.

    Wenn Sie sicher sind, dass Sie nur genau ein div mit dieser Klasse haben und Sie nur diesem Element entsprechen wollen, dann könnten Sie stattdessen div.product verwenden, aber .product funktioniert immer noch etwas besser.

BoltClock 19.01.2012, 23:33
quelle
5

Ich bin kein Guru, aber ich kann zumindest etwas dazu sagen.
Ich denke, der erste Weg ist einfach der beste:

  • es verhindert, dass das CSS den DOM-Baum durchqueren muss, um ein Element zu finden,
  • Wenn Sie eines der übergeordneten Elemente bearbeiten, müssen Sie den CSS-Selektor bearbeiten. Lesbarkeit: persönliche Wahl, manche Leute mögen die zweite, aber den meisten macht das nichts aus
Fred 16.12.2010 07:17
quelle
4

Ich versuche immer, den kleinsten auswählbaren Selektor zu verwenden, also würde ich einfach .product verwenden (d. h. dein erstes Beispiel). Ich denke, das hat auch Leistungsvorteile, da der Browser nur Elemente finden muss, die mit dieser einzelnen Klasse markiert sind, anstatt zuerst nach einem übereinstimmenden Elternteil zu suchen und dann herauszufinden, ob ein Nachkomme mit dieser Klasse markiert ist. p>

Der einzige Grund, warum ich die anderen Methoden, die Sie erwähnen, verwenden muss, ist:

  • Ich versuche, ein bestimmtes Styling in einem bestimmten Kontext hinzuzufügen. Zum Beispiel, wenn ich alle internen Links (unter einer .internal_link -Klasse) fett schreiben wollte, aber wollte, dass sie auch unterstrichen werden, wenn sie in einem bestimmten Kontext auftraten.
  • Ich muss die Spezifität hinzufügen, damit meine Regel wirksam wird.

Wenn Sie schließlich davon ausgehen, dass nur ein Element mit der Klasse .product markiert wird, verwenden Sie es wahrscheinlich besser als ID und nicht als Klasse.

    
AgentConundrum 16.12.2010 07:21
quelle
1

Alle drei Selektoren haben unterschiedliche Bedeutungen und sollten je nach Bedarf an verschiedenen Orten verwendet werden. Leistungsmäßig sollte das erste das Beste sein, weil wir nur einmal das DOM fahren müssen. Lesbarkeitsweisen scheinen auch der zweite und der dritte Selektor schwerfällig und könnten in der Zukunft schwer zu erweitern sein.

    
Sharad 16.12.2010 07:18
quelle
1
  
  1. .product
  2.   
  3. .main .category .product
  4.   
  5. div.main div.category div.product
  6.   

Die oben genannten Selektoren hängen davon ab, wie kompliziert Ihre Site ist.

Beispiel

  1. Wenn alle diese Elemente verwendet werden nur Einsen. Der erste Selektor kann passen.

  2. Der zweite Weg ist Best Practice, wenn Sie dies für mehrere Seiten verwenden (z. B. Sie haben diese Elemente für eine Reihe von Produkten).

  3. Der dritte Weg für mich ist unnötig, es sei denn, Sie haben diesen Klassennamen in anderen HTML-Tags wie span.

Weitere Tipps: Mushu Tricks

    
Janzell 19.01.2012 23:32
quelle
0

Der erste Weg. Produkt ist das Beste und das einfachste. Wenn Sie das Produkt verwenden, müssen Sie nicht die gesamte Datei durchsuchen, um das zu finden, wonach Sie suchen. Sie können auch einen ID-Selektor verwenden, ohne eine Klasse zu verwenden.

    
bharath 16.12.2010 07:20
quelle

Tags und Links