Pourquoi sont des tirets préféré pour les sélecteurs CSS / attributs HTML?
Dans le passé, j'ai toujours utilisé le caractère de soulignement pour définir classe et id attributs HTML. Au cours de la dernière quelques années, j'ai changé de tirets, surtout pour aligner moi-même avec les tendance dans la communauté, pas nécessairement parce qu'il fait sens pour moi.
J'ai toujours pensé que les tirets ont plus d'inconvénients, et je ne vois pas les avantages:
De complétion de Code & Édition
La plupart des éditeurs de traiter des tirets comme des séparateurs de mots, donc je ne peux pas l'onglet à travers le symbole de la je veux. Dire que la classe est "featured-product
", j'ai pour l'auto-complétion "featured
", entrer un trait d'union, et complète "product
".
Avec des traits de soulignement "featured_product
" est traité comme un seul mot, donc il peut être rempli en une seule étape.
La même chose s'applique à la navigation dans le document. Saut en mots ou en double-cliquant sur les noms de classe est cassé par des traits d'union.
(Plus généralement, je pense que de classes et les id comme jetons, donc ça n'a pas de sens pour moi qu'un jeton doit être si facilement splittable sur des traits d'union.)
Ambiguïté avec les opérateurs arithmétiques
En utilisant des tirets pauses objet de propriété l'accès à des éléments de formulaire en JavaScript. Cela n'est possible que par des caractères de soulignement:
form.first_name.value='Stormageddon';
(Il est vrai que je n'ai pas accès à des éléments de formulaire, de cette façon, moi-même, mais au moment de décider sur des tirets vs traits de soulignement comme une règle universelle, considère que quelqu'un pourrait.)
Langues comme Sass (en particulier tout au long de la Boussole cadre) se sont installés sur des tirets comme une norme, même pour les noms de variables. Ils ont utilisé le caractère de soulignement au début aussi. Le fait que ceci est analysé différemment, me paraît bizarre:
$list-item-10
$list-item - 10
Incohérence avec l'appellation variable à travers les langues
Retour dans la journée, j'ai utilisé pour écrire underscored_names
pour les variables en PHP, ruby, HTML/CSS, et JavaScript. Cela a été facile et uniforme, mais encore une fois, afin de "tenir dans" je vais maintenant utiliser:
dash-case
en HTML/CSScamelCase
en JavaScriptunderscore_case
en PHP et ruby
Ce ne sont pas vraiment me dérange pas trop, mais je me demande pourquoi c'est devenu tellement mal alignées, apparemment sur la fin. Au moins avec des traits de soulignement, il a été possible de maintenir la cohérence:
var featured_product = $('#featured_product'); //instead of
var featuredProduct = $('#featured-product');
Les différences de créer des situations où nous devons traduire des chaînes inutilement, ainsi que le potentiel pour les bugs.
Alors je vous le demande: Pourquoi la communauté presque universellement s'installer sur des tirets, et il y a toutes les raisons qui l'emportent sur les traits de soulignement?
Il y a un une question relative à la à partir de l'arrière à travers le temps, cela a commencé, mais je suis de l'avis qu'il n'est pas (ou ne devrait pas ont été) juste une question de goût. J'aimerais comprendre pourquoi nous sommes tous installés sur la présente convention si elle était vraiment juste une question de goût.
- J'ai utiliser les tirets parce que je n'ai pas de frapper la touche maj enfoncée.
- Des traits de soulignement sont moches et en plus ils exigent la touche maj enfoncée.
- Curieux de savoir pourquoi cela a été fermé... étaient là les votes pour le fermer? Je ne suis pas solliciter des opinions dans cette question. J'ai donné des raisons spécifiques à l'encontre de l'aide de tirets, mais il faut de bonnes raisons pour eux si tout le monde apparemment d'accord sur cette tendance. Il y a quelques bonnes réponses et bonnes infos ici. Puis-je améliorer la question?
- Je suis candidatures ma question pour la réouverture: toutes les réponses ci-dessous incluent "des faits, des références, ou une expertise spécifique"... donc je ne vois pas comment il n'était pas "constructif".
- Je pense que la fermeture de ce fil que non constructif était une décision stupide. Si il ya un style de codage qui est préféré en raison de quelque chose d'autre que la préférence (plus facile pour les IDEs de traiter avec, plus facile de complétion de code, une meilleure intégration avec les outils), je pense qu'il serait constructif de questions/réponses/débat.
- Phooey! C'est encore une grande question! Très instructif.
- c'est une très bonne question, bien formaté, instructif et met en avant les multiples aspects. +1 pour l'. Btw., Je suis d'accord qu'il était absurde de fermer ce sujet comme "non constructif". En fait c'EST constructif.
- Je suis vraiment contre le fermer comme non-constructive, ne fait pas de sens de le faire. Il y a une petite mais importante différence entre demander "Pourquoi préférez-vous XX" et "Pourquoi XX préféré". Le premier demande un avis, la deuxième est de comprendre pourquoi cette convention est donc acceptable, même si il ont XX inconvénients
- Qu'attendez-vous de Bill le Lézard? Bêtement la clôture de cette question était juste un de son pouvoir de voyages - voir ceci.
- double possible de au nom de "classe" et "id" attributs HTML - tirets vs souligne
- Dès 2015, Bootstrap 4 utilise camelCase pour id et les tirets pour les noms de classe.
- "Le saut en mots ou en double-cliquant sur les noms de classe est cassé par des traits d'union." > au moins le double-cllicking question ne peut être exclue dans les éditeurs comme sublime (en modifiant les paramètres)
Vous devez vous connecter pour publier un commentaire.
De complétion de Code
Si le tableau de bord est interprété comme un signe de ponctuation ou un identifiant opaque dépend de l'éditeur de choix, je suppose. Cependant, comme une question de préférence personnelle, je préfère être en mesure de tabulation entre chaque mot dans un fichier CSS et qu'ils trouvent que c'est gênant si elles étaient séparées par un trait de soulignement et il n'y avait pas de cesse.
Également, à l'aide de traits d'union vous permet de profiter de la |= sélecteur d'attribut, qui permet de sélectionner n'importe quel élément contenant le texte, éventuellement suivie par un tiret:
Cela rendrait le code HTML suivant les éléments ont italique font-style:
Ambiguïté avec les opérateurs arithmétiques
Je dirais que l'accès à des éléments HTML via la notation de point en JavaScript est un bug plutôt que d'une fonction. C'est un terrible construire dès les premiers jours de la terrible implémentations de JavaScript et n'est pas vraiment une grande pratique. Pour la plupart des choses que vous faites avec JavaScript ces jours-ci, vous voulez les utiliser Les Sélecteurs CSS pour aller chercher des éléments du DOM toute façon, ce qui rend l'ensemble de la notation point plutôt inutile. Lequel préférez-vous?
Je trouve les deux premières options sont beaucoup plus préférable, surtout depuis
'#first-name'
peut être remplacé par une variable JavaScript et construit de manière dynamique. Je trouve aussi plus agréable pour les yeux.Le fait que Sass permet de compter dans ses extensions CSS ne s'applique pas à la CSS de lui-même, mais je ne comprends (et étreinte) le fait que Sass suit le langage de style CSS (sauf pour le
$
préfixe de variables, ce qui bien sûr doit avoir été@
). Si Sass documents sont à regarder et se sentir comme les documents CSS, ils doivent suivre le même style que le CSS, qui utilise un tiret comme séparateur. En CSS3, l'arithmétique est limitée à lacalc
fonction, ce qui tend à montrer que dans le CSS lui-même, ce n'est pas un problème.Incohérence avec l'appellation variable à travers les langues
Toutes les langues, en cours de balisage en langues, langages de programmation, le style de langues ou langages de script, ont leur propre style. Vous trouverez cela dans les sous-langues des groupes linguistiques comme XML, ou, par exemple, XSLT utilise des bas-de-casse avec trait d'union délimiteurs et Schéma XML utilise des chameaux boîtier.
En général, vous constaterez que d'adopter le style qui sent et ressemble le plus "natif" de la langue que vous écrivez est mieux que d'essayer de chausse-pied votre propre style dans chaque langue différente. Puisque vous ne pouvez pas éviter d'avoir à utiliser des bibliothèques natives et les constructions de langage, votre style va être "pollué" par le natif de style si vous l'aimez ou pas, donc il est assez vain d'essayer.
Mon conseil est de ne pas trouver un favori de style à travers les langues, mais au lieu de vous rendre à la maison à l'intérieur de chaque langue et d'apprendre à les aimer tous ses caprices. L'un des CSS quirks est que les mots clés et les identifiants sont écrits en minuscules et séparés par des traits d'union. Personnellement, je trouve cela très agréable visuellement et pense qu'il s'inscrit dans les minuscules (bien que sans trait d'union) HTML.
|=
sélecteur, j'ai vu que dans l'autre réponse, et c'est un juste point de. Était la langue de la convention conçu autour de cela, ou l'inverse? (Traits d'union comme une tendance universelle qui semblent être relativement récente, ceux-ci pouvaient avoir émergé à la même époque.)|=
sélecteur d'attributs est fait spécifiquement pour lelang
attribut, mais son utilisation peut être étendue. J'ai toujours utilisé des traits d'union dans mon CSS, donc je ne peux pas parler pour le public en général, mais il y a certainement eu une convergence vers hyphends de pascal cas, le chameau de cas et des traits de soulignement. Le|=
sélecteur et le tiret comme séparateur sont aussi loin que je peux dire non, si.id
attributs est moins restrictive que celle de JavaScript identifiants. Pourquoi ne pas les CSS ont utilisé des traits d'union? Parce que vos yeux sont utilisés pour la lecture C-les langages? Essayez d'écrire XSLT pour quelques mois et vous aurez utilisé pour les traits d'union assez rapidement. Respecter la langue des conventions de nommage sur un autre est une pratique que je trouve étrange et désagréable.span[class|="em"] { font-style: italic; } with this:
span[class^='em'] { font-style: italic; }
Peut-être l'une des principales raisons pourquoi le HTML/CSS de la communauté est associée avec des tirets au lieu de soulignement est le fruit de l'histoire des lacunes dans les specs et le navigateur implémentations.
De Mozilla doc, publié en Mars 2001 @ https://developer.mozilla.org/en-US/docs/Underscores_in_class_and_ID_Names
De manière générale, j'aime souligne mais la barre oblique inverse, il fait juste laid au-delà de l'espoir, pour ne pas mentionner le peu d'appui à l'époque. Je peux comprendre pourquoi les développeurs s'en méfie comme de la peste. Bien sûr, nous n'avons pas besoin de la barre oblique de nos jours, mais le tableau de bord de l'étiquette a déjà été fermement établi.
Je ne pense pas que n'importe qui peut répondre à cette façon définitive, mais voici mes hypothèses:
Souligne besoin de frapper la touche Maj enfoncée, et sont donc plus difficiles à saisir.
Sélecteurs CSS qui sont officiellement partie des spécifications CSS utiliser des tirets (tels que les pseudo-classes comme :d'abord l'enfant et les pseudo-éléments :first-line), pas de traits de soulignement. Même chose pour les propriétés, par exemple text-decoration, couleur de fond, etc. Les programmeurs sont des créatures d'habitude. Il est logique qu'ils suivent les normes du style si il n'y a aucune bonne raison de ne pas.
Ce que l'on est plus loin sur la corniche, mais... Si c'est un mythe ou une réalité, il est de longue date l'idée que Google traite les mots séparés par des traits de soulignement comme un seul mot, et les mots séparés par des tirets comme des mots séparés. (Matt Cutts sur Souligne vs Tirets.) Pour cette raison, je sais que ma préférence, maintenant, pour la création d'une page Url est l'utilisation de mots-avec-des tirets, et pour moi au moins, cela a saigné dans mon conventions de nommage pour les autres choses, comme les sélecteurs CSS.
Il y a eu une nette reprise du trait d'union-séparé, l'ensemble des segments de parole de l'Url au cours des dernières années. Cela est encouragé par les bonnes pratiques SEO. Google explicitement "vous recommandons d'utiliser des traits d'union (-) au lieu de soulignement (_) dans votre Url": http://www.google.com/support/webmasters/bin/answer.py?answer=76329.
Comme indiqué, les différentes conventions ont prévalu à des moments différents dans des contextes différents, mais ils ne sont généralement pas une partie officielle de tout protocole ou d'un cadre.
Mon hypothèse est donc que la position de Google ancres de ce motif dans un délai d'une clé de contexte (SEO), et la tendance à utiliser ce modèle dans la classe, id et les noms d'attribut est tout simplement le troupeau se déplaçant lentement dans cette direction.
Il y a de nombreuses raisons, mais l'une de la chose la plus importante est de maintenir cohérence.
Je pense que cette article explique de façon globale.
Donc:
Je pense que c'est un programmeur dépendante de la chose. Certains aiment à utiliser des tirets, d'autres utilisent des caractères de soulignement.
Personnellement, j'utilise des caractères de soulignement (
_
) car je l'utilise dans d'autres endroits aussi. Tels que:- Variables JavaScript (
var my_name
);- Mes actions de contrôleur (
public function view_detail
)Une autre raison pour laquelle j'utilise des traits de soulignement, est-ce que, dans la plupart des IDEs de deux mots séparés par des caractères de soulignement sont considérés comme 1 mot. (et possible de sélectionner avec double-clic).