2010-09-09 3 views
6

J'ai un <form> qui ressemble à ceci:Ajout d'un texte « nécessaire » à un formulaire HTML via CSS

<form> 
    <input type="text" name="name" id="name" /><span class="required"></span> 
</form> 

Ce que je veux faire est de montrer un texte, comme * ou Required dans l'élément <span>, au lieu de « codage dur » le texte pour chaque endroit que je besoin du texte de sorte que la forme ressemble à ceci:

[input box] Required 

Je googlé et trouvé que cela pourrait se faire par un style CSS en utilisant content tels que:

.required:before 
{ 
    content: "aaaa" 
} 

Mais, dois-je utiliser cette technique (est-elle dans tous les principaux navigateurs par exemple) ou est-il un moyen plus préféré de faire ce genre de chose?

Merci

MISE À JOUR Ps. Je ne veux pas utiliser JavaScript pour cela, juste CSS simple.

Répondre

3

Je suis d'accord que l'ajout de contenu en utilisant CSS n'est pas correct dans la plupart des cas. Cependant, en soulignant visuellement un champ requis, je trouve totalement correct de faire de cette façon.

content n'est pas suffisamment supporté (IE ne le supporte pas du tout IIRC).

Ce que peut faire est que l'intervalle "requis" contient une image de fond contenant le texte "requis" ou un astérisque. L'utilisation de texte graphique a quelques inconvénients, mais aucune solution basée sur jQuery ne le ferait non plus.

+1

Pls voir aussi mon commentaire @Pranay Rana ci-dessus. Si j'utilise l'attribut "background-image", n'est-ce pas le même que l'attribut "content", avec la seule différence que dans le cas de "content" j'ajoute une chaîne et avec "background-image" j'ajoute un image? Le «contenu» n'est pas non plus, mais les deux ajoutent des «données» visuellement présentées, n'est-ce pas? – Zabba

+0

@ Zabba à proprement parler, oui. Il est à la fois pas en phase avec la philosophie de séparer le contenu et la présentation. Mais si cela fonctionne pour vous, en tenant compte de tous les inconvénients (le texte graphique n'est pas lisible dans Screenreaders, ne s'imprime pas, etc.) J'ai tendance à dire que cela n'a pas d'importance. –

+2

@Zabba: La différence est que 'background-image' est largement supporté. – mpen

1

Je pense que vous devriez regarder JavaScript. L'ajout de contenu à des balises avec des classes/ID spécifiques est une chose pour laquelle JavaScript est utilisé. Il existe de nombreuses bibliothèques pour accélérer le développement: jQuery, Prototype, Dojo et MooTools.

+0

Merci Extrakun, je devrais avoir mentionné que je voulais éviter JavaScript pour cela. Mise à jour de la question – Zabba

+1

Je ne pense pas qu'il existe une autre solution côté client en dehors de JavaScript. Vous pouvez alors regarder la programmation côté serveur qui vous permet d'utiliser des modèles et une programmation simple pour dupliquer le contenu. – Extrakun

2

Vous pouvez utiliser jQuery pour cette chose.

jQuery est une bibliothèque javascript:

écrire en tête ce code

$(document).ready(function(){ 
    $(span[class=required]).innerText='<sometext>'; 
}); 

mais u doit télécharger ce plugin. mais vous pouvez également utiliser javascript

+1

Ceci est une solution parfaitement bien, même avec un exemple de code .: +1. Pensez à utiliser "vous" au lieu de "u", cependant, cela rendra votre style d'écriture plus mature –

+0

N'a pas fonctionné pour moi (erreur de syntaxe). Une façon de le faire fonctionner était: $ (document) .ready (function() { $ ('span.required'). Text ('*'); }); – jarmod

2

Vous ne devriez certainement pas utiliser CSS pour cela! Dieu non! : p

Comme mentionné ci-dessus, utilisez javascript - mais si vous voulez éviter cela, vous devez utiliser le script côté serveur - Alors, apprenez un peu de PHP.

+0

+1 pour la manipulation côté serveur – cjk

+0

pourquoi je vous remercie. :) –

+2

Je ne suis pas d'accord dans ce cas précis: Commencer à utiliser un langage côté serveur pour construire un formulaire est beaucoup plus sophistiqué qu'un peu de CSS pour rendre, disons, un astérisque. En général, cependant, vous avez raison. –

5

Vérifiez ceci: Content

ASLO vérifier cette compatibilité alt text

Ne pas utiliser

Je pense que nous ne devrions pas utiliser la déclaration de contenu du tout. Il ajoute du contenu à la page, et CSS est destiné à ajouter une présentation à la page, et non le contenu. Par conséquent, je pense que vous devriez utiliser JavaScript si vous voulez générer dynamiquement du contenu. CSS est le mauvais outil pour ce travail.

+0

microsoft frappe à nouveau ... :( –

+0

Mais si CSS est destiné à la présentation seulement, quelle est la raison pour laquelle CSS a l'attribut de contenu? Je googlé au W3C (http://www.w3.org/TR/2009/CR- CSS2-20090908/generate.html # propdef-content) et il dit: "Le contenu généré ne modifie pas l'arborescence du document, en particulier, il n'est pas renvoyé au processeur de langage de document (par exemple, pour le reparsing)." c'est vraiment "présentation" et ne pas ajouter "contenu" à la page, n'est-ce pas? – Zabba

+5

Je ne pense pas que j'achète dans cet argument qu'il ne devrait pas être utilisé car il ajoute "contenu" à la page. "blurb n'est pas plus qu'un contenu, une icône, ou des couleurs informatives que CSS transmet déjà, il ne devrait pas être utilisé pour insérer des paragraphes, mais pour quelque chose comme ça, je pense que c'est parfaitement sémantiquement approprié. IE ne supporte pas très bien ce que je ferais est d'utiliser l'étiquette darn, puis nous JS à fi x seulement dans les navigateurs cassés. – mpen

2

Comme d'autres l'ont noté, CSS peut le faire mais il n'est pas entièrement supporté et ce n'est pas non plus la bonne façon d'aborder ce problème. S'il est absolument crucial que le texte "requis" apparaisse, vous devez l'ajouter dans le code HTML. Javascript est une solution appropriée dans une certaine mesure, mais seulement si vous ne pouvez pas éditer le code source. Alors que le contenu peut être généré à l'aide de JS, il ne va évidemment apparaître qu'aux personnes avec JavaScript activé, et cela ajoute à la complexité de la maintenance. Lorsqu'une personne lokos à la page dans cinq ans pour faire un changement de code, ils vont d'abord se demander d'où vient le texte "requis".

Une autre option qui serait serait assez rapide et assez soignée est de donner la durée d'une image d'arrière-plan d'un astérisque et comprennent une clé au-dessus de la forme:

* required field 
+0

J'aime la partie "Quand quelqu'un regarde la page dans cinq ans pour faire un changement de code" - merci, n'a pas pensé à cet angle. – Zabba

1

Vous devriez vraiment ajouter ce texte dans la HTML Les autres solutions ne sont pas accessibles - les utilisateurs non voyants (par exemple) ne seraient pas conscients que le champ est requis.

Questions connexes