2010-07-20 5 views
29

J'expérimente avec quelques styles sur <textarea> s et j'ai essayé de faire quelque chose avec ::before et ::after sélecteurs et je ne pouvais rien faire pour les faire fonctionner. Donc la question est: est-ce possible? Je sais que les formes entourant le CSS sont plus que mystérieuses mais il semble que cela devrait fonctionner.Peut-on utiliser un sélecteur avant le <textarea>?

+0

Voulez-vous dire ': before' et': after'? Et, ils fonctionnent bien ici; Qu'est-ce que vous essayez d'accomplir? Êtes-vous confronté à des problèmes spécifiques au navigateur? – strager

+0

Oui, c'est ce que je voulais dire. Et je ne pense pas que ce soit spécifique au navigateur. Je prends quelques idées de http://nicolasgallagher.com/demo/pure-css-speech-bubbles/bubbles.html et tout fonctionnait avec vos éléments de niveau bloc standard, mais pas lorsqu'il est appliqué à une zone de texte. – xj9

+3

Ne fonctionne pas pour moi dans Chrome et Firefox. 'textarea :: after {content:" du texte "}' ne fonctionne pas mais 'form :: after {content:" du texte "}' fonctionne. S'il vous plaît noter que le style de double colon est la syntaxe CSS3, mais le seul deux points est la syntaxe CSS2. Ni travailler sur textarea. –

Répondre

62

Le :before et :after ne fonctionnera pas sur un text-area (ni aucun élément qui ne peut pas contenir un autre élément, comme img ou input), parce que le contenu généré par des pseudo-élément se place au sein l'élément mais avant ou après le contenu de cet élément, et agit lui-même comme un élément. Le pseudo-élément n'est pas placé avant ou après l'élément parent lui-même (contrairement à certaines informations que l'on peut trouver sur Internet). Pour illustrer:

Si vous avez cette css:

p:before {content: 'before--'} 
p:after {content: '--after'} 

Puis html comme ceci:

<p>Original Content</p> 

rend efficacement à l'écran comme si le code source étaient:

<p>before--Original Content--after</p> 

Noncomme si le code source étaient:

before--<p>Original Content</p>--after 

Quelle est la raison pour laquelle les balises qui ne peut contenir aucun « contenu » élément html (comme ceux mentionnés ci-dessus) ne reconnaissent pas les pseudo-éléments, comme il n'y a pas de "lieu" pour que ce contenu soit généré. Le textarea peut contenir du "contenu", mais uniquement du contenu en texte pur.

+0

Cela a du sens, merci! – xj9

+0

Merci pour cela, cherchait depuis longtemps pourquoi: avant et: après ne fonctionne pas avec les balises img! –

+0

Excellente explication –

-5

En fait, vous pouvez ajouter du contenu avec :after sur un élément d'entrée. Cela ajoutera une sorte de conseil lorsque l'élément est dans son état actif:

#gallery_name { 
    position:relative; 
} 
#gallery_name:focus:after { 
    content: "Max Characters: 30"; 
    color: #FFF; 
    position: absolute; 
    right: -150px; 
    top:0px; 
} 

<input id="gallery_name" type="text" name="gallery_name" placeholder="Gallery Name"> 
+3

cela ne fonctionne pas pour autant que je sache: http://jsfiddle.net/DB7w3/ – DMTintner

Questions connexes