J'ai récemment rencontré ce sélecteur CSS tout en essayant de trouver un moyen de comprendre facilement des éléments de blog majeurs tels que des paragraphes et des images. Un exemple de son utilisation serait quelque chose comme ceci: à première vue, il semblait assez utile. Donc, ma question est la suivante: spécifiquement: P> Quel est le support de navigateur comme pour cela? P> li>
y a-t-il de cas que vous ne voudriez pas d'espacement de marge même entre des éléments d'un article et, sinon, est-il plus facile de déclarer cela d'abord, puis de remplacer ou de déclarer simplement chaque élément individuellement? P> < / li>
Cela a-t-il des problèmes de performance puisque vous sélectionnez tout deux fois? P> LI>
ol> p>
3 Réponses :
Quel est le support du navigateur comme pour cela? P> blockQuote>
Fondamentalement, IE7 + et tout autre navigateur moderne. P>
Il peut y avoir des boîtiers d'angle pour chaque navigateur en fonction de quels éléments sont réellement sélectionnés ou interrogés avec le combinateur de la soeur
+ code>, mais je ne m'inquiéterais pas autant que le fait que la marge est appliqué à peu près tout élément em> c'est un frère sœur sans raison pratique. P> li>
Y a-t-il des cas que vous ne voudriez pas d'espacement même de marge entre éléments dans un article et, sinon, est-il plus facile de déclarer cela d'abord, puis de remplacer ou de déclarer simplement chaque élément individuellement? P> blockQuote>
Cela semble assez utile à première vue, mais si vous y réfléchissez, ce sera probablement une bien meilleure idée d'être plus précis sur ce qu'il faut appliquer la marge à. C'est une règle que je peux imaginer sera remplacée beaucoup, de nombreuses fois tout au long du reste de la feuille de style par d'autres sélecteurs spécifiques, ce qui le rend assez redondant et même non désiré dans de nombreux cas. Je ne peux pas penser à une utilisation du monde réel pour une règle comme votre exemple. P>
gardez à l'esprit que, dans ce cas particulier, Les marges verticales s'effondreront , vous n'avez donc besoin que de définir des marges verticales pour un ensemble d'éléments sans avoir à recourir à l'application de
Margin-top code> exclusivement à tous les frères et sœurs suivants d'un élément. P> LI >
Est-ce que cela a des problèmes de performance puisque vous sélectionnez tout deux fois? P> blockQuote>
En fait, il ne peut pas tout sélectionner deux fois. Le navigateur ne regarde que chaque élément une fois, détermine alors si chaque élément suit une autre sous le même élément parent. Cela ne se soucie pas de quel type d'élément il suit, tant qu'il en suit une autre. Cela ne va pas sur la sélection de chaque élément, puis comparez-les pour voir si ce sont des frères et sœurs les uns des autres. P>
Maintenant, Les gens disent em> qu'à l'aide du sélecteur universel
* code> en conjonction avec n'importe quel combinateur provoque des catastrophes de performance de rendu, donc les gens disent em> que Ce genre de choses devrait être évitée à tout prix. Mais ce produit est à peine important du tout (honnêtement, un sélecteur comme
* + * code> est seulement quelques microsecondes plus lents que
p + p code>), donc vous n'avez vraiment pas besoin de s'inquiéter à ce sujet. Considérez d'abord l'utilité de la règle du CSS, puis décidez si vous avez vraiment besoin de la règle en fonction de cela. P> LI>
Maintenant avec tout ce qui dit (il deviendra assez tard ici), j'aurais probablement réécrit l'exemple comme celui-ci, en fonction de ce que j'ai dit ci-dessus concernant l'effondrement des marges: P>
.post p { margin: 15px 0; }
Avez-vous une source pour le support IE7 +? (Je pense que tu as raison, mais je ne trouve rien dessus.)
@FakerAnBrigand: IE7 prend en charge + code> avec quelques bugs obscurs. Notez que "Buggy" dans la référence du point de site, et non "Aucun". Voir également QuirksMode.org .
"Les gens disent ..." I> Oh, garçon. Ces gens; ne sais jamais ce qu'ils vont dire.
Merci @boltclock! J'ai personnellement été habituellement utilisé pour travailler contre la marge-effondrement plutôt que de l'utiliser, il s'agit donc d'un excellent recyclage sur l'aspect positif de celui-ci. Je soulignerai qu'une autre utilisation pour cela autre que les marges sont des frontières avec dire .Content <* + * {bordure-top: 1px solide # 666} code> Pour mettre un séparateur entre les éléments. Encore une fois, peut être fait sans
* code> et dans la plupart des cas, vous ne le voudriez probablement pas. Bon à savoir que c'est dans la boîte à outils cependant.
C'est ce qu'on appelle le "sélecteur de soeur". P>
Selon Point de site , il est pris en charge dans tous les navigateurs récents et dans IE8 +. IE7 a quelques limitations expliquées sur la page SitePoint, mais vous travaillerez surtout aussi. P>
Il est défini dans le spécific CSS2 . p>
À propos de la performance: Beaucoup de CSS remplace d'autres sélecteurs. Cela fait partie de la nature en cascade. En outre, la performance varie tellement entre les moteurs de rendu qu'il n'est pas pratique de s'inquiéter de la performance lorsqu'il s'agit de CSS. P>
Je comprends que ceci est un sélecteur de frère de soeur. J'avais plus de questions sur cette utilisation spécifique de cela plutôt que du sélecteur lui-même.
Vous devez également envisager d'ignorer un bogue IE7 liée à l'ignorance de combinaisons adjacents-fromage (ainsi que : premier enfant code> pseudoclasses) si le commentaire HTML est à la place de l'endroit où IE7 s'attend à voir un élément. Il y a un Solution de contournement qui supprime les commentaires comme Les nœuds DOM après la page sont chargés dans IE7. P>