Ce n’est un secret pour personne : le travail d’intégrateur web peut rapidement tourner au cauchemar. Entre le support des navigateurs obsolètes, les problématiques de performance, la génération de sprites CSS et la prise en charge des nouveaux périphériques mobiles, l’intégrateur doit jongler entre de multiples langages et connaître une liste interminable de hacks à appliquer pour satisfaire tout ce petit monde. Que diriez-vous de vous simplifier la vie avec CSS grâce à Sass/Compass ?
8. Écrire 50 fois le même
sélecteur CSS, c’est ma
passion. – Personne. Jamais.
9. Partenariat
#my-biz {
@import "partials/general/*";
@import "partials/ui/*";
@import "partials/content-types/*";
}
• des partenaires souhaitent afficher un
décors de page à leurs couleurs
• ils fournissent, voire chargent des CSS avec
de belles règles, comme * { line-height:1 }
• vous n’avez pas d’autre choix que
d’augmenter le poids de tous vos
sélecteurs
10. Dis voir, comment je fais pour
afficher le logo anglais pour
la pologne ?
– Un chef de projet.
Facile, ajoute pl en dans la
variable de configuration
dédiée du thème.
– Moi.
11. Automatisation
$logo-supported_languages: fr, en, es, it, de en, pl en !default;
// La page d'accueil doit afficher un logo contextualisé par la langue.
.node-type-homepage {
@each $logo-supported_language in $logo-supported_languages {
$language: $logo-supported_language;
$locale: $logo-supported_language;
// Cas particulier d'une langue qui doit afficher le logo d'une autre langue.
@if type-of($logo-supported_language) == 'list' {
// La langue de l'utilisateur.
$language: nth($logo-supported_language, 1);
// La locale à utiliser pour afficher le logo.
$locale: nth($logo-supported_language, 2);
}
// Chemins localisés du logo.
$logo-path: 'locales/#{$locale}/logo';
&.i18n-#{$language} .logo {
@include iu-hidpi-replace-text-with-dimensions($logo-path);
}
}
}
12. ÉCONOMISER DES
HEURES DE
TRAVAIL AVEC
COMPASS
Un
support
cross-‐browser
avancé
http://www.flickr.com/photos/bermilabs/4078706331/ (cc)
13. Dans la vraie vie
• 1 site multi-domaines, 2 langues,
5 thèmes
• 398 Ko de CSS au total
• dont 10 Ko pour un support IE7+ via des
feuilles de styles dédiés
14. Dans la vraie vie, #2
• 1 site multi-lingues, 2 thèmes
• 90.3 Ko de CSS au total
• dont 2.3 Ko pour un support IE7+ via des
feuilles de styles dédiés
21. ET SI JE VOUS
DISAIS QUE JE
GÈRE ET CRÉE
MES SPRITES CSS
EN QUELQUES
SECONDES ?
http://www.flickr.com/photos/dark_ghetto28/385574568/ (cc)
22. Sprites, strict minimum
@import "compass";
// Importation de la sprite map.
@import "social/*.png";
// Création de l'image de sprite map et des sprites CSS.
@include all-social-sprites;
SCSS
.social-sprite, .social-googleplus, .social-linkedin, .social-twitter {
background-image: url('../img/social-s4363aa6d7e.png');
background-repeat: no-repeat;
}
.social-googleplus { background-position: 0 0; }
.social-linkedin { background-position: 0 -48px; }
.social-twitter { background-position: 0 -96px; }
CSS
23. Sprites Haute Définition
@import "compass";
// Configuration de la sprite map basique.
$social-sprite-base-class: '%social_base';
$social-layout: smart;
$social-sort-by: name;
$social-sprite-dimensions: true;
// Importation de la sprite map basique.
@import "social/*.png";
// Création de l'image de sprite map et des sprites CSS.
@include all-social-sprites;
// Déclaration de la version HD en reprennant les mêmes layout et tri
// que la sprite map basique
$social_hd-sprites: sprite-map("social_x2/*.png",
$layout: $social-layout,
$sort-by: $social-sort-by);
// Une gestion HD en quelques lignes.
#{$social-sprite-base-class} {
@include hide-text;
display: block;
@media (-webkit-min-device-pixel-ratio: 1.3),
(min-resolution: 124.8dpi),
(min-resolution: 1.3dppx) {
background-image: $social_hd-sprites;
background-size: sprite-width($social-sprites) auto;
}
}