2017-09-20 1 views
1

J'essaie actuellement de modifier le CSS d'une page HTML générée. Je n'ai pas accès à exécuter des scripts sur cette page ou à modifier le code HTML de base.CSS, modification de l'étiquette qui n'est pas adjacente à l'entrée active

La forme a des entrées et je suis en train de créer des étiquettes flottantes pour eux que je fais habituellement quelque chose comme ceci:

<input id="email"> 
<label for="email">E-mail</label> 

Avec quelque chose CSS comme ceci:

input:focus + label { top: 100%; } 

Cependant, le produit HTML est structuré comme ceci, avec l'étiquette avant l'entrée et l'erreur bloque entre:

<label for="email">Email Address</label> 
<div aria-hidden="true" class="error itemLevel"> 
<p aria-live="polite" role="alert" tabindex="1">Please enter a valid email address.</p> 
<input aria-required="true" id="email" title="Email address that can be used to contact you." type="text"> 

Comment cibler l'étiquette avec du CSS pur?

+0

Vous souhaitez cibler les frères et sœurs précédents en CSS pur? Ce n'est pas possible - [voir cette question et les réponses associées] (https://stackoverflow.com/questions/1817792/is-there-a-previous-sibling-css-selector) – PTD

+0

Merci, j'avais déjà vu cette question ainsi que la référence à des ajouts à la spécification à venir qui permettait la sélection des frères et sœurs précédents. Je ne savais pas si cela avait été ajouté ou mis au rebut. –

Répondre

2

Vous pouvez utiliser un sélecteur d'attribut:

label[for="email"] { ... } 
+0

Génial, merci. Et si toutes les entrées sont comme ça avec des ID différents? –

+0

Je ne suis pas encore sûr de ce que vous voulez à la fin. Ils doivent avoir des ID différents. Vous pouvez certainement adresser chaque étiquette 'for' individuellement, ou vous pouvez simplement adresser toutes les étiquettes comme' label' – Johannes

+0

Ils étaient tous dans les divs parents, donc j'ai fini par utiliser '.parentClass: focus-within label { } ' –