2015-04-24 4 views
8

Example GIF: last-of-type nicht

Ich habe mit dem abgekürzten HTML-Inhalt ein HTML-Dokument funktioniert:

<div class="list"> 
    <form name="signupForm"> 
     <label class="item item-input"> 
     <input> 
     </label> 
     <label class="item item-input"> 
     <input> 
     </label> 
     <label class="item item-input"> 
     <input> 
     </label> 
     <label class="item item-input"> 
     <input> 
     </label> 
     <label class="item item-button"> 
     <input class="button button-block button-positive"> 
     </label> 
     <label class="item item-button"> 
     <input class="button button-block button-signup"> 
     </label> 
    </form> 
</div> 

Mein erwartetes Verhalten ist, dass der CSS-Selektor .item.item-input:last-of-type die 4.en label greifen Element und das letzte .item.item-input Element der form Eltern.

Was mache ich falsch?

+2

Was Sie falsch machen, ist Missverständnis 'last-of-type'. Suche härter nach Antworten hier auf SO, es gibt mehrere.'last-of-type' bezieht sich auf ** das letzte Element seines Typs (Tags) innerhalb dieses Elternteils **. Es weiß nicht, welche anderen Selektoren Sie kombiniert haben könnten, z. B. ".item-input". Siehe http://stackoverflow.com/questions/25924535/last-child-pseudo-class-mixed-with-attribute-selector-not-working. –

Antwort

8

:last-of-type entspricht einem Element, das das letzte Element seines Typs (Tags) innerhalb seiner übergeordneten Ebene (erster Ebene) ist. Es weiß nicht, oder welche anderen Selektoren Sie kombiniert haben könnten, einschließlich Klassenselektoren wie .item-input oder irgendetwas anderes.

Es gibt keine direkte Möglichkeit in CSS, um zu erreichen, was Sie wollen, was als :last-of-selector ausgedrückt werden könnte. Einige Alternativen, die vorgeschlagen wurden, umfassen

  1. Wrap die ersten vier Elemente in einem separaten div, so können Sie :last-of-type innerhalb es tun.

  2. Lassen Sie jemanden (Server, lokales JS) das gewünschte Element mit einer bestimmten Klasse markieren und sich darauf beziehen.

  3. Andere Hacks, z. B. Hard-Wiring die Anzahl der zusätzlichen Elemente am Ende, die Sie überspringen möchten, und verwenden Sie :nth-last-of-type.

  4. Geben Sie den betreffenden Elementen ein anderes Tag, wenn Sie so verwalten können, und dann können Sie last-of-type verwenden.

+0

Um genauer zu sein, ist der letzte Typ der Button-Anmeldung. Und wird gleich sein, egal welche Selektoren Sie schreiben – vals

2

Offenbar :last-of-type (von der MDN Docs) kann nur mit Namespace und type selectors (Tag-Namen-Selektoren wie input) verwendet werden.

Ich schlage vor, Ihre HTML-Struktur zu ändern, um die .item-input Elemente in einem <div> zu umhüllen. Alternativ habe ich auch eine .last Klasse manuell hinzugefügt, um den Pseudo-Selektor zu ersetzen.

+0

Bestätigt. '.item.item-input 'funktioniert nicht,' .list label' jedoch. Immer noch auf der Suche nach einer Lösung! Ansonsten muss ich ein seltsames '.list label: nth-of-type()' Zeug machen. – Ian

+0

@Ian Ja, ich denke, dass Sie Ihre HTML-Struktur ändern müssen. –

+0

Ich weiß nicht, was Sie meinen, indem Sie sagen "kann nur mit ... Typ Selektoren verwendet werden". Meinst du das '.item.item-input: last-of-type' ist ungültig? –

1

Das Finden der .class:last-of-type ist nicht möglich. Die CSS-Pseudoklasse :last-of-type stellt das letzte gleichgeordnete Element mit dem angegebenen Elementnamen in der Liste der untergeordneten Elemente des übergeordneten Elements dar. Die korrekte Syntax lautet element:last-of-type

Sie könnten Interesse an :nth-last-of-type(n) haben, könnten Sie dann den folgenden Selektor verwenden, um dieses Element zu targeten.

label:nth-last-of-type(3) { style properties } 

:nth-last-of-type(n) Der Selektor entspricht jedes Element, das das n-te Kind, von einem bestimmten Typ ist, die übergeordneten, von dem letzten Kind zu zählen.

Sie müssen jedoch Javascript verwenden, wenn Sie das Markup nicht bearbeiten können und die Anzahl der Elemente nicht festgelegt ist.

+0

Das ist, was ich bisher gemacht habe, aber es nimmt an, dass ich eine feste Anzahl von Gegenständen von unten habe. Was jetzt wahr ist, aber in Zukunft vielleicht nicht immer stimmt. – Ian