J'utilise Aussi j'ai entendu dire qu'il a été supprimé de la spécification CSS2 car utiliser : Sélecteur Last-enfant CODE> Beaucoup de fois, principalement lors de l'utilisation de
Base-Bottom Code> dans une liste où j'utilise
bordure: aucun; code > Pour le dernier enfant ou lors de l'utilisation de marges. Donc, ma question est, c'est le
: dernier-enfant code> sélecteur mauvais d'un point de vue de la performance? P>
: premier enfant code> est facile pour le navigateur de détecter, mais pour détecter
: dernier enfant code > Il faut faire boucle. P>
3 Réponses :
Je crois que c'est toujours le moyen le plus simple et basse performance d'obtenir votre dernier enfant. Par cela, je veux dire, tous les autres moyens d'obtenir le dernier enfant seront pires pour la performance, car il n'aura pas de travail effectué par la communauté W3C avant. P>
Non, mais comme il s'agit d'une fonctionnalité de la spécification et que le W3C en a fait un sélecteur entièrement documenté, nous ne pouvons que supposer qu'ils travaillaient dessus.
Les spécifications et la mise en œuvre sont deux choses différentes. Peu importe que le sélecteur fait officiellement partie de la spécification CSS ou non. Il suffit de prétendre qu'il n'y a pas de problèmes car un groupe de personnes pensait à ce que devrait i> n'est pas un argument très fort.
Le groupe de personnes en question est celui qui définit à peu près toutes les règles de programmation Internet et certains d'entre eux sont ceux qui conçoivent les navigateurs. Je crois que s'ils ont fait le choix de mettre en œuvre le dernier enfant tel qu'il est, il doit y avoir une raison car il est également leur travail de lire ce CSS après, dans leurs navigateurs
@Felix KLING: Ils sont étroitement liés de toute façon - Spécifications Drop ou diffèrent des fonctionnalités s'il y a trop peu d'implémentations interopérables, ce qui aurait été ce qui est arrivé ici avec : dernier enfant code>. Cela dit, votre dernière déclaration est toujours vraie - surtout quand il n'y a pas de références à sauvegarder de telles affirmations.
S'il a été différé de CSS2 pour des problèmes de performance, mais réintroduit dans Selectors 3, je soupçonne que c'est parce que la performance n'est plus un problème tel qu'il était précédemment. P>
N'oubliez pas que La seule raison impérieuse que je puisse penser pour remplacer un style frontière avec : dernier enfant code> est le fort> définitif strong> et seul strong> moyen de sélectionner le dernier enfant d'un parent (en plus de
: Nth-last-enfant (1) code>, évidemment). Si les responsables de la navigation n'ont plus de problèmes de performance, nous ne devons ni les auteurs. P>
: premier enfant code> par opposition à
: dernier enfant code> est de permettre la compatibilité avec IE7 et IE8 . Si cela augmente la performance, laissez cela être un effet secondaire. Si vous ne BESOIN EM> EM> IE7 et IE8, vous ne devriez pas vous sentir obligé d'utiliser
: premier enfant code> sur
: dernier enfant code> . Même si la performance du navigateur est absolument critique, vous devez vous en résoudre la bonne manière en testant et en comparifiant, non par optimisation prématurée. P>
Si vous avez le contrôle sur le rendu de la page sur le serveur, alors dernier enfant code> n'est pas le seul moyen de sélectionner le dernier élément enfant d'un autre élément. Vous pouvez ajouter une classe et sélectionnez-la à l'aide de cela.
En général, les sélecteurs de base CSS fonctionnent assez bien que la plupart d'entre nous ne devraient pas être inquiets de les utiliser. Oui, certains d'entre eux font pire que d'autres, mais même les pires performants sont peu susceptibles d'être le principal goulot d'étranglement de votre site. P>
Sauf si vous avez déjà optimisé tout le reste à la perfection, je vous conseillerais de ne pas m'inquiéter à ce sujet. Utilisez un outil de profilage comme Yslow pour trouver les problèmes de performance réels em> sur votre site et corrigez ceux-ci. P>
Dans tous les cas, même s'il existe une implication notable de performance pour un sélecteur CSS donné (ou une autre caractéristique du navigateur), je dirais que c'est la responsabilité de la réparatrice du navigateur de le réparer, pas la vôtre de travailler autour de lui. < / p>
Si
: Last-Enfant CODE> n'est nécessaire que pour supprimer la bordure inférieure du dernier enfant de la liste, vous pouvez ajouter la bordure supérieure et le supprimer de
d'abord: enfant code>. Bien sûr, cela pourrait ne pas répondre à vos besoins.
Avez-vous déjà lu ceci? snook.ca/archives/html_and_css/csss-parent-selectors
@ T.Niese: CSS4 introduira probablement le sélecteur parent: Le dernier enfant est également en spécification: W3. org / tr / sélectors4 (mais bien sûr, les implémentations peuvent avoir des problèmes de performance que l'article affiche)
@buli Eh bien, c'est plus sur la partie Pourquoi c'est-à-dire que c.-à-d. Atteignez si longtemps pour obtenir: la dernière pension de l'enfant i>
@ T.Niese je parlais en général :)
@ M.ALien moi aussi. Il existe également une information sur:
Firefox traite le dernier élément chargé comme le dernier élément jusqu'à ce qu'il obtienne une nouvelle. Code>
dans Safari, Chrome et Opera [...] Ces navigateurs ne font pas Traitez n'importe quel élément comme le dernier élément jusqu'à la fermeture de l'élément parent. Code> Just pensait que cette observation pourrait provenir d'intérêt, pourquoi il aurait pu être préoccupé par la mauvaise performance. Quoi qu'il en soit, je ne pense pas que ce soit un problème réel, car si vous regardez les pages dynamiques avec où JS crée et retire l'élément encore et encore. Je ne m'attendrais pas à ce que
: dernier enfant code> serait le problème i>.
@ T.Niese qui était un fait agréable, avez-vous eu un lien pour un article qui explique cela?
@ M.ALien Ceci est du lien de mon premier commentaire (en vertu de la section
Pourquoi c'est-à-dire que c'est-à-dire que c.-à-d. Atteindre si longtemps pour obtenir: la dernière main d'enfant code> Le problème est expliqué.) Dans la section suivante, sont les parties que j'ai citées. .