alsacreations / KNACSS

feuille de styles CSS sur-vitaminée
http://www.knacss.com
Do What The F*ck You Want To Public License
554 stars 116 forks source link

A propos des préfixes #55

Closed KittyGiraudel closed 10 years ago

KittyGiraudel commented 10 years ago

J'amène ce sujet sur le tapis parce que je pense qu'il y a une incohérence sur l'état actuel des choses. J'ai cru voir passer dans le changelog de KNACSS v3.0 que les préfixes constructeurs ont été retiré, afin de laisser Autoprefixer faire son boulot.

C'est là un débat que j'ai déjà eu avec les mainteneurs du projet Jeet.js. A partir du moment où on retire les préfixes sous prétexte que ce n'est pas le rôle du framework de faire ça, mais bien à une bibliothèque externe, on rend le projet dépendant de ladite bibliothèque.

En l'occurrence, si on considère que KNACSS n'a pas a assigner les préfixes parce qu'Autoprefixer fait ça très bien, on fait d'Autoprefixer une dépendance de KNACSS.

En soi, ce n'est pas forcément gênant. En fait, ça dépend vraiment de la portée de KNACSS là encore : si vous considérez que ce n'est qu'un outil dans le workflow d'Alsacréations alors j'imagine que faire d'Autoprefixer une dépendance n'est pas gênant ; après tout vous contrôlez le workflow. Maintenant si KNACSS a pour vocation d'être un framework CSS pour tout le monde, c'est selon moi une mauvaise idée que de ne pas générer les préfixes. Tout le monde n'utilise pas Autoprefixer.

Maintenant que le problème est soulevé, quelles sont les alternatives ? Il y en a plusieurs :

Nous avons vu les problématiques engendrées par la première approche. L'idée de mettre en place un booléen de configuration semble viable mais ça alourdit encore la configuration de KNACSS déjà chargée.

Sachant qu'Autoprefixer se moque qu'il y ait des préfixes ou non je le rappelle. Dans le cas où il y en a déjà, il les enlèvera pour les remettre (ou pas s'ils ne sont pas nécessaires).

Autrement dit, préfixer KNACSS ne se ferait pas au détriment d'Autoprefixer ; les deux peuvent fonctionner très bien ensemble, sans faire de ce dernier une dépendance du premier.

Je terminerai aussi sur le fait que la code base de KNACSS n'est pas non plus monstrueuse, et son utilisation de propriétés nécessitant d'être préfixées l'est encore moins. Si on a besoin d'une dizaine de lignes en tout et pour tout, c'est un grand maximum. Je ne suis pas sur que ça vaille le coup de les faire sauter, sachant les soucis que ça peut engendrer chez les utilisateurs n'intégrant pas Autopréfixer dans leur workflow.

My 2 cents. :)

raphaelgoetter commented 10 years ago

Un vaste débat également ;)

Voilà mon humble avis perso sur le sujet.

Il existe trois versions de KNACSS :

... et ces versions correspondent à deux types de publics :

J'estime que le public averti aux préprocesseurs l'est également sur d'autres outils courants de workflow, et dispose déjà d'outils qui de toute façon se chargent des préfixes, entre autre.

KittyGiraudel commented 10 years ago

J'estime que le public averti aux préprocesseurs l'est également sur d'autres outils courants de workflow, et dispose déjà d'outils qui de toute façon se chargent des préfixes, entre autre.

C'est une supposition bien hâtive. Au delà de ça, on peut être averti sans pour autant être utilisateur. Autoprefixer n'est pas un standard, et ne convient pas à tous les workflows.

raphaelgoetter commented 10 years ago

C'est aussi surtout parce qu'en terme d'allègement de code, et donc de lisibilité et de maintenabilité, la différence est flagrante.

EDIT : et au final, (autre supposition), je prévois que les préfixes vont disparaître un jour, donc autant s'y préparer dès aujourd'hui en écrivant du code propre et laisser faire le boulot aux outils dont c'est le boulot ;)

KittyGiraudel commented 10 years ago

Le framework est là pour faciliter la tâche aux développeurs qui l'utilisent, pas au développeur qui le maintient.

Je viens de repasser sur l'ensemble du projet, il y a 4 déclarations nécessitant des préfixes : text-size-adjust, filter, flexbox, et appearance. Je pense que côté maintenabilité, c'est jouable.

raphaelgoetter commented 10 years ago

Le framework est là pour faciliter la tâche aux développeurs qui l'utilisent, pas au développeur qui le maintient.

Oui, par "maintenabilité", je parlais bien de la maintenabilité du code pour les intégrateurs, leur équipe, leurs stagiaires, etc. : plus le code est court, simple et lisible, plus il est aisé de le maintenir au cours d'un projet.

Je rappelle que - contrairement aux usines à gaz telles que Bootstrap, Foundation et compagnie - KNACSS est volontairement léger et doit être adapté et enrichi par les intégrateurs. On ne le laisse pas tel quel normalement.

KittyGiraudel commented 10 years ago

Ce que je vois, c'est qu'un utilisateur de KNACSS qui a le malheur de ne pas intégrer Autoprefixer dans son workflow va devoir faire ça dans une de ses feuilles de styles :

/* KNACSS fix */
html {
  -webkit-text-size-adjust: 100%;
  -ms-text-size-adjust: 100%;
}

@media print {
  img {
    -webkit-filter: grayscale(100%);
    -moz-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
    -o-grayscale(100%);
  }
}

.flex {
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
}

.flex-fluid {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
}

.flex-mid {
  -webkit-box-ordinal-group: 1;  
  -moz-box-ordinal-group: 1;     
  -ms-flex-order: 1;     
  -webkit-order: 1;  
  order: 1;
}

.flex-start {
  -webkit-box-ordinal-group: -1;  
  -moz-box-ordinal-group: -1;     
  -ms-flex-order: -1;     
  -webkit-order: -1;  
  order: -1;
}

.flex-mid {
  -webkit-box-ordinal-group: 1;  
  -moz-box-ordinal-group: 1;     
  -ms-flex-order: 1;     
  -webkit-order: 1;  
  order: 1;
}

.flex-end {
  -webkit-box-ordinal-group: 42;  
  -moz-box-ordinal-group: 42;     
  -ms-flex-order: 42;     
  -webkit-order: 42;  
  order: 42;
}

Et là, tu te dis que le mainteneur aurait quand même pu s'occuper de faire ça, parce que c'est aussi le rôle du framework que d'épargner ça au développeur.

raphaelgoetter commented 10 years ago

Ce que je vois, c'est qu'un utilisateur de KNACSS [...]

L'utilisateur de KNACSS version préprocesseurs, oui. Pas l'utilisateur novice qui utilise KNACSS en version CSS.

KittyGiraudel commented 10 years ago

L'utilisateur de KNACSS version préprocesseurs, oui.

Tu pars du principe qu'un mec qui utilise LESS ou Sass va forcément utiliser Autoprefixer. Où as-tu été chercher cette idée ?

raphaelgoetter commented 10 years ago

Pas forcément Autoprefixer, mais tous les autres très nombreux outils qu'on a a disposition pour préfixer (ça peut aussi être Grunt, Brunch, Gulp, Prepros, etc.).

PhilippeVay commented 10 years ago

Je suis OK avec la décision de devoir utiliser Autoprefixer si on utilise une version préprocesseur de KNACSS (LESS en tout cas) mais ce qui me dérange malgré tout c'est que je n'ai aucune idée de ce que fait ce plugin et comment le configurer (la responsabilité m'en revient ceci dit ; n'ayant pas creusé ce que faisait Prepros), comment je pourrais ré-obtenir exactement la même chose que la version CSS à partir de la version LESS (edit: s/CSS/LESS) parce que la méthode exacte n'est documentée nulle part. Le fait qu'il faille ajouter les préfixes qui vont bien n'est évoqué que dans le tutoriel, pas ici sur GitHub ni sur la page d'accueil de knacss.com ni sur la page du builder … et sans plus de détail donc … mais c'est peut-être une autre Issue que celle-ci ?

KittyGiraudel commented 10 years ago

Donc du coup ? Tu as tranché là dessus Raphaël ?

raphaelgoetter commented 10 years ago

Le fait qu'il faille ajouter les préfixes qui vont bien n'est évoqué que dans le tutoriel, pas ici sur GitHub ni sur la page d'accueil de knacss.com ni sur la page du builder … et sans plus de détail donc

Corrigé, c'est précisé aussi sur la page Github

Donc du coup ? Tu as tranché là dessus Raphaël ?

Oui tranché. Pas de préfixes sur les versions pré-processées. Uniquement sur les versions CSS classiques

KittyGiraudel commented 10 years ago

Il reste des préfixes : https://github.com/raphaelgoetter/KNACSS/blob/master/sass/01-base.scss#L55.

raphaelgoetter commented 10 years ago

Oui, c'est ceux où je ne suis pas sûr que des outils comme Autoprefixer les prenne en charge.

Il me semble que text-size-adjust est propriétaire, non ?

EDIT : oui c'est propriétaire : https://developer.mozilla.org/en-US/docs/Web/CSS/text-size-adjust