Probleme mit :first-child

  • Hallo zusammen,


    ich habe ein kleines Problem mit dem first-child-Selektor.


    Und zwar möchte ich immer den ersten Artikel mit keinem border-top ausstatten. Leider funktioniert dies bisher nur über eine extra Klasse, weil der first-child-Selektor irgendwie nicht wirkt.


    Der Code sieht eigentlich völlig richtig aus. Kann mir das echt nicht erklären:


    CSS
    main article:first-child {
          border-top: none;
    }




    Das HTML solltet ihr eigentlich nicht brauchen. Ist halt einfach ein Article innerhalb des Main-Containers.


    Ich hoffe, irgendwer hat eine Idee, woran es liegen könnte.


    Gruß
    JR Cologne

  • Hallo


    Zitat

    Ist halt einfach ein Article innerhalb des Main-Containers.


    Klar. Und das div-Element hast du vergessen?


    Das ist aber genau die Problemursache. Das div ist div:nth-child(1).


    Durch das div gibt es keinen article:nth-child(1). Der erste article ist article:nth-child(2).


    Die Anweisung ist von hinten zu lesen: Das CSS sucht bei article:nth-child(1) zunächst das 1. Kind und kontrolliert dann, ob es sich um ein article-Element handelt. Wenn nicht, werden die CSS-Anweisungen nicht ausgeführt.


    Wenn du den ersten article erwischen willst, egal wie viele Elemente sich davor befinden kannst du mal article:nth-of-type(1) ausprobieren.


    Gruss


    MrMurphy

  • #heading_container border bottom geht nicht? :D
    Das problem mit komplexen Selektoren ist, dass sie unperformant sein können, und im vergleich zum #ID selektor definitiv unperformant sind ;)

  • Hallo


    Zitat

    Ich verstehe gerade nicht, worüber du redest bzw. worauf du hinaus willst. Sry.


    Im Moment ist es etwas in Mode Selektoren wie :nth-child() schlecht zu machen.


    Da es dafür keine sachlichen Gründe gibt muss man sich halt nebulös ausdrücken.


    Sowas geschieht regelmäßig wenn in HTML / CSS Neuerungen eingeführt werden, die nicht von allen verstanden und angewandt werden können. Um die eigenen Unzulänglichkeiten zu verschleiern wird halt an den Neuerungen herumgenörgelt und Anderen madig gemacht.


    Unter anderem werden dazu eher weltfremde Szenarien als tägliche Vorkommnisse dargestellt und die Anwendung der Neuerungen falsch beschrieben.


    Webseitenersteller, die noch nicht so sattelfest sind fallen dann darauf herein und verbreiten schlimmstenfalls ohne Hintergrundwissen die Horrormeldungen weiter.


    Das geschieht aktuell halt mit den Selektoren. Die sind zwar nicht für jeden möglichen Einsatzzweck sinnvoll, aber solche sinnlosen Einsatzzwecke sind eher selten. Von daher solltest du dich nicht nervös machen lassen. Für deinen aktuellen Einsatzzweck sind Selektoren besser geeignet als IDs oder Klassen.


    Dass Selektoren die Zukunft gehört ist auch daran ersichtlich, dass mit CSS3 viele neue eingeführt wurden und schon viele zusätzliche in Planung sind.


    Selektoren gehören auch zu dem Konzept, Inhalt und Layout zu trennen. Ähnlich wie unnütze Container sollen auch IDs und Klassen möglichst selten verwendet werden. Viele gestandene Webseitenersteller haben aber Schwierigkeiten das neue Konzept umzusetzen und auf die geliebten ID- und Klassenansammlungen zu verzichten.


    Bitte nicht falsch verstehen: IDs und Klassen sind und bleiben ein Konzept von HTML und CSS. Sie sind auch nicht schlecht oder veraltet und haben ihre sinnvollen Einsatzzwecke. Allerdings gibt es viele Lösungen für die Selektoren besser geeignet sind.


    Gruss


    MrMurphy

  • Ok, verstehe. Bin da ganz bei dir. Die neuen Selektoren sind definitiv schöne Neuerungen, die man nutzen sollte, daher wollte ich das Problem ja auch beseitigen. Hätte ja schließlich auch einfach eine Klasse nehmen können.

  • Vorab, ich bin jemand der liebend gerne neue Dinge im Web ausprobiert, dazu bin ich CSS Frak und nutze unheimlich gerne CSS Hacks und Komplexe Selektoren.


    Das geschieht aktuell halt mit den Selektoren. Die sind zwar nicht für jeden möglichen Einsatzzweck sinnvoll, aber solche sinnlosen Einsatzzwecke sind eher selten. Von daher solltest du dich nicht nervös machen lassen. Für deinen aktuellen Einsatzzweck sind Selektoren besser geeignet als IDs oder Klassen.

    Für seinen Einsatzzweck ist der :nth-child Selektor UNGEEIGNET wenn man sich sein Markup anschaut.
    Er hat dem Element davor eine ID gegeben, also sollte man diese auch nutzen!
    Wenn er diese ID allgemein nicht braucht, steht außer frage das der :*first-child Selektor genau der richtige ist.
    Nicht alles neue ist besser als das Alte, vorallem wenn es sich hier um das messen von ID und Pseudo-Selektor handelt.


    @ThreadOwner, wenn du die ID brauchst, versuche diese auch zu nutzen. Wenn du sie nicht brauchst, lösch sie und nutze :first-of-type.


    PS: Ich bin Verweigerer von CSS Frameworks.

  • Du redest von der id bei dem ersten Artikel?


    Die ist nur als Anker gedacht. Ich verweise nämlich im Menü auf die Artikel und dann kann man halt dahin springen.


    Außerdem macht die id keinen Sinn, da es ja später auch mal sein kann, dass Artikel hinzugefügt werden und dann ist der Artikel 1 nicht mehr an erster Stelle, sondern vielleicht Artikel 5.

  • Häh? Jetzt wechselst du schon wieder das Thema. Eben ging es noch um den #heading_container, jetzt wieder um die Artikel. :D


    Warum ich bei den Artikeln die id nicht nutze, habe ich ein bisschen weiter oben bereits erklärt und daran wird sich auch nichts ändern.

  • Und zwar möchte ich immer den ersten Artikel mit keinem border-top ausstatten. Leider funktioniert dies bisher nur über eine extra Klasse, weil der first-child-Selektor irgendwie nicht wirkt.


    Okay, ich hatte gelesen du möchtest Zwischen dem Div und dem 1. Article (also dem article:first-of-type) eine Border haben, die kannst du entweder dem article oben geben oder dem Div unten .. aber da du beim 1. keine haben willst ist alles klar. ;)


    Trotz alledem bleibt, wenn du etwas hast, was der CSS pharser schneller finden kann im DOM, dann nutze dies. :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!