Utiliser les noms de balises HTML, les classes et les Id en CSS?
Dans la conception de l'HTML et le CSS pour une page, quand dois-je utiliser
img.className
contre
.className
contre
#idName
ou une autre variante?
Sont là des lignes directrices ou des recommandations?
Résumé de réponses
Merci à tous answerers - il y a quelques excellents trucs ici!
- faire CSS aussi précis que possible
- utiliser une approche OO
- commande: #id, tag, tag.className .className
- quand utiliser chaque sélecteur, aussi classe/ID comparaison
- donner des sélecteurs de noms basés sur le but, pas de quoi ils ressemblent
- utiliser les sélecteurs avancés pour les petits code, laissez les classes CSS pour les exceptions/remplace seulement
- gérer ASP.NET munging ID
- Heres un peu de geek moyen(OK très geek) pour comprendre comment calculer la spécificité de la css. stuffandnonsense.co.uk/archives/css_specificity_wars.html
Vous devez vous connecter pour publier un commentaire.
En général, vous devriez être aussi précis que l'élément demandes.
Il n'y a pas de règle générale, il dépend du style en question.
Beaucoup de gens vont vous recommandons de le conserver le plus bas de la spécificité de la théorie que cela permet à un maximum de cascade de réutilisation mais ce n'est absolument toxiques dans des situations du monde réel où vous avez plusieurs développeurs de travailler sur des versions légèrement différentes de ce qu'est un
.foo
pourrait ressembler. La Pollution de l'héritage que vous ne voulez pas conduit à la dilatation massive en essayant de défaire que, localement ou à la perte de temps dans la refactorisation.La meilleure directive j'ai toujours proposer, c'est d'essayer de penser à des feuilles de styles CSS dans OO termes: sélecteurs de classe de la carte à des interfaces plus ou moins, les balises de la carte de classes, et les sélecteurs d'ID de la carte des instances. Par conséquent décider si le style que vous souhaitez appliquer s'applique vraiment à cette chose, toutes les choses comme ça, ou quoi que ce soit qui le veut.
Je vous encourage donc vivement à faire usage de haut niveau des Id sur wrapper éléments de sorte que vous pouvez écrire des sélecteurs dans un espace de noms comme la mode (c'est à dire
#foo .bar
,#foo .baz
où#foo
est unique pour une page ou un ensemble de conceptions de page) qui vous permet à la fois un niveau de spécificité qui réduit la croix-de la conception à la pollution et à un niveau de généralité qui permet de faire la plupart des en cascade CSS de les réutiliser.Meilleur des deux mondes.
Cela dépend de l'intention de la sémantique, et, comme d'autres ont dit, être aussi précis que possible.
#header
et#footer
Et n'oubliez pas l'utilisation de sélecteurs avancés. Un mauvais exemple:
La même chose pourrait être réalisé avec:
Le deuxième exemple se débarrasser du superflu attribut "class" sur l'élément H1 dans le "mainMenu" div. Cela a deux avantages importants:
Si vous prenez bien soin de vous CSS, et de faire usage de bon sélecteurs avancés, vous pouvez presque totalement quitter classes CSS. Et de les garder uniquement pour les exceptions et des dérogations.
Prendre cet exemple, qui attire des boîtes avec des en-têtes:
Maintenant, dès que vous suivez un
H2
avec unDIV
dans le#content
élément, vous avez une belle boîte. d'autresDIVs
etH2
s sont laissés seuls:Si vous obtenez ces règles de droit, vous avez à peine jamais besoin de classes, et peut travailler avec les Identifiants et les noms de BALISE seul. Et comme un bonus supplémentaire, votre code HTML sera beaucoup plus agréable à lire et à maintenir.
vous devez utiliser le sélecteur de mieux décrire vos règles
id: lorsque vous souhaitez sélectionner un seul élément
Vous la préférence devrait être, dans l'ordre, du plus élevé au plus bas:
id
Sélecteurs d'ID sont rapides. Sélecteurs de balise sont relativement rapides. Pure sélecteurs de classe sont lents parce que le navigateur a essentiellement pour interroger chaque élément et de voir si chacun a la classe. Obtenir des éléments en fonction de leur ID ou le nom de la balise sont des "natifs" des opérations à partir d'un navigateur contexte.
Aussi, je trouve ça bien pratique pour faire de votre sélecteurs CSS aussi restrictive que possible, sinon il transforme tout en désordre et vous obtenez toutes sortes de conséquences imprévues, où les règles CSS s'appliquent lorsque vous n'avez pas s'attendre à autre, ce qui oblige souvent de vous créer un similaire mais différent sélecteur seulement si aucune des règles concernant le premier ne s'appliquent pas (la traduction dans plus de dégâts).
Fondamentalement, si vous le savez si vous utilisez uniquement une classe sur les éléments div, puis faire ce
pas
Si vous appliquer une classe à plusieurs éléments de la liste juste eux:
au lieu de
Dans la pratique, je trouve très peu de situations où vous avez besoin d'utiliser le "nu" sélecteurs de classe ou lorsqu'il est souhaitable de le faire.
tag
?tag
est en fait très commun. Le plus simple est de changer l'affichage de tous les liens dans tout le site: A { text-decoration:none; color: #080; } Ensuite, vous pouvez toujours les remplacer ou étendre si nécessaire à l'aide de règles plus spécifiques (id
,class
,pseudoclass
, ...). Par exemple: A:hover { text-decoration: underline; }!important
, vous saurez ce que je veux dire. Trop spécifiques css est également beaucoup plus difficile à refactoriser et est une auto-propagation problème.Des sélecteurs de classe
C'est pour être utilisé lorsque vous avez plus d'un élément sur la page que vous souhaitez appliquer le même style. Il peut être de n'importe quelle balise de l'élément. Ainsi, dans la suite de toutes les utilisera le même style que définis par le
.className
.Mais vous pouvez également restreindre de la sorte:
En plaçant la balise le long avec la définition de style, vous êtes en train de dire que ce style est à utiliser uniquement lorsque c'est la classe utilisée par cette balise particulière, dans ce cas, une image.
Code HTML ressemblera à ceci:
Si vous avez d'autres éléments sur la page en utilisant le même style de classe, mais ne sont pas de la même balise, puis les styles définis dans le présent ne sera pas appliquée et qu'ils prennent le plus générique comme mentionné dans le premier exemple.
Donc de répéter l'exemple ci-dessus:
Seulement l'image va prendre sur le style défini par les
img.className
alors que tout le reste va prendre sur les règles de style défini dans.className
.Sélecteurs d'ID
C'est pour être utilisé lorsqu'il n'existe qu'une seule instance d'un élément particulier que vous souhaitez appliquer le style.
Vous pouvez également forcer à s'appliquer que dans certaines tag conditions que les précédentes avec les définitions de classe.
Cet exemple sera le seul applicable à l'alinéa bloc marqué avec l'ID:
Si vous y ajoutez que
id
sur un autre élément, comme ceci:Il ne sera pas le prendre sur le style de jeu et à être ignoré.
De vos deux premiers sélectionneurs, le premier des deux va remplacer le deuxième, car il est plus spécifique. Vous pouvez calculer la spécificité d'un sélecteur.
Une chose à noter est que certains des scripts côté serveur technologies (notamment ASP.NET) ne joue pas bien avec l'utilisation d'Identifiants de votre style. Si il ya une chance que votre conception sera utilisé avec une telle technologie, je vous recommande d'oublier
#id
de sélecteurs et de l'utilisationtag.className
à la place.La raison en est que ASP.NET en réalité change l'ID qui se retrouve dans le HTML basé sur un certain nombre de critères, si la balise est sortie par un serveur secondaires de contrôle.
tag#id
sélecteur, il est particulièrement difficile, mais techniquement, vous n'êtes pas autorisé à placer les éléments de bloc à l'intérieur des éléments en ligne soit. Il peut également se briser dans des situations où vous utilisez un sélecteur d'enfant (>
) et diverses autres circonstances.Je sais que c'est une jolie vieille question, mais pour tous ceux qui sont la lecture de ce tout à l'heure...
Il y a 4 catégories de règles en général:
ID de Règles, les Règles de Classe, de marquer des Règles, des Règles Universelles.
Et il est important de mentionner que classe sélecteurs sont plus rapides que tag sélecteurs. Donc, vous devriez toujours utiliser dans l'ordre suivant
1. Sélecteur d'ID
2. Sélecteur De Classe
3. Sélecteur De Balise
4. Universel Sélecteurs
Dans votre cas, vous ne devez jamais utiliser le nom de la balise avant le nom de la classe.
Vous pouvez trouver plus d'informations ici: Écriture efficace en CSS
Cela dépend vraiment de la situation:
Toujours utiliser l'effet de cascade de CSS à votre avantage.
Il est de bonne pratique d'utiliser le moins de règles spécifiques pour chaque règle.
La façon dont vous structurez votre CSS dépendra des besoins particuliers de la conception.
Oui. Vous pouvez utiliser le même nom de classe pour deux éléments dans l'avenir. Être explicite et clair. Cela permettra également d'éviter de classe-les règles de cumul sur involontaires éléments.
Utiliser l'ID est seulement lorsque nécessaire, et une seule fois par page.
Quand utiliser quoi dépend ce que vous voulez sélectionner.
img.className
(sélecteur de type de + sélecteur de classe) sélectionne seulement les éléments IMG, c'est dans la classe “className”, tandis que.className
(juste sélecteur de classe) sélectionne tout élément qui est dans la classe et#idName
(sélecteur d'id) tout élément avec l'ID “idName”.Mais à côté de ça, le sélecteur de tous ont une differente la spécificité qui détermine l'ordre dans lequel les propriétés de règles de réécriture des autres.
Donc si vous avez une IMG élément avec l'ID “idName” c'est dans la classe “className”:
Les propriétés de l'application des règles appliquées dans l'ordre suivant (de la spécificité de la plus haute à la plus basse):
#idName
img.className
.className
Mais lorsque vous utilisez une classe spécifique pour un seul type d'éléments (par exemple “className” uniquement pour élément IMG), vous pouvez aller avec seulement
.className
.