RÖCSSTI : le micro-framework pour démarrer vos CSS avec la patate !

Présentation d'un « micro-framework » CSS

RÖCSSTI – prononcez Rochti – est ma petite base de départ en matière de CSS. Le nom – volontairement ridicule – est un clin d'oeil amical à KNACSS, un excellent micro-framework CSS de Raphaël Goetter, dont RÖCSSTI reprend des éléments, réaccomodés à ma façon pour répondre à mes besoins et mes habitudes au boulot.

Les röstis ont donné leur nom à la « barrière de rösti » ou Röstigraben (littéralement « fossé de rösti ») qui marquerait la différence de mentalité entre la Suisse romande et la Suisse alémanique. On parle notamment du röstigraben quand une votation fédérale obtient dans la région francophone des résultats très différents de la région germanophone. Si vous n'avez rien compris, regardez la leçon de géographie Suisse, par Marie-Thérèse Porchet.

Je m'égare. L’idée est la suivante :

  • Avoir une organisation de travail (via une méthode de rangement et une convention de nommage) ;
  • Penser une bonne base de départ, incluant quelques éléments d'accessibilité, comme les liens d'évitement, afin d'être sûr de ne pas les oublier ;
  • Permettre une approche allant toujours du plus global au plus particulier, ce qui permet de tirer un avantage maximal de la cascade CSS ;
  • Avoir un système de classes réutilisables et favorisant une approche DRY ;
  • Avoir de petites astuces pratiques et sympathiques qui améliorent la conception et l'utilisation d'un site ;
  • Bref, avoir un socle robuste et éprouvé par des réalisations en milieu professionnel qui l'utilisent et le nourrissent.

Le code est commenté, il doit se suffire à lui-même pour le comprendre. Si vous avez du mal à comprendre les notations, n'hésitez pas à me demander.

Disclaimer : Cette base n'a PAS pour but d'être parfaite, exhaustive ou de répondre à tous les cas de figure ! RÖCSSTI est juste une base volontairement minimaliste pour démarrer en gagnant du temps, et s'adresse à des personnes qui connaissent CSS. Je l'ai créée surtout parce que les frameworks CSS sont souvent trop lourds, trop riches et trop compliqués pour mes besoins (sur mesure) au travail. Un point important cependant : c'est livré tel quel, sans garantie, article 22 !

Si vous doutez du côté pratique, cette base CSS sera enrichie au fil des projets réels que je réaliserai avec. Pour information, mon job actuel m'a permis de faire 53 réalisations dans des styles très différents avec RÖCSSTI, cela va de sites relativement simples à des sites plus complexes en responsive. Le gain de temps au démarrage du projet ainsi que la réutilisabilité du code sont réelles et perceptibles.

Si vous avez des retours, des corrections ou des idées géniales, n’hésitez pas à m'en faire part : dante3333@gmail.com ou directement sur la page contact de mon site personnel (ou sur Github si vous préférez).

Cette page utilise Prism pour la mise en forme du code CSS, légèrement amélioré pour l'occasion au point de vue des contrastes.

À propos de RÖCSSTI, téléchargement

RÖCSSTI est sur Github ! (et tenu à jour, la CSS de RÖCSSTI existe aussi en anglais)

Côté préprocesseurs :

Vous pouvez télécharger la CSS de RÖCSSTI (environ 13 ko) (pour indication, la CSS pèse 2 ko minifiée et gzippée).

RÖCSSTI a un mode « safe for work », également appelé mode « pas d'humour » : les commentaires sont transformés en remarques plus passe-partout.

Télécharger la CSS de RÖCSSTI en mode « safe for work »

Dernières mises à jour (23 Septembre 2014)

  • Media-queries en em
  • Ajout suggestion de box-sizing
  • Ajout du tag svg pour éviter les dépassements
  • Refactoring ok sur toutes les versions Sass !
  • Ajout classes .bl et .mod--hidden
  • Ajout d’une classe d’état basée sur ARIA
  • Ajout d'un fix pour IE9/11 sur html
  • Ajout classe .hardware-accelerated pour accélération matérielle

Conventions de nommage

  • Indentation : 2 espaces pour les propriétés
  • Interdiction d'utiliser !important, ç'ai mal !
  • Utilisation des pourcentages autant que possible
  • Écriture des propriétés ainsi :
    • Sur une ligne (1 ou 2 propriétés max) : p { margin: 0 0 1em; }
    • Sur plusieurs lignes
      h1, 
      .h1 {
        font-size: 1.8571em;
        /* etc. */
      }
  • Utilisation des minuscules pour les valeurs hexadécimales, exemple : #efe
  • Utilisation des notations compactes, exemple : margin: .5em;
  • Pour toute valeur nulle, pas d'unité quand c'est autorisé, exemple : margin: 0;
  • Nommage des propriétés CSS par ordre alphabétique, quand c'est possible.

Code CSS de RÖCSSTI

Activer le mode « safe for work » pour RÖCSSTI » : enlève toute trace d'humour dans les commentaires, afin de prouver que vous êtes sérieux (et un peu triste) dans votre travail.
Idée de jeu : vous pouvez chercher les différences.


   @charset "UTF-8";
/* UTF-8 déclaré avant toute chose */

/******************************************************************
 * ROCSSTI : une base CSS par Nicolas Hoffmann http://rocssti.nicolas-hoffmann.net/
 * inspiré par http://www.knacss.com/
 *
 * ROCSSTI est sous licence CC-BY : http://creativecommons.org/licenses/by/3.0/fr/
 * 
 * cette CSS est fournie telle quelle, sans aucune garantie d'aucun type, 
 * l'auteur ne saurait être tenu responsable de quoi que ce soit pour 
 * l'utilisation de RÖCSSTI.
 *
 * convention (à adapter si besoin)
 *  .parent
 *  .parent__enfant
 *  .parent--modifieur  
 * 
 * RTL = Right To Left => 
 * pour adapter un site dans une langue qui se lit de droite à gauche
 * prévu surtout pour sites multilingues avec LTR et RTL
 *
 * 
 * résumé
 * 01 -- reset
 * 02 -- ainsi font font font + structure Hx
 * 03 -- classes utilitaires + fix typos + styles "balises fixes"
 * 04 -- liens + icônes
 * 05 -- layout et modules
 * 06 -- structure (page / skip links / header / main content / footer)
 * 07 -- forms
 * 08 -- dans le contenu
 * 09 -- breakpoints mineurs entre desktop et tablettes
 * 10 -- homo tablettes - breakpoint majeur
 * 11 -- breakpoints mineurs entre tablettes et mobile
 * 12 -- mobile - breakpoint majeur
 * 13 -- breakpoints mineurs tout petit mobile
 * 14 -- print
 * 15 -- fix viewport 
 * 16 -- règles d'état
 * 17 -- bonus : Fixes IE
 */




/*
 *****************************************************************
 * 1 -- reset
 *****************************************************************
 */

/* spécial HTML 5 */
article, aside, audio, canvas, datagrid, datalist, details, dialog, figure, footer, header, main, menu, nav, section, video { display: block; }
abbr, eventsource, mark, meter, time, progress, output, bb { display: inline; }

/* si vous vous foutez d'IE<8 */
/*html { box-sizing: border-box; }
*, *:before, *:after {
  box-sizing: inherit;
}*/

/* reset minimum */
html, body, blockquote, ul, ol, form, button { margin: 0; padding: 0; }
button { border: 0; }
p, ul, ol, dl, blockquote, pre, td, th, label, textarea {
  font-size: 1em; /* equiv 14px */
  line-height: 1.5;
  margin: 1.5em 0;
}

/* fix display img/iframe */
img,
iframe { vertical-align: middle; }

ul, ol { padding-left: 2em; }

/* RTL */
[dir="rtl"] ul, 
[dir="rtl"] ol { 
  padding-left: 0; 
  padding-right: 2em;
}


/* la base correspond à 10px */
html { 
  font-size: 62.5%;
  /* IE9-IE11 math fixing. Voir http://bit.ly/1g4X0bX */
  /* Merci à @guardian, @victorbritopro, @eQRoeil & Knacss */
  font-size: calc(1em * 0.625);
}
body {
  background: #fff;
  color: #333;
  font-family: Arial, helvetica, sans-serif;
  font-size: 1.4em; /* taille de base équiv à 14px */
  line-height: 1.5; /* à corriger si besoin est */
}




/*
 *****************************************************************
 * 02 -- ainsi font font font + structure Hx
 *****************************************************************
 */ 

/*@font-face {

}*/

/* calculées via http://soqr.fr/vertical-rhythm/ merci @goetter & @eQRoeil */

h1,
.h1 {
  display: block;
  font-size:  1.8571em; /* equiv 26px */
  line-height: 1.6154;
  margin: 1.6154em 0 .8077em 0;
}
h2,
.h2 {
  display: block;
  font-size: 1.7143em; /* equiv 24px */
  line-height: 1.75;
  margin: 1.75em 0 .875em 0;
}
h3,
.h3 {
  display: block;
  font-size: 1.5714em; /* equiv 22px */
  line-height: 1.909;
  margin: 1.909em 0 .9545em 0;
}
h4,
.h4 {
  display: block;
  font-size: 1.4286em; /* equiv 20px */
  line-height: 1.05;
  margin: 2.1em 0 1.05em 0;
}
h5,
.h5 {
  display: block;
  font-size: 1.2857em; /* equiv 18px */
  line-height: 1.1667;
  margin: 2.3334em 0 1.1667em 0;
}
h6,
.h6 {
  display: block;
  font-size: 1.1429em; /* equiv 16px */
  line-height: 1.3125;
  margin: 2.625em 0 1.3125em 0;
}

.uppercase {
  text-transform: uppercase;
}

/* autres classes utiles */
.smaller {
  font-size: .7143em; /* equiv 10px */
  line-height: 2.1;
  margin: 2.1em 0;
}
.small {
  font-size: .8571em; /* equiv 12px */
  line-height: 1.75;
  margin: 1.75em 0;
}
.big {
  font-size: 1.1429em; /* equiv 16px */
  line-height: 1.3125;
  margin: 1.3125em 0;
}
.bigger {
  font-size: 1.2857em; /* equiv 18px */
  line-height: 1.1667;
  margin: 1.1667em 0;
}
.biggest {
  font-size: 1.4286em; /* equiv 20px */
  line-height: 1.05;
  margin: 1.05em 0;
}




/*
 *****************************************************************
 * 03 -- classes utilitaires + fix typos + styles "balises fixes"
 *****************************************************************
 */

.noborder,
iframe { border: 0; }

table {
  table-layout: fixed;
}

/*
 * repris de http://tinytypo.tetue.net/ de @tetue
 * tuné avec l'aide de http://www.nicolas-hoffmann.net/utilitaires/codes-hexas-ascii-unicode-utf8-caracteres-usuels.php
 *
 * voir http://en.wikipedia.org/wiki/International_variation_in_quotation_marks pour les références
 */
q {
  quotes: "\201C" "\201D" "\2018" "\2019";
}
:lang(fr) > q {
  quotes: "\00AB\A0" "\A0\00BB" "\201C" "\201D" "\2018" "\2019";
}
:lang(en) > q {
  quotes: "\201C" "\201D" "\2018" "\2019";
}
:lang(es) > q {
  quotes: "\00AB" "\00BB" "\201C" "\201D";
}
:lang(it) > q {
  quotes: "\00AB\A0" "\A0\00BB" "\201C" "\201D";
}
:lang(de) > q {
  quotes: "\201e" "\201c" "\201a" "\2018";
}
q:before {
  content: open-quote;
}
q:after {
  content: close-quote;
}

/* éviter interlignage disgracieux */
sup,
sub {
  vertical-align: 0;
  position: relative;
}
sup {
  bottom: 1ex;
}
sub {
  top: .5ex;
}

/* éviter problèmes de margin */
h1:first-child,.h1:first-child,
h2:first-child,.h2:first-child,
h3:first-child,.h3:first-child,
h4:first-child,.h4:first-child,
h5:first-child,.h5:first-child,
h6:first-child,.h6:first-child {
  margin-top: 0;
}
/* virer marge basse sur dernier enfant */
p:last-child,
ul:last-child,
ol:last-child,
dl:last-child,
blockquote:last-child,
pre:last-child,
table:last-child {
  margin-bottom: 0;
}

/* éviter marges supplémentaires sur éléments imbriqués */
li p,
li ul {
  margin-bottom: 0;
  margin-top: 0;
}
/* Vous ne passerez PAS (Gandalf) */
textarea,
table,
td,
th,
code,
pre,
samp,
div,
p,
.cut {
  word-wrap: break-word;
  -webkit-hyphens: auto;
  -moz-hyphens: auto;
  -ms-hyphens: auto;
  -o-hyphens: auto;
  hyphens: auto;
}
/* pour supprimer la césure si besoin */
.nocut {
  word-wrap: normal;
  -webkit-hyphens: none;
  -moz-hyphens: none;
  -ms-hyphens: none;
  -o-hyphens: none;
  hyphens: none;
}

code,
pre,
samp {
  white-space: pre-wrap;
}
code {
  line-height: 1;
}
kbd {
  border: solid 1px;
  border-top-left-radius: .5em;
  border-top-right-radius: .5em;
  padding: 0 .25em;
}
table {
  margin-bottom: 1.5em;
}
/* j'y tiens, les abbr c'est bon pour la planète */
/* seuls ceux ayant un title sont signalés */
abbr[title] {
  border-bottom: dotted 1px; 
  cursor: help;
  /* couleur héritée du texte */
} 

/* alignements de textes */
.alignright  { text-align: right; }
.aligncenter { text-align: center; }
.alignleft   { text-align: left; }
.aligntop    { vertical-align: top; }
.alignbottom { vertical-align: bottom; }
.alignmiddle { vertical-align: middle; }

/* RTL */
[dir="rtl"] .alignright  { text-align: left; }
[dir="rtl"] .alignleft   { text-align: right; }





/*
 *****************************************************************
 * 04 -- liens + icônes
 *****************************************************************
 */

/* Liens */
a {
  color: #2573be;
  cursor: pointer;
}
/* penser au focus */
a:focus,
a:hover,
a:active {
  color: #000;
}
/* éviter la bordure sur une image comprise dans un lien + fix bordure image IE */
a:link img,
a:visited img, 
img {
  border-style: none;
}

/* liens avec icônes, on peut utiliser les DATA-URI */

/* pour signaler liens externes */
/*a[href^="http://"],
a[href^="https://"] {

}*/
/* si URL complète sur un lien interne, virer signalement liens externes */
/*a[href^="http://www.mondomaine.com"] {

}*/
/* contact, liens mailto */
/*.mail,
a[href^="mailto:"] {

}*/
/* dont l'URL se termine par .pdf ou ce que vous voulez comme extension */
/*a[href$=".pdf"] {

}*/

/* facto icons */
/*[class*=icon-30] {
display: inline-block;
width: 30px;
height: 30px;
}*/





/*
 *****************************************************************
 * 05 -- layout et modules
 *****************************************************************
 */

/* ça dépend, ça dépasse */
img,
table,
td,
blockquote,
code,
pre,
textarea,
input,
svg {
  height: auto;
  max-width: 100%;
}
/* pas de reset sur embed, object et video, ça fait foirer certains players */

/* utile pour gérer les floattants */
/* contient des floats */
.mod { 
  overflow: auto;
}
.mod--hidden { 
  overflow: hidden;
}

/* quelques floattants */
.left {
  float: left;
}
.right {
  float: right;
}


/* clearer les floats */
.clear {
  clear: both;
}
.clearleft {
  clear: left;
}
.clearright {
  clear: right;
}
.clearhidden {
  clear: both;
  margin: 0;
  padding: 0;
  visibility: hidden;
}
.clearfix:after {
  content: ".";
  display: block;
  height: 0;
  clear: both;
  visibility: hidden;
}

/* RTL */
[dir="rtl"] .left {
  float: right;
}
[dir="rtl"] .right {
  float: left;
}

[dir="rtl"] .clearleft {
  clear: right;
}
[dir="rtl"] .clearright {
  clear: left;
}


/* gouttière */
.gut {
  height: 1px;
}

/* gestion du table-design en CSS */
.row {
  display: table;
  table-layout: fixed;
}
.col {
  display: table-cell;
  vertical-align: top;
}
.col-noalign {
  display: table-cell;
}


/* block */
.bl {
  display: block;
}

/* inline-block, utile pour les grilles et pas seulement */
.inbl,
.grid {
  display: inline-block;
}

/* grid = élément d'une inline-grid */
.grid {
  vertical-align: top;
}

/* pour relativiser */
.relative {
  position: relative;
}

/* bloc centré */
.center {
  margin-left: auto;
  margin-right: auto;
}

/* activation de l'accélération matérielle */
.hardware-accelerated {
  -webkit-transform: translateZ(0);
  -moz-transform: translateZ(0);
  -ms-transform: translateZ(0);
  -o-transform: translateZ(0);
  transform: translateZ(0);
}


/* largeurs de blocks */
.w1   { width: 1%; }
.w2   { width: 2%; }
.w3   { width: 3%; }
.w5   { width: 5%; }
.w10  { width: 10%; }
.w20  { width: 20%; }
.w25  { width: 25%; }
.w30  { width: 30%; }
.w33  { width: 33.333%; }
.w40  { width: 40%; }
.w45  { width: 45%; }
.w49  { width: 49%; }
.w50  { width: 50%; }
.w60  { width: 60%; }
.w66  { width: 66.666%; }
.w70  { width: 70%; }
.w75  { width: 75%; }
.w80  { width: 80%; }
.w90  { width: 90%; }
.w100 { width: 100%; }

/* ici ajouter les largeurs en em */
/*.w960e { width: 60em; }*/

/* ici ajouter les largeurs en pixels */
/*.w500p { width: 500px; }*/

/* ici ajouter les largeurs max en em */
/*.mw960e { max-width: 60em; }*/

/* ici ajouter les largeurs max en pixels */
/*.mw960p { max-width: 960px; }*/

/* margins */
.mt0 { margin-top: 0; }
.mt1 { margin-top: 1em; }
.mt2 { margin-top: 2em; }
.mr0 { margin-right: 0; }
.mr1 { margin-right: 1em; }
.mr2 { margin-right: 2em; }
.mb0 { margin-bottom: 0; }
.mb1 { margin-bottom: 1em; }
.mb2 { margin-bottom: 2em; }
.ml0 { margin-left: 0; }
.ml1 { margin-left: 1em; }
.ml2 { margin-left: 2em; }
.m0  { margin: 0; }
.m1  { margin: 1em; }
.m2  { margin: 2em; }

/* RTL = attention, utiliser avec précaution */
[dir="rtl"] .mr0 { margin-left: 0; }
[dir="rtl"] .mr1 { margin-right: inherit; margin-left: 1em; }
[dir="rtl"] .mr2 { margin-right: inherit; margin-left: 2em; }
[dir="rtl"] .ml0 { margin-right: 0; }
[dir="rtl"] .ml1 { margin-left: inherit; margin-right: 1em; }
[dir="rtl"] .ml2 { margin-left: inherit; margin-right: 2em; }

/* paddings */
.pt0 { padding-top: 0; }
.pt1 { padding-top: 1em; }
.pt2 { padding-top: 2em; }
.pr0 { padding-right: 0; }
.pr1 { padding-right: 1em; }
.pr2 { padding-right: 2em; }
.pb0 { padding-bottom: 0; }
.pb1 { padding-bottom: 1em; }
.pb2 { padding-bottom: 2em; }
.pl0 { padding-left: 0; }
.pl1 { padding-left: 1em; }
.pl2 { padding-left: 2em; }
.p0  { padding: 0; }
.p1  { padding: 1em; }
.p2  { padding: 2em; }

/* RTL = attention, utiliser avec précaution */
[dir="rtl"] .pr0 { padding-left: 0; }
[dir="rtl"] .pr1 { padding-right: 0; padding-left: 1em; }
[dir="rtl"] .pr2 { padding-right: 0; padding-left: 2em; }
[dir="rtl"] .pl0 { padding-right: 0; }
[dir="rtl"] .pl1 { padding-left: 0; padding-right: 1em; }
[dir="rtl"] .pl2 { padding-left: 0; padding-right: 2em; }

/* spécial hr de 1px de haut */
hr {
  background-color: #000;
  border: 0;
  color: #000;
  height: 1px;
  margin: 0 0 1em;
  padding: 0;
}

/* pour cacher du texte de manière accessible… toussââââ */
.invisible {
  border: 0;
  clip: rect(0 0 0 0);
  height: 1px;
  margin: -1px;
  overflow: hidden;
  padding: 0;
  position: absolute;
  width: 1px;
}

.hidden    { display: none; } /* caché partout */
.nodesktop { display: none; } /* caché sur desktop */
.noprint   {} /* caché sur print */
.notablet  {} /* caché sur tablettes */
.nomobile  {} /* caché sur mobile */




/*
 *****************************************************************
 * 06 -- structure globale 
 *      (page / skip links / header / contenu principal / footer)
 *****************************************************************
 */

/* === page === */
#page {
  margin: 0 auto;
  position: relative;
  width: 960px;
}

/* === skip links = liens d'évitement === */
.skip {

}
/* skip__link = un lien d'évitement  */
/* idéalement mettez-les visibles pas uniquement au focus */
.skip__link {

}
/* sinon pensez à les rendre visibles au focus */
.skip__link:focus,
.skip__link:hover,
.skip__link:active {

}



/* === header === */
.header {

}
.logo {

}
.navigation {

}


/* === contenu principal === */
.main {

}


/* === footer === */
.footer {

}

/* Réseaux Sociaux À La Con : trucs inutiles de partage… souvent dans footer */
.rsalc {

}




/*
 *****************************************************************
 * 07 -- forms
 *****************************************************************
 */

/* donne envie de cliquer sur un bouton */
label,
button,
input[type="submit"],
input[type="button"],
input[type="reset"] {
  cursor: pointer;
}

/* évite un resize potentiellement foireux */
textarea {
  resize: vertical;
}

label,
button,
input,
select {
  vertical-align: middle;
}

/* à adapter selon le design voulu */
input,
select,
textarea {
  border: 1px solid #000;
  border-radius: 5px;
  padding: .5em;
  width: 250px;
  /** fix typo inputs **/
  font-family: inherit;
  font-size: 1em;
}

/* pour les textes des champs */
.label {
  display: inline-block;
}

/* à adapter selon le design voulu */
.button {
  background: #fff;
  border-radius: 5px;
  -webkit-box-shadow: 1px 1px 1px #ddd; 
  box-shadow: 1px 1px 1px #ddd; 
  color: #000;
}

/* 
 * évite dimensionnement des radios, checkboxes et images
 * et un affichage différent sous IE 
 */
input[type="radio"],
input[type="checkbox"],
input[type="image"] {
  background-color: transparent;
  border: 0;
  width: auto;
}

/* pour annuler la taille des inputs ou autres */
.auto {
  width: auto;
}

/* messages d'erreur ou de confirmation */
.alert,
.alert input,
.alert textarea,
.alert select {
  color: #bf0000;
  font-weight: bold;
}
/* .redborder sert à débugger uniquement */
.alert input,
.alert textarea,
.alert select,
.redborder {
  border: 1px solid #bf0000;
}
.alert img {
  border: 0;
}
.ok {

}

/* 
 * peut être complété par les attributs HTML5 required
 * exemple avec une couleur, penser à ne pas uniquement transmettre l'info ainsi
 */
select:required:invalid,
input:required:invalid,
input:focus:invalid,
textarea:required:invalid,
textarea:focus:invalid {
  background: #fef6f6;
  -moz-box-shadow: none;
}

input:focus:required:valid,
textarea:focus:required:valid,
select:focus:required:valid {
  background: #efe;
  -moz-box-shadow: none;
}




/*
 *****************************************************************
 * 08 -- dans le contenu (contenus spécifiques aux pages)
 *****************************************************************
 */

/* home */





/*
 *****************************************************************
 * 09 -- breakpoints mineurs entre desktop et tablettes
 *****************************************************************
 */





/*
 *****************************************************************
 * 10 -- homo tablettes - breakpoint majeur
 *****************************************************************
 */ 

@media (max-width: 48em) { /* equiv 768px */
   
  /* affichage des éléments */
  .nodesktop { display: block; }

  /* cachage des éléments inutiles, chabitte ! */
  .notablet { display: none; }
  
  /* linéarisation contenus flottants/table-layout */
  .autotablet {
    float: none;
    display: block;
    width: auto;
  }

  /**
   * adaptation structure globale (page / skip links / header / contenu principal / footer)
   */
  
  
  /**
   * dans le contenu (contenus spécifiques aux pages)
   */

}




/*
 *****************************************************************
 * 11 -- breakpoints mineurs entre tablettes et mobile
 *****************************************************************
 */






/*
 *****************************************************************
 * 12 -- mobile - breakpoint majeur
 *****************************************************************
 */

@media (max-width: 40em) { /* equiv 640px */

  /* affichage des éléments */
  .notablet { display: block; }

  /* cachage des éléments inutiles, chabitte ! */
  .nomobile { display: none; }

  /* linéarisation contenus flottants/table-layout */
  .automobile {
    float: none;
    display: block;
    width: auto;
  }

  /**
   * adaptation structure globale (page / skip links / header / contenu principal / footer)
   */
  
  
  /**
   * dans le contenu (contenus spécifiques aux pages)
   */

}




/*
 *****************************************************************
 * 13 -- breakpoints mineurs tout petit mobile
 *****************************************************************
 */





/*
 *****************************************************************
 * 14 -- print
 *****************************************************************
 */

@media print {
  /* ajouter là-dedans les éléments qui ont besoin d'être
   * resetés de manière très bourrine pour le print
   */
  body,
  html,
  #page,
  .reset4print {
    background-color: #fff;
    background-image: none;
    border: 0;
    box-shadow: none;
    color: #000;
    float: none;
    height: auto;
    margin: 0;
    max-width: 100%;
    min-height: auto;
    padding: 0;
    position: static;
    width: auto;
  }

  body {
    padding: .5em;
  }

  /* cachage des éléments inutiles, chabitte ! */
  .noprint {
    display: none;
  }
  
  /* affichage éléments spécifiques au print */
  .onprint {
    display: block;
  }
  
  /* éviter saut de page hasardeux */
  blockquote, ul, ol {
    page-break-inside: avoid;
  }
  h1, h2, h3, caption {
    page-break-after: avoid;
  }
  
  /* affichage des liens, sauf pour image contenue */
  /* attention, penser à vérifier le résultat et penser 
   * à limiter cette possibilité aux liens dans le contenu */
  /*a:after {
    content: " (" attr(href) ") ";
  }
  a:after img {
    content: "";
  }*/

  /* ici fix propriétés particulières */


} /* end print */




/*
 *****************************************************************
 * 15 -- fix viewport
 *****************************************************************
 */

/* fix viewport pour Win8 (snap mode) et préparer le jour 
 * où le viewport sera supporté par tous les moteurs 
 *  
 * Exemples : http://dev.opera.com/articles/view/an-introduction-to-meta-viewport-and-viewport/
 * width=device-width   => width: device-width;
 * height=device-height => height: device-height;
 * initial-scale=2      => zoom: 2;
 * maximum-scale=2      => max-zoom: 2;
 * minimum-scale=0.5    => min-zoom: 0.5;
 * user-scalable=no     => user-zoom: fixed;
 * 
 * pour le snap mode de Win8 => seul width: device-width; fonctionne pour l'instant  
 */

@-webkit-viewport {
  width: device-width;
}
@-moz-viewport {
  width: device-width;
}
@-ms-viewport {
  width: device-width;
}
@-o-viewport {
  width: device-width;
}
@viewport {
  width: device-width;
}




/*
 *****************************************************************
 * 16 -- règles d'état
 *****************************************************************
 */

/*
 * Règles d'état = mises en bas pour être prioritaires
 *
 */

/*
.is-hidden,
[aria-hidden=true] {
  display: none;
}
*/




/*
 *****************************************************************
 * 17 -- bonus : Fixes IE
 *****************************************************************
 */

/*  
 * basé sur les classes conditionnelles sur l'élément HTML
 *  
 * à utiliser seulement si peu de corrections et 
 * pas d'impact sur les perfs sur les autres navigateurs
 *       
 */

/* less than IE 9 */
.oldies .nooldies {
  display: none;
}

.ie6 .noie6 {
  display: none;
}
.ie7 .noie7 {
  display: none;
}
.ie8 .noie8 {
  display: none;
}
.ie9 .noie9 {
  display: none;
}

.ie7 .col,
.ie7 .col-noalign,
.ie6 .col,
.ie6 .col-noalign {
  float: left;
}
.ie7 .row,
.ie6 .row {
  overflow: auto;
}

/* RTL */
[dir="rtl"] .ie7 .col,
[dir="rtl"] .ie7 .col-noalign,
[dir="rtl"] .ie6 .col,
[dir="rtl"] .ie6 .col-noalign {
  float: right;
}