La "classe CSS" est un terme mal choisi ; class
est un attribut (ou une propriété, en termes de script) que vous attribuez aux éléments HTML. En d'autres termes, vous déclarez les classes en HTML, et non en CSS. Dans votre cas, la classe "target" est la suivante fait existent en fait sur ces éléments spécifiques, et votre balisage est parfaitement valide en l'état.
Cela ne signifie pas nécessairement que vous devez déclarer une classe dans le code HTML avant de pouvoir l'utiliser dans le code CSS. Voir le commentaire de Ruakh. Si un sélecteur est valide ou non dépend entièrement de la syntaxe du sélecteur et CSS a son propre ensemble de règles de traitement des erreurs d'analyse syntaxique qui ne concernent pas du tout le balisage. Essentiellement, cela signifie que HTML et CSS sont complètement indépendants l'un de l'autre en ce qui concerne la validité. 1
Une fois que vous avez compris cela, il devient clair qu'il n'y a aucun effet secondaire à ne pas définir un .target
dans votre feuille de style. 2 Lorsque vous attribuez des classes à vos éléments, vous pouvez référencer ces éléments par ces classes soit dans une feuille de style, soit dans un script, soit dans les deux. Aucun des deux n'a de dépendance vis-à-vis de l'autre. Au contraire, ils font tous deux référence au balisage (ou, plus précisément, à sa représentation DOM). Ce principe s'applique même si vous utilisez JavaScript pour appliquer des styles, comme vous le faites dans votre jQuery one-liner.
Lorsque vous écrivez une règle CSS avec un sélecteur de classe, tout ce que vous dites est "Je veux appliquer des styles aux éléments qui appartiennent à cette classe." De même, lorsque vous écrivez un script pour récupérer des éléments par un certain nom de classe, vous dites "Je veux faire des choses avec les éléments qui appartiennent à cette classe." Qu'il y ait ou non sont qui appartiennent à la classe en question est une question tout à fait distincte.
1 C'est aussi pourquoi <a href="https://stackoverflow.com/questions/7262195/several-elements-with-the-same-id-responding-to-one-css-id-selector/8753329#8753329">un sélecteur CSS ID correspond <em>tous </em>éléments avec l'ID donné sans tenir compte </a>que l'ID apparaisse exactement une fois ou plusieurs fois (ce qui donne un document HTML non conforme).
2 La seule situation que je connaisse où une règle CSS vide de ce type est nécessaire est lorsque certains navigateurs refusent d'appliquer certaines autres règles correctement en raison d'un bogue ; la création d'une règle vide entraînera l'application de ces autres règles pour une raison quelconque. Voir <a href="https://stackoverflow.com/questions/15301357/safari-bug-first-child-doesnt-update-displayblock-when-items-are-removed-with/15302066#15302066">cette réponse </a>pour un exemple d'un tel bug. Cependant, il s'agit d'un problème de CSS qui n'a rien à voir avec le balisage.
9 votes
Je ne vois rien de mal à cela, bien que j'aurais fait en sorte que cela fasse partie de la feuille de style si cela était possible plutôt que d'utiliser
.css
Les styles définis à l'aide de .css sont très difficiles à modifier sans causer d'autres problèmes, c'est pourquoi j'ai tendance à les éviter.8 votes
À titre d'information, vous pouvez utiliser
.toggle()
il est un peu plus court dans votre code.4 votes
Dans Visual Studio + ReSharper, si vous utilisez une classe qui n'est pas définie, vous recevrez un avertissement, ce qui est utile si j'ai juste une faute de frappe, mais qui est ennuyeux dans des situations comme celle-ci. Dans ce cas, vous avez le choix entre ajouter le style vide, ou désactiver l'avertissement (ou l'ignorer) - personnellement, j'ajoute simplement le style vide. Je ne sais pas si d'autres IDE se comportent de la même manière.
0 votes
Question légèrement liée à celle de savoir si c'est une bonne pratique ou non : stackoverflow.com/questions/17212411/
9 votes
C'est non seulement possible mais explicitement recommandé par certains. Puisque votre
target
est pour les besoins de javascript, beaucoup de gens utilisent le préfixejs-
pour ces classes, c'est-à-direjs-target
. BTW : Target est une sorte de mauvais nom ;) Pour plus d'informations, voir : philipwalton.com/articles/decoupling-html-css-and-javascript1 votes
stackoverflow.com/questions/2832117/ est plus ou moins une réplique de ceci, sans la méprise.
0 votes
Comme (autre) note complémentaire, vous pouvez utiliser
$('.target').hide()
1 votes
C'est une chose tellement normale pour moi que j'ai dû lire la question trois fois avant de comprendre ce que vous vouliez dire par "inexistant". Je n'arrêtais pas de penser "Pourquoi dites-vous que ça n'existe pas ? C'est juste là, dans votre HTML."
1 votes
C'est la pensée trop redéfinie