Niveau Niveau confirmé

Découverte du framework CSS KNACSS

Tutorielcss

Publié par le , mis à jour le (76391 lectures)

css outil framework responsive knacss

Présentation et prise en main

KNACSS, un "framework CSS" ?

KNACSS est une feuille de styles CSS de base pour débuter ses projets d'intégration web, conçue par Raphaël Goetter et Alsacréations. Concentré de bonnes pratiques, de conventions de nommage, d'astuces et de bouts de code réutilisables, KNACSS peut être considéré comme un véritable mini "framework CSS".

KNACSS

Attention, la plupart des techniques présentes dans KNACSS nécessitent un niveau de compétence minimal en CSS pour être exploitées au meilleur de leurs possibilités. Il est par exemple conseillé d'être à l'aise avec les bases générales et connaître les différents positionnements classiques (float, clear, position, inline-block, etc.). En clair, ce n'est pas un outil adapté aux débutants complets.

Voici une liste non exhaustive des fonctionnalités que l'on trouvera dans KNACSS :

  • un reset CSS
  • des classes réutilisables
  • des snippets CSS
  • des aides au positionnement
  • du positionnement avancé (FlexBox)
  • des grilles simples et des gouttières
  • du Responsive webdesign
  • des classes pour les tableaux
  • des classes pour les formulaires
  • une version LESS
  • une version Sass

Pour se distinguer des gros frameworks multitâches tels que Twitter Bootstrap, 960gs ou Blueprint, KNACSS (qui pèse moins de 5 Ko minifié) ne vous propose pas de plugins JavaScript, ni de designs et d'enrobages prédéfinis… cela vous évite de devoir vous compliquer la vie à les écraser au début de chaque projet :)

Pour vous faire une première idée du code utilisé, n'hésitez pas à consulter dès à présent la documentation de KNACSS.

Installation

La version courte est "il n'y a rien à installer".
 
Selon votre environnement de travail vous suffit de récupérer la feuille de styles :
Les versions LESS et Sass seront bien évidemment plus malléables grâce à l'apport de variables et fonctions.
 
À noter que KNACSS est basé sur un socle Normalize.css, célèbre - et éprouvé - reset CSS employé par Twitter, Github, Bootstrap, Guardian, etc.

Usage

Il suffit de placer un appel vers la feuille de style unique KNACSS au sein de votre section <head> avec une balise <link>.

<link rel="stylesheet" href="knacss.css">

Il est également possible de se servir de Bower pour installer KNACSS, à l'aide de l'instruction bower install knacss. Cela permettra d'obtenir automatiquement la dernière version de l'outil.

Passons à présent à la première étape de notre découverte...

Commentaires

Merci pour cet outil que j'utilise au quotidien !

Dans mon "fork" de KNACSS, j'enlève l'enrobage du body (background-color, color et font-family) et je rajoute la ligne .txtjustify { text-align: justify; }

Et une question : Pourquoi avoir attribué un font-weight : normal sur les balises de titrage ?

@benjaminzanatta : " j'enlève l'enrobage du body (background-color, color et font-family) "
Ce n'est pas conseillé car ces valeurs sont laissées à la discrétion du navigateur. Même si tous les navigateurs appliquent actuellement un texte noir sur fond blanc, rien ne les y oblige et tu peux potentiellement avoir d'autres valeurs qui pourraient être complètement inaccessibles.

"Et une question : Pourquoi avoir attribué un font-weight : normal sur les balises de titrage ?" -> c'est une bonne question. J'y avais trouvé une utilité, mais je vais y re-réfléchir :)

KNACSS est vraiment un outil génial.
Ce que j'apprécie c'est le coté pratique et bien pensé de ce framework CSS.
Il permet de construire des sites très stables et très facilement.
Personnellement je place un appel vers la feuille de style knacss.css puis un second appel vers ma feuille de style personnalisée styles.css
Très sympas aussi ces petits clins d’œil à l'Alsace ... KNACSS, SCHNAPS.IT

@Vincent_ : "Personnellement je place un appel vers la feuille de style knacss.css puis un second appel vers ma feuille de style personnalisée styles.css"

ça fonctionne mais ce n'est pas forcément la meilleure méthode. Pour commencer, cela te fait 2 fichiers CSS donc 2 requêtes HTTP, ensuite avec ta CSS perso tu risques d'écraser des styles de KNACSS.css tout simplement parce que tes styles sont déclarés après.
En général cela ne pose pas de problème, mais on ne sait jamais...

Comme vincent, je comprends pas trop.... Tu conseilles donc de n'avoir qu'une feuille de style, celle de Knacss, et d'ajouter ce qu'on a besoin dedans pour notre design? (couleur, image, background, etc)

Comme déjà dit sur G+, j'aimerais beaucoup un tuto sur un exemple concert, une page à réaliser du début à la fin. Ceci me permettrait, je pense, de comprendre ce qui m'échappe encore.

@dimdes : Effectivement, pour des raisons de performance et pour éviter d'écraser des styles, il est préférable de n'avoir qu'une seule feuille de style en production.

Cela ne t'empêche pas, *en développement*, d'avoir 2 feuilles de styles : knacss.css et ta feuille .css perso que tu inclues au bon endroit avec un @import.

Réaliser un tuto sur une page entière demande beaucoup de travail, mais j'y pense.

Beaucoup de travail? .. déjà que je me demande parfois comment vous faites pour ne pas avoir besoin de plus de 24h par jours ;-)
Knacss en soi t'a probablement pris déjà énormément de temps, j'admire votre équipe pour ça!!

@22px : c'est simple, il faut être sûr que les styles prennent assez de poids pour écraser l'existant... que l'on ne connaît malheureusement pas forcément :/

Imaginons que tu utilises 2 feuilles de styles :
- knacss.css
- tonstyle.css

Dans tonstyle.css, tu dis à un div qu'il a la class="small-row w800p".
Il est probable que tes styles écrasent knacss.css, donc ton .w800p risque d'être prioritaire sur la valeur width:100% de .small-row s'il n'y a pas de !important sur ce dernier.

C'est aussi pour cela qu'il vaut mieux insérer tes styles au bon endroit prévu à l'intérieur de knacss.css

Pour le reset et les préprocesseurs : ok, on met tout à zero, on centralise et optimise la construction du code.

Par contre, je ne comprend pas trop la démarche d'utiliser des noms de classe "voulant dire quelque chose". J'ai toujours appris qu'il fallait donner un nom neutre aux id/classes et éviter de mettre des indications sur le style dans les noms. Exemple : si l'on a un a.vert et que subitement, on veut passer tous les liens verts en rouge, le code ne va plus avoir de sens (pour un humain) et il faudra repasser sur tous les endroits du code où l'on a mis cette classe. Au final, on style de nouveau dans le code HTML, ce qui nous ramène au bon vieux temps des bgcolor, font-face etc...

En essayant de comprendre Knacss, j'apprends des choses basiques, que je devrais connaître depuis longtemps. ..... et ça me fout aussi plein de doute sur mes compétences :-)
Je ne savais pas qu'on pouvait avoir des classes avec plusieurs mots telles que class="w80 center txtright mtl"
Si j'ai bien compris il y a en fait "4" classes décrites dans le CSS?
On m'a toujours appris à faire class="unMot" ..... et même sur les tutoriaux biens connus du web francophone, je n'ai jamais vu autres choses (tant mieux si je me trompe).

Dans ce cas il faut se précipiter pour les utiliser. C'est très pratique (pas seulement pour knacss), et c'est compris par tous les navigateurs. Seul IE6 posait quelques difficultés quant aux sélecteurs employables dans le cadre de classes multiples.

@dimdes : en fait, ce n'est pas une classe avec des espaces, mais plusieurs classes séparées par des espaces. Et effectivement, ça offre des possibilités énormes. En ajoutant plusieurs classes, tu peux par exemple créer une classe avec des propriétés basiques et les appliquer à un élément qui est déjà stylé avec une autre classe.

@Raphael : désolé je n'avais pas consulté ce lien. C'est une approche intéressante, je vais encore y réfléchir mais ce qui est sûr : c'est une mauvaise idée dans le cas où la classe est susceptible d'être utilisées des dizaines, centaines de fois voir plus, comme par exemple un span avec une couleur que l'utilisateur ajoute dans le code via son wysiwyg.

Autre chose : faire en sorte d'avoir des multiples de 10 pour les tailles en em me semble intéressant, par contre, mettre 62.5% en font-size sur le body me gêne un peut car, comme tu le dis c'est "sur la très grande majorité des navigateurs" que le body est à 16px par défaut. Plus haut dans les commentaires, tu réponds à quelqu'un en lui disant que son idée est mauvaise car les navigateurs affichent par défaut le texte en blanc sur noir mais rien ne les empêche, un jour, de modifier ce comportement. A mon avis, c'est pareil pour ce point là. Si un navigateur décide de changer la taille par défaut (ce qui est peu probable mais bon...) on risque d'avoir des problèmes. Ne vaudrait-il pas mieux mettre un font-size: 16px sur body et utiliser les em pour les tailles sur les autres conteneurs ?

Bonjour,

Je ne suis qu'au début de l’épluchage de la saucisse (pas facile avec un économe) et une première chose m'a interpellé.
Pourquoi utiliser des "em" plutôt que des "rem" ? Peut-être (voire surement) ai-je tord mais je croyais qu'utiliser le root em permettait d'éviter des soucis lors d'imbrication de style, ce qui peut arriver, non ?

@deejay-bee : " Ne vaudrait-il pas mieux mettre un font-size: 16px sur body et utiliser les em pour les tailles sur les autres conteneurs ?"

Non, il vaut mieux éviter pour des raisons d'accessibilité. En effet, IE6-IE8 ne permettent pas d'agrandir les polices en pixel en mode "zoom texte", même si body seulement a une police figée en pixel :
http://www.alsacreations.com/article/lire/569...

De plus, les unités fixes tels que les pixels deviennent de plus en plus alambiqués à manipuler dans un environnement où les périphériques (et leurs tailles et leurs résolutions) sont de plus en plus variés.

@Pacodellavega : "Pourquoi utiliser des "em" plutôt que des "rem" ?"

Les "rem", c'est tout simplement magique, tu as raison.
Mais il y a encore un gros hic : ils ne sont compatibles qu'à partir de IE9, donc c'est encore trop tôt pour pouvoir les employer en production.

http://caniuse.com/#search=rem

@raphael : Excellente initiative, merci.

Une question : si tu fais des mises à jour de ta feuille de style et si on souhaite en profiter, cela signifie-t-il qu'il faille uniquement garder un lien vers ta feuille de style et charger sa propre feuille de style après la tienne pour écraser ce que l'on désire modifier ?

@tibibou : non, il faut éviter de lier KNACSS directement sur le site.
Il vaut mieux télécharger la version souhaitée sur son serveur.

@Raphael : "tu inclues au bon endroit avec un @import."

Je croyais que le @import était à bannir car pas du tout performant ?

Bonjour et merci pour Knacss (que j'utilise pour la première fois en ce moment dans le cadre d'un projet).
Dites, avec KNACSS, on n'est pas dans une démarche mobile-first si je ne m'abuse.
Quelle est la position d'Alsacréations par rapport au mobile-first ?

Proposition de suppression à intégrer dans la prochaine release de Knacss
-webkit-box-sizing: border-box; /* Android ≤ 2.3, iOS ≤ 4 */
n'est peut-être plus nécessaire de l'embarquer

Problème avec la classe visually-hidden sur un élément en display:table-cell.
le left -7000px fait péter le positionnement des éléments.

par contre avec un positionnement vers le haut ceci ne pose pas de problème

.visually-hidden {

position: absolute;

left: 0;
top:- 10000px

overflow: hidden;
}

Bjr
Juste pour dire MERCI !
Je suis un parfait débutant, non pro, qui s'amuse en apprenant à la lecture de vos articles.
Vos explications sur Knacss m'ouvre des horizon pour personnaliser mes sites associatifs énormes.
C'est simplement génial
cdt

Knacss, une super initiative pour démarrer un projet et continuer à se perfectionner en analysant de bonnes pratiques ! Merci à Raphaël

Bonjour Raphaël,

Tout d'abord merci pour tout le travail réalisé. Dans la dernière version de Knacss, on a à la ligne 170 un text-decoration:none pour l'élément a puis à la ligne 439, un text-decoration:underline pour l'élément a.

Quelles sont les raisons d'avoir ces 2 déclarations ?

Merci