Comment ils l'ont fait Construire Windows

Aujourd'hui, nous allons plonger dans le site Créer des fenêtres et examiner les philosophies de code pratiques, les outils et les stratégies utilisés par cette page de destination de conférence très fréquentée et très appréciée. Nous allons entrer dans le vif du sujet, mais nous allons aussi couvrir certaines choses d'un point de vue de mille.


Qui est responsable?

Le site Build Windows était une collaboration entre l’équipe de trois personnes de Paravel et Nishant Kothary de Windows. (Jetez un coup d'œil au message de Trent Walton de Paravel, au message officiel de Paravel et au message de Nishant sur le projet.)


Une première impression imposante

Le délai d'exécution du projet était d'environ 10 jours.


Méthodologie

Comme le suggèrent les messages de l'équipe, leur méthodologie principale consistait à intégrer le design dans le navigateur le plus rapidement possible. Pour Paravel, cela est absolument essentiel, car une grande partie de leur travail tourne autour de la conception réactive basée sur une requête multimédia..

Le processus d'itération était progressif et rapide. deux personnes se sont concentrées sur la mise en page et le contenu, tandis que les deux autres se sont concentrées sur le code frontal.


Ensemble d'outils

Le site Build Windows repose sur quelques outils et bibliothèques importants..

Outils JavaScript

  • Moderniser en utilisant cette construction personnalisée
  • jQuery - Utilisé dans le fichier principal script.js
  • Lea Verou's PrefixFree.js - Utilisé dans le CSS pour ajouter automatiquement des préfixes de vendeur aux animations / transitions et autres propriétés CSS qui les nécessitent
  • Responsiveslides.js - Utilisé pour le rotateur de fondu d'image "Meet the family"
  • Webtrends.js - Analytics (remarque: PAS Google Analytics)
  • Un fichier ASCII génial - Cela peut servir un autre but, mais aucun autre que celui que nous pouvons voir n’est génial

Tout est dans les détails http://www.buildwindows.com/javascript/dev.js

Outils CSS, etc.

  • Réinitialisation de base - Communément vu sur le web
  • @ font-face - utilisé pour importer la police Windows Segoe UI

Une grande partie du balisage et du style ressemble beaucoup aux recommandations de HTML5 Boilerplate.


Stratégie de conception sensible

BuildWindows.com utilise beaucoup les requêtes des médias, avec 8 points de rupture au total:

  • 480px
  • 680px
  • 780px
  • 900px
  • 1280px
  • 1500px
  • 1700px
  • 1950px

Les plus gros changements se produisent entre 680px et 1280px. Au-dessus de 1280px, les principaux changements qui se produisent sont le remplissage de section et les modifications de marge et, plus important encore, les ajustements de la taille de la police (jusqu'à taille de police: 200%;). Les "tuiles de métro" représentent une grande quantité de CSS; en particulier, ces tuiles ajustent de 4 à 8 colonnes à travers les requêtes de médias.

Dégradation progressive

Au total, 15 règles ".lt-ie9" sont présentes, dont 7 concernent ".lt-ie8". En général, il s’agit de corrections de marge, de remplissage, de largeur et de police, ainsi que de règles pour la couleur d’arrière-plan ".button".


Les interactions

Trois animations principales se produisent, toutes réalisées avec des transitions CSS et des animations déclenchées en regardant l'événement de défilement et en ajoutant des classes aux sections "in-view". Par exemple:

 fonction isScrolledIntoView (elem) var docViewTop = $ (fenêtre) .scrollTop (); var docViewBottom = docViewTop + $ (fenêtre) .height (); var elemTop = $ (elem) .offset (). top * 1.10; // Ajoute une classe si 10% dans la fenêtre. return (docViewBottom> = elemTop);  function addInView () if (isScrolledIntoView ('. metro-tiles')) if (! $ ('. metro-tiles'). hasClass ('in-view')) $ ('. metro-tiles' ) .addClass ('in-view'). animate ('opacity': 1);  //… $ (fenêtre) .scroll (function () addInView (););

Ceci, légèrement modifié à partir du fichier script.js, affiche la fonction principale qui surveille le défilement et ajoute les classes en conséquence. On peut alors voir, par exemple, la dernière animation "compte à rebours" définie dans le css.

 .compte à rebours marge: 0 auto 0; position: absolue; largeur: 100%; gauche: 0; à droite: 0; marge supérieure: 20 um; transition: marge de 0,9;  .no-js .countdown margin-top: 1em;  .countdown.in-view margin-top: 1em; 

Une note importante ici est la classe ".no-js", qui est appliquée à la classe body dans le balisage. Modernizr supprime cette classe lorsqu'elle est exécutée, mais si Modernizr ne s'exécute jamais, nous savons que le JavaScript du navigateur est désactivé et nous ne pouvons donc pas déclencher l'animation pour afficher le widget compte à rebours. Au lieu de cela, nous le montrons par défaut sans l'animation.

Des animations similaires sont définies pour les mosaïques et les logos, et le fader d’image Responsiveslides est lancé lorsque cette section défile dans l’affichage. Les "tuiles de métro" ont aussi des inclinaisons définies pour le pseudo-sélecteur "actif", qui utilise une transition sur la transformer propriété. Ex:

 / * Inclinaison à gauche * / .metro-tiles .tile: nième de type (4n - 4) a: actif img transformer: perspective (1000px) rotationY (-20deg); 

Tiré directement de http://www.buildwindows.com/css/style.css.

Exception

L’équipe qui a créé ce site a décidé d’ajouter immédiatement la classe "in-view" à toutes les sections appropriées de DOM prêt sur tout périphérique iOS..

 $ (document) .ready (function () if (navigator.userAgent.match (/ (iPhone | iPod | iPad) / i)) $ ('. metro-tiles'). addClass ('in-view') .css ('opacity': 1); $ ('. propriétés'). addClass ('in-view'). css ('opacity': 1); $ ('. compte à rebours'). addClass ( 'in-view'). css ('opacity': 1); $ (". rslides"). addClass ('in-view'). responsiveSlides (timeout: 3000););

C’est très probablement une décision prise d’augmenter les performances et d’éviter les problèmes de scrollTop dans Mobile Safari. En règle générale, les navigateurs mobiles n'émettent pas d'événement de défilement tant que le défilement n'est pas complètement arrêté. Découvrez cet article sur le problème et sur certaines solutions de contournement possibles: Problèmes liés aux événements onscroll sur les navigateurs mobiles.

La plupart du code JavaScript de script.js est dédié à l’ajout de ces classes et à la mise à jour de la minuterie en bas. Le compte à rebours est configuré pour utiliser un heure du serveur et indique à l'utilisateur, jusqu'aux minutes, combien de temps il reste avant le début de l'événement. L’heure du serveur est beaucoup plus fiable, comme l’horloge de l’utilisateur Rendez-vous amoureux() fonction utilise par défaut) peut être réglé sur n'importe quoi.

D'autres fonctions sont un correctif de bogue d'échelle pour iOS et l'antialiasing de sous-pixels sur Mac Webkit..


Ce qu'il faut apprendre

Le site Build Windows a reçu de nombreuses critiques positives de la part de la communauté. Que pouvons-nous retirer de l’examen de ce site et de la façon dont il a été conçu à partir de rien??

Tous les paris sont ouverts si vous êtes expérimenté. En fait, vous concentrer consciemment et «prendre votre temps» nuira à votre performance si vous êtes quelqu'un d’expérience dans le domaine.. - Nishant Kothary

Construire vite

Comme l'indique le message de Nishant sur le projet, faire confiance à votre premier instinct et construire rapidement et réviser progressivement un projet de conception peut être très enrichissant pour les développeurs et concepteurs expérimentés..

Construire: Simple, gracieux et réactif

Le site Construire Windows est très simple et utilise une seule page de destination qui repose sur quelques grandes sections pour communiquer un nombre limité d’informations et inciter à un simple appel à l’action. Ce type de simplicité permet une voix et une marque solides et ciblées, la colonne vertébrale de tout bon design.

… Nous avons conçu, prototypé et construit la majorité du site dans le navigateur afin de nous assurer que la hiérarchie et la présentation du site sont idéales pour toutes les tailles d'écran. - Paravel

Le site se dégrade gracieusement, de sorte que les navigateurs âgés ou n'ayant pas JavaScript peuvent toujours récupérer les informations nécessaires. Il est également amélioré progressivement (par exemple, des animations CSS sont utilisées).

Le site utilise également des techniques de conception réactives pour permettre l’accessibilité à un grand nombre de périphériques sans limiter l’expérience «prime» à un seul périphérique..

Accent mis sur le cadrage des types et du contenu

Alors que le site emploie certains l'animation et le comportement, le contenu et la typographie sont les rois de ce design. Les images et autres éléments graphiques (tels que le ciel de Seattle illustré par Reagan Ray) ne font que soutenir la stratégie de typographie et de contenu..


Humanist sans caractère de Microsoft, Segoe UI

Et bien que vous pensiez au départ que le logo de compilation est un texte fluide avec le propre fichier fittext.js de Paravel, il s’agit en réalité d’un simple .png transparent; 1700 px de large, mais pesant à peine 13Ko.


Les critiques

Parce que personne n'est parfait…

Optimisation

Bien que le site recourt à de nombreuses "pratiques recommandées", certains aspects auraient pu être optimisés, tels que la concaténation et la minimisation des fichiers JavaScript et CSS, l’utilisation des sprites dans la mesure du possible, etc..

Cependant, le site ne souffre pas de ces problèmes particuliers de manière significative, et l'équipe a probablement fait les choix qui ont été faits pour permettre une base de code plus maintenable. Au-delà, l’équipe aurait pu s’attendre à ce que d’autres développeurs et concepteurs s’intéressent au code source, laissant ainsi des morceaux non minés..

Problèmes mineurs liés aux meilleures pratiques

C’est principalement une critique de l’utilisation de agent utilisateur. Tous les lecteurs de cet article doivent savoir que navigator.userAgent n'est pas un moyen fiable de détecter le navigateur utilisé par quelqu'un..

Cependant, ce site n'utilise pas et n'abuse pas de la détection du navigateur UserAgent; ils l'utilisent à deux fins principales. La première consiste à définir une règle CSS anti-aliasing sur Mac Webkit. La seconde consiste à ajouter immédiatement la classe "in-view" aux périphériques iOS. Ces deux cas d'utilisation sont légitimes, car ni l'un ni l'autre ne compromet lourdement le contenu..

Certains scripts JavaScript basés sur jQuery ne sont pas optimisés au maximum:

 if (navigator.userAgent.match (/ (iPhone | iPod | iPad) / i)) $ ('. metro-tiles'). addClass ('in-view'). css ('opacity': 1) ; $ ('. properties'). addClass ('in-view'). css ('opacity': 1); $ ('. décompte'). addClass ('in-view'). css ('opacity': 1); $ (".rslides"). addClass ('in-view'). responsiveSlides (timeout: 3000); 

Pourrait être:

 if (navigator.userAgent.match (/ (iPhone | iPod | iPad) / i)) $ ('. metro-tiles, .properties, .countdown'). addClass ('in-view'). css (' opacité ': 1); $ (".rslides"). addClass ('in-view'). responsiveSlides (timeout: 3000); 

Et le addInView () Cette fonction pourrait également être optimisée de différentes manières. Cela dit, ce sont des préoccupations délicates qui flirtent certainement avec les franges de la sur-ingénierie; la décision aurait pu être prise d'ignorer ces optimisations pour plusieurs raisons:

  1. Les gains sont insignifiants
  2. La lisibilité du code pourrait en souffrir
  3. Le court délai d'exécution signifie probablement que le projet pourrait mieux tirer parti d'une attention plus ciblée dans d'autres domaines, tels que l'affinement de chaque point d'arrêt réactif avec une précision et des détails supérieurs.

Conclusion

Paravel et Nishant de Windows ont porté une attention particulière aux détails de ce projet, malgré les délais très courts impartis. Leur approche de développement rapide et leur confiance en leur propre instinct ont porté leurs fruits dans ce design moderne, loin de celui de Windows..

Quelles sont les informations que vous avez acquises en consultant ce site? Que pensez-vous de l'optimisation? Qu'en est-il de la vaste gamme de points d'arrêt réactifs? Faites-nous savoir ci-dessous!