Pourquoi parlonsnous de CSS4?
Il y a eu récemment une discussion sur la question de savoir s'il devrait y avoir un CSS4, comme dans un version »de CSS. Dans cet article, j'examine les discussions à ce sujet, les avantages et les inconvénients de la création d'une version de fonctionnalité pour CSS, et les problèmes potentiels liés à la décision à prendre.
J'utilise le terme CSS4 car c'est ainsi que la discussion a été lancée, et ne pas essayer de discuter de ce que la dénomination devrait réellement être, si cette approche devait être adoptée. La dénomination de Bikeshedding est une excellente distraction de la discussion sur la question de savoir si nous devons le faire, donc j'utiliserai CSS4 comme espace réservé pour la version de CSS que nous proposons de définir, et CSS5 pour la suivante le long de la ligne.
Le problème
Une discussion sur la question de savoir si nous devrions définir un CSS4 a été soulevée dans la communauté, et Jen Simmons a ensuite soulevé un problème concernant le CSS Working Group qui complète soigneusement une partie de ce débat existant. En dehors du problème réel dont nous discutons, il est fantastique de voir autant de personnes qui ne font pas partie du CSS WG répondre sur ce fil, et j'espère qu'après avoir commenté une fois, les gens seront heureux de venir commenter certains nos autres problèmes.
Afin de comprendre pourquoi il n'y a pas de CSS4, nous devons examiner un peu l'historique de la plate-forme Web. Les versions initiales de CSS étaient une seule spécification monolithique. Ces spécifications contenaient toutes les propriétés et valeurs CSS possibles. Cela a bien fonctionné car il n'y avait pas beaucoup de CSS à détailler. CSS1 couvrait principalement les fonctionnalités de mise en forme des documents texte, des fonctionnalités et des clarifications supplémentaires ont été ajoutées à CSS2 et CSS2.1 mais CSS était encore une spécification relativement petite.
CSS3
Au moment où le groupe de travail CSS a commencé à travailler sur CSS3, il a été décidé de diviser la grande spécification en modules. Ces modules couvriraient chacun une partie du CSS. Tous les CSS n'ont pas été immédiatement placés dans un nouveau module. Beaucoup de choses sont restées définies dans CSS2.1 car il n'y a eu aucun changement ou ajout. Pour cette raison, vous trouverez toujours des liens vers la spécification CSS2 dans les modules modernes, si la chose référencée est toujours définie dans CSS2. Cependant, tout nouveau CSS est créé dans des modules séparés. Cette modularisation se poursuit aujourd'hui alors que de nouveaux CSS sont en cours de création. Par exemple, plusieurs des caractéristiques qui composent la spécification Box Alignment ont initialement démarré dans la spécification Flexbox. Une fois qu'il est devenu évident qu'ils pouvaient s'appliquer à d'autres méthodes de disposition telles que la disposition de grille, ils ont été déplacés dans un nouveau module à définir pour cette autre méthode également.
Nous avons cessé de faire référence aux nouvelles spécifications en tant que spécifications CSS3, en partie parce que cela ne ça n'a pas beaucoup de sens. La façon dont les modules sont versionnés est que les modules qui étaient une progression de CSS2, par exemple les sélecteurs, sont devenus un module de niveau 3. Le tout nouveau CSS, par exemple CSS Grid Layout, n'existait pas du tout dans CSS2 et démarre donc la vie en tant que module de niveau 1. Certains de ces modules initiaux sont maintenant au niveau 4 ou même au niveau 5. Par conséquent, appeler tous les nouveaux CSS CSS3 ne correspond plus aux numéros de niveau et est potentiellement assez déroutant.
Niveaux de maturité des spécifications
En plus des niveaux de spécification, chaque niveau individuel passe par un processus par étapes depuis le projet initial pour devenir une recommandation du W3C, les étapes du processus sont appelées Niveaux de maturité . Une recommandation du W3C est ce que vous pourriez considérer comme une «norme Web», mais bon nombre des choses que nous utilisons quotidiennement dans notre travail sont définies dans des spécifications qui ne sont pas encore à ce niveau de maturité. Vous pouvez voir la liste des spécifications et leur statut sur la page CSS WG Travaux en cours .
Explication du CSS4 manquant
Beaucoup d'entre nous impliqués dans le processus ont vu la confusion au sujet de CSS3 ou le manque apparent des progrès vers CSS4 et a commencé à écrire des articles, publier des vidéos et essayer d'aider les gens à comprendre un peu comment le processus a réellement fonctionné. Cela dit, bien qu'il soit important de partager ces informations afin que les personnes enseignant le CSS les expliquent correctement, je ne sais pas à quel point ces informations sont importantes pour le développeur Web moyen. Le niveau auquel se trouve une spécification, ou le processus interne de maturité des spécifications du W3C, est beaucoup moins important pour un développeur Web que la question de savoir ce que CSS peut réellement être utilisé dans les navigateurs.
Quels sont les avantages du versioning CSS? [19659002] En examinant les réponses au problème et la discussion sur le Web, il y a certainement des avantages potentiels à avoir un numéro de version clair pour CSS.
En tant qu'auteur de livres et producteur de matériel pédagogique, je bénéficierais probablement à partir des numéros de version CSS. C'est une excuse pour publier un livre mis à jour qui couvre la dernière et la meilleure version de CSS. De l'autre côté, c'est un moyen pour les acheteurs de livres et de cours de s'assurer que ce qu'ils achètent est raisonnablement à jour – bien que la date de publication soit sans doute une meilleure indication de cela qu'autre chose.
Une chose que nous avons perdue en nous éloignant d'un numéro de version de tous les CSS, était la possibilité de faire quelque chose comme Acid Test . Le test Acid 1 testé pour la prise en charge de CSS1, Acid 2 pour la prise en charge de CSS2.1. Ces tests étaient raisonnablement bien connus et considérés comme une bonne référence pour la prise en charge par le navigateur des normes Web. Un test de la version 3 a été développé, cependant, il a testé une gamme de fonctionnalités et était moins étroitement lié aux modules CSS de niveau 3 que les tests précédents ne l'avaient été à CSS1 et 2.1. Une ligne définie tracée autour d'un ensemble de fonctionnalités permettrait aux agents utilisateurs de déclarer leur niveau de support pour ces fonctionnalités.
Certains commentateurs sur la question ont mentionné qu'une version leur permettrait de pousser pour la suppression. d'anciennes versions de navigateur parce qu'elles «ne prennent pas en charge CSS4».
«[…] CSS4 pourrait peut-être aider à pousser leur état d'esprit vers un Web plus sûr et meilleur. Pendant la réunion de terrain, il est difficile de leur dire que nous ne pouvons pas prendre en charge IE10 car nous voulons des variables CSS et une disposition de grille. Les intervenants ne savent pas et ne se soucient pas. Ils veulent juste prendre en charge autant de navigateurs qu'ils le peuvent (état d'esprit FOMO très typique) et ils ont l'argent à dépenser.
Cependant, si nous pouvions leur dire que nous ne pouvons pas prendre en charge IE10 car il n'a pas la dernière CSS4 et lancez-leur le "Êtes-vous sûr de vouloir que votre site Web nouvellement créé soit derrière vos concurrents à cause de cela?" question, qui pourrait les méditer (bien sûr, en plus du fait que IE10 est complètement obsolète et vulnérable). »
Il existe un argument selon lequel la définition d'une version donne aux développeurs un ensemble clair de choses à apprendre. En ouvrant la question sur le CSS, le GT Jen Simmons a déclaré:
«Je vois beaucoup de résistance à l'apprentissage du CSS qui a suivi CSS3. Les gens sont fatigués et dépassés. Ils ont l'impression de ne jamais tout apprendre, de ne jamais rattraper leur retard, alors pourquoi essayer ou pourquoi essayer maintenant? Si le CSSWG peut tracer une ligne autour de la pile sans fin de nouveaux, et dire «ici, ça. Cette partie est prête. Cette partie est terminée. Cette partie est ce que vous devez prendre le temps d'apprendre. Tu peux le faire. Ce n'est pas infini. ' Je crois que cela aidera énormément. "
Quels sont les problèmes de versioning CSS?
Le premier problème est que toute collection de CSS" prêts pour la première heure "n'est pas aussi simple que de sélectionner un ensemble de spécifications. De nombreuses spécifications sont partiellement mises en œuvre, avec un grand support pour certaines propriétés et aucune pour d'autres. Il y a des fonctionnalités que de nombreux développeurs Web considéreraient comme matures, qui se trouvaient dans des spécifications encore au stade de brouillon de travail aux côtés de fonctionnalités qui sont toujours en cours de discussion et de clarification au sein du groupe de travail.
Si nous prenons Disposition à plusieurs colonnes par exemple. La majorité des propriétés ont une implémentation de navigateur répandue depuis de nombreuses années. Cependant, la propriété column-span
n'a été implémentée que récemment dans Firefox, et il existe un certain nombre de fonctionnalités qui ont récemment été clarifiées, comme column-fill
.
Nous pourrait décider d'ignorer complètement les spécifications et d'examiner les propriétés. Ce n'est pas simple non plus, car nous avons des implémentations partielles entre les méthodes de mise en page. Les propriétés Alignement de boîte sont un excellent exemple. Celles-ci sont définies pour toutes les méthodes de disposition, où la propriété a un sens dans cette méthode de disposition. Cependant, la prise en charge de Box Alignment n'est actuellement visible que dans Grid et Flexbox. Par conséquent, se justifie-t-il
qui est défini pour les boîtes de niveau bloc, les boîtes absolument positionnées et les éléments de grille stables? Oui dans un contexte de grille, non dans un contexte de disposition de bloc.
Le dimensionnement de boîte est un autre domaine, nous prenons en charge la valeur de dimensionnement intrinsèque fit-content ()
dans CSS Grid Layout pour le dimensionnement des pistes, mais pas comme valeur pour width
. Ensuite, aucun des mots clés de dimensionnement intrinsèque n'est implémenté pour flex-base
par navigateurs autres que Firefox .
Enfin, si nous revenons au multicol, de nombreux problèmes rencontrés par les utilisateurs multicol n'ont rien à voir avec les propriétés elles-mêmes, mais sont à voir avec une mauvaise prise en charge de la fragmentation entre les navigateurs . Cela fait que le multicol semble mal se comporter malgré un excellent support des différentes propriétés. Démêler toutes ces dépendances pour arriver à un ensemble de fonctionnalités va être une tâche assez difficile.
CSS n'est pas seulement pour les navigateurs Web
Comme je l'ai dit et un autre commentateur l'a mentionné, CSS n'est pas seulement pour les navigateurs Web . Il existe toute une série d'agents utilisateurs qui acceptent CSS et HTML et produisent des documents imprimés en créant un PDF prêt à imprimer. Ils ont généralement un excellent support pour la spécification, la fragmentation et ainsi de suite des supports paginés. Cependant, ils sont souvent en retard sur les navigateurs en termes d'implémentation de CSS plus récents, par exemple Grid Layout. Comment s'intègrent-ils dans CSS4?
Les gens s'attendent à ce qu'une version de fonctionnalité inclue des fonctionnalités actuellement inexistantes
Quelque chose d'intéressant qui s'est produit dans la discussion sur la question, c'est qu'un certain nombre de personnes ont commenté en disant que leurs attentes un CSS4 est qu'il contiendrait certaines fonctionnalités qui ne font pas encore partie du CSS. Joshua Lindquist, dans son excellent résumé des commentaires note que,
«Lorsque je parle d'auteurs qui ne suivent pas les derniers développements, je pense que cette approche sera simple à comprendre. Tout se sentira comme si c'était nouveau pour eux, même si certaines de ces fonctionnalités, comme Grid et Flexbox, sont dans les navigateurs depuis des années.
Mais quiconque suit ne sera probablement pas sûr de savoir pourquoi il y a un "nouveau" spécification pleine de choses qui sont en fait anciennes. "
Qui déciderait de ce qui fait la coupe?
Étant donné que les fonctionnalités qui constitueraient CSS4 ne sont pas complètement simples, quelqu'un va devoir prendre la décision comme
Le groupe de travail CSS a des critères de stabilité via les niveaux de maturité déjà discutés. Une fois qu'une spécification a deux implémentations de chaque fonctionnalité, elle peut passer du statut de recommandation candidate à une recommandation. Cependant, comme détaillé ci-dessus, cela peut prendre un certain temps, et pendant que nous attendons que certaines fonctionnalités d'une spécification soient implémentées, d'autres peuvent avoir une prise en charge de navigateur étendue et stable. Si nous devions dire que CSS4 n'était que les spécifications qui étaient au statut de recommandation, cela comprendrait:
- CSS Color Level 3
- CSS Namespaces
- Selectors Level 3
- CSS Level 2 Revision 1
- Media Requêtes
- Attributs de style CSS
- Polices CSS niveau 3
- Modes d'écriture CSS niveau 3
- Interface utilisateur de base CSS niveau 3
- Niveau de confinement CSS 1
Donc, pas de grille, Flexbox, alignement de boîte , et bien d'autres spécifications que la plupart d'entre nous utilisent.
Si nous voulons définir une version de CSS, distincte des niveaux de spécification et de la maturité existants que nous avons déjà dans le cadre du processus W3C, alors il nous faut être un groupe avec le temps et les ressources pour y travailler. Ce groupe doit non seulement définir CSS4, mais doit le faire dans le cadre du développement d'un cadre pour prendre ces décisions cette fois, et pour les n prochaines versions de CSS. Sinon, nous aurons à nouveau cette discussion dans deux ans, sur le fait que personne n'a expédié CSS5. Je ne pense pas que le groupe de travail CSS soit le bon endroit pour cela, même si seulement il y a un autre travail que le GT doit faire pour développer et définir de nouveaux CSS. Il y a déjà plus de travail à faire que nous n'en avons le temps. De plus, avoir une autre considération lorsque vous travaillez sur des spécifications rendra les décisions autour de chaque spécification plus difficiles. Actuellement, nous avons des situations où des parties d'une spécification sont marquées comme étant à risque si leur inclusion peut empêcher la spécification de progresser vers une recommandation. C'est pour cette raison que la sous-grille a été transférée au niveau 2 de la grille. Si nous avons ce niveau supplémentaire d'abstraction, qui ne rentre pas vraiment dans le processus, cela sera-t-il simplement une autre chose à considérer et retardera donc le travail sur les spécifications?
Quel problème essayons-nous de résoudre?
des réponses à ce problème, les développeurs Web ont évoqué la prise en charge des navigateurs comme étant la clé de ce qui devrait être inclus dans un CSS4, et je pense que le problème auquel nous sommes confrontés est moins celui du versioning CSS et plus de développeurs Web étant clairs quant à quelle collection
«L'un des avantages d'une approche CSS4 est qu'elle signale deux choses. Premièrement, qu'il existe un ensemble important de nouvelles fonctionnalités CSS qui ont été développées après CSS3 et qui sont prêtes à l'emploi et deuxièmement, qu'elles sont prêtes à l'emploi. Pas expérimental ni implémenté par Chrome mais personne d'autre, mais prêt pour une large adoption. "
Le fait que la prise en charge du navigateur apparaisse si fréquemment dans cette discussion me fait me demander si un un meilleur endroit pour définir cela serait quelque part comme MDN. MDN est déjà fourni par tous les fournisseurs de navigateurs, il a déjà des données de support pour ces fonctionnalités d'une manière qui nous permet de voir des implémentations partielles de choses comme Box Alignment. MDN est la documentation de la plate-forme Web, nous pourrions donc contourner le problème des implémentations d'impression ou de toute autre implémentation de CSS, délimitant l'ensemble de fonctionnalités uniquement sur le Web.
Je ne suis pas convaincu qu'un CSS4, ou tout ce que nous choisissons de appeler une version de CSS, fera réellement une différence dans la perception de CSS en dehors d'une communauté relativement petite. Je ne pense pas non plus que cela aidera à résoudre les problèmes que rencontrent les développeurs Web pour convaincre leurs patrons et clients de mettre à niveau les navigateurs. Si Microsoft, qui fournit le logiciel, dit aux entreprises de mettre à niveau et que les entreprises ne mettent pas à niveau, je ne vois pas ce que la carotte de supporter CSS4 fera. Et je fais cela depuis longtemps et je sais que lorsque nous avions des versions de CSS, les gens ne mettaient toujours pas à jour leur navigateur. Cependant, je pense qu'il sera plus facile de parler d'un morceau particulier de fonctionnalités d'une manière moins abstraite, mais je pense que cela doit se produire en dehors du groupe de travail CSS et du processus de spécification, et être basé sur ce qui est utilisable comme
«Cependant, je dois convenir avec plusieurs autres que les principales versions marketing n'ont de sens que dans une situation de compatibilité. Si nous annonçons que CSS5 est enfin là, cela doit signifier que tous les principaux navigateurs ont une prise en charge complète ou quasi complète.
Sans cette condition de compatibilité remplie, je pense que certains développeurs seront cyniques et reviendront à la pensée basée sur les fonctionnalités ou les modules, la statu quo actuel. "
Qu'en pensez-vous?
Je voulais amener la discussion à Smashing Magazine car je pense que beaucoup de nos lecteurs n'auront pas remarqué cette discussion. Je serais intéressé par ce que vous en pensez. Y a-t-il des façons dont la déclaration d'une version de CSS vous aiderait, que je n'ai pas mentionnées ici? Est-ce que vérifier pour voir ce qu'il y avait dans cette version serait quelque chose que vous feriez, ou seriez-vous plus enclin à vérifier Can I Use ou MDN pour savoir ce qui est pris en charge? Pensez-vous que le développeur Web moyen se soucie de ces choses? Faites-le-nous savoir dans les commentaires, postez-le dans le numéro d'origine ou rejoignez le nouveau groupe communautaire créé pour en discuter.

Source link