Les slides de mon talk à la Kiwiparty 2014 sur la logique Responsive : comment appréhender les différentes problématiques que pose le Responsive Design tout en conservant une bonne maintenabilité
4. True Story
Nous sommes le vendredi 13 juin
J’ai perdu 90% des slides cette nuit suite à un freeze...
5. True Story
Nous sommes le vendredi 13 juin
J’ai perdu 90% des slides cette nuit suite à un freeze...
Et aussi parce que j’ai un peu oublié de sauvegarder...
6. True Story
Nous sommes le vendredi 13 juin
J’ai perdu 90% des slides cette nuit suite à un freeze...
Et aussi parce que j’ai un peu oublié de sauvegarder...
Du coup je ferais la grève du GIF
7.
8. Qui suis-je ?
@JulienCabanes
Ça c’est mon Twitter mais je n’y suis pas très bavard
Et ça c’est mon GitHub, où je ne commit pas assez
Lead Developer chez Zee Agency à Paris
25 personnes, 10 développeurs
J’aime les blagues vaseuses, les métaphores, parler
avec mes mains et les sauvegardes automatiques.
28. Questions...
•Regrouper par composant ?
•Regrouper par media-query ?
•Bloat ?
• « En fait, le mobile c’est 640px et plus 480px »
• « En fait, la nav desktop marcherait mieux sur iPad »
29.
30.
31. Responsive Patterns
•Onglets vs. Accordéon
•Navigation simple vs. Off-Canvas
•Table vs.Table...
•Galerie vs. Carousel
•Carousel vs. Galerie verticale
http://bradfrost.github.io/this-is-responsive/patterns.html
32. Responsive Patterns
•Map iframe vs. Image + Lien
•Video embed vs. Image + Lien + à la volée
•Formulaire long vs. Formulaire simplifié
•Checkbox vs. Select multiple
•Autocomplete ? Datepicker ?
•Widget réseaux sociaux
•etc...
http://bradfrost.github.io/this-is-responsive/patterns.html
37. Layout conditionnel
Organisation des media-queries :
• Par composants, quitte à utiliser ça pour le bloat
https://github.com/buildingblocks/grunt-combine-media-queries
• Nommer les media-queries
• D’abord avec des variables
• Ensuite avec des mixins
• Utiliser un mixin global pour gérer la sortie (IE, etc...)
http://css-tricks.com/conditional-media-query-mixins/
41. Layout conditionnel
Là où ça se complique :
• min & max-width qui rentrent en concurrence
- éviter autant que possible le max-width (mobile first)
• même layout, contenu & contexte différent
- bon courage...
• l’ordre des éléments qui change...
- vertical stacking avec display: table / table-caption...
- https://github.com/filamentgroup/AppendAround
44. Contenu conditionnel
• Une bonne stratégie de contenu vaudra toujours mieux
que les hacks, mais ce ne sera pas plus simple pour
autant...
• Chargement conditionnel !
http://24ways.org/2011/conditional-loading-for-responsive-designs/
http://filamentgroup.com/lab/ajax_includes_modular_content/
et autres...
45. Fonctionnalités conditionnelles
Certains composants dépendent de contextes bien précis :
• media-queries
• feature-detection
• parent / children
• page ou template
• présence d’un autre composant sur la page
• visibilité dans le viewport
• etc...
46. Fonctionnalités conditionnelles
Selon ces contextes, les composants doivent :
• se charger
• se configurer
• s’exécuter
• s’interrompre
à l’entrée et à la sortie des contextes !
47.
48. Fonctionnalités conditionnelles
Comment gérer ses conditions côté JS ?
• matchMedia ?
• body:after ? http://adactio.com/journal/5429/
Solutions :
• Enquire.js : http://wicky.nillia.ms/enquire.js/
Défaut : ne gère que les media-queries
• Conditioner.js : http://conditionerjs.com/
Pratique : se base sur des data-attributes
49. Fonctionnalités conditionnelles
Comment partager ses conditions entre CSS & JS ?
• Format d’échange ? JSON ?
• SassyJSON : https://github.com/HugoGiraudel/SassyJSON
• sass-json-vars : http://viget.com/extend/sharing-data-
between-sass-and-javascript-with-json
• Principe : créer un fichier JSON réunissant les
conditions (breakpoints, etc...), pouvoir le lire à la fois
côté Sass et JS.
50.
51. Récapitulatif
• Sauvegardez. Souvent.
• Gardez de bonnes pratiques
• Nommez vos media-queries
• Trouvez un moyen de regrouper les règles (DRY)
• Testez. Souvent.