1484 sujets

Web Mobile et responsive web design

Bonjour.
La page de titre de mon site ne fonctionne pas du tout sur mobile, et je ne vois pas l'erreur.
http://www.davidaubril.fr/
Normalement, la page est composée d'une grille, des éléments de style block, qui couvrent la page de façon aléatoire mais complète. Certains de ces éléments sont des liens actifs.
A noter : sur Opera, il y a également un affichage étrange, par rapport à ce que ça doit donner. Mais là, ce n'est plus un problème d'affichage sur mobile.
Modifié par trusiad (13 May 2016 - 08:47)
Bonjour !

Pourquoi ne pas dire comment ça devrait marcher ?

Je pense que vous auriez plus de réponses...

Edit : Et même encore plus de réponses si en cliquant sur le lien, on allait directement sur votre site...

Smiley smile
Modifié par Zelena (12 May 2016 - 11:38)
Évidemment... Smiley smile
upload/21457-capture.jpg
Voilà pour l'image.
Et voilà pour le lien correct... http://www.davidaubril.fr/
Sur Opera, ça donne ça : il y a un léger décalage sous la 8ème case, au centre...
upload/21457-captureope.jpg
La grille est recalculée à chaque fois, donc parfois c'est pire.
Sur mobile, c'est indescriptible... Je vous laisse juger par vous-même.
upload/21457-capturemob.jpg
Modifié par trusiad (13 May 2016 - 08:55)
Gros souci d'accessibilité au site depuis un Smartphone pourtant connecté en 3G... 2mn 40 s chrono avant que IE ne capitule et se ferme brutalement.
Tous les autres sites consultés précédemment avaient des temps de réponse corrects.
Peut-être un problème ponctuel. Il serait intéressant de voir si d'autres intervenants du forum ont rencontré le même dysfonctionnement.
Bonjour !

Je ne sais que dire : je n'ai pas de mobile et donc effectivement ça s'affiche... correctement sur mon écran d'ordinateur. Mais je regarde un peu sous le capot, je vois un code "assez compliqué".

Je me trompe peut-être mais j'ai l'impression que vous chargez une police pour pouvoir afficher six pictos et il y a aussi un code Javascript... pour l'affichage ? Celui-ci a l'air assez complexe...

Smiley smile
Oui. Tout ça : à la fois code pour déterminer les dimensions de l'écran, proposer une grille basée sur le ratio, placer aléatoirement les liens réels, chargement d'une police et d'un fond d'écran.
Quelques éléments à charger, mais ce n'est pas très lourd. Environ 150kB en moyenne.
Le problème, c'est le code javascript, je pense : à mon travail, il se charge correctement sur les firefox, mais si j'essaie de recharger la page, tout plante... Comme Sepecat le remarque...
Mais qu'est-ce qui fait ça dans le code ?... C'est ça qui me laisse perplexe. Tout me paraît correct dans les boucles que j'ai faites... Je n'ai aucun message d'erreur, rien du tout...
A noter : c'est le code js qui détermine la taille des éléments... Et donc de la police... L'erreur de taille sur les mobiles doit venir de là...
Modifié par trusiad (13 May 2016 - 11:36)
Je ne suis pas une spécialiste du Web mobile... mais vous devriez, je pense, vous passer du Javascript pour l'affichage : c'est le boulot du CSS.

Je ne vois que le tirage aléatoire qui ne puisse être fait en CSS...

Plus vous multipliez les outils, plus vous augmentez le risque que cela pose problème sur un appareil ou sur un autre...

Il y a beaucoup de calcul qui est fait en Javascript : peut-être le problème vient de là... Smiley confus

Smiley smile
Pour info, je viens de refaire un test d'accès au site depuis mon Nokia, en 3G au moment du test, et le résultat est identique.
Page blanche durant 3 mn, blocage de la barre de progression puis suicide d'IE qui s'interrompt et me vire.
Il semble bien que le problème soit lié au site et à la façon dont est construite la ressource.
Étant sur un Smartphone, je ne peux analyser le source mais, comme le signale Zelena, un problème au niveau javascript semble probable. Ou bien une ressource externe non disponible avec un énorme timeout (3 mn, c'est plutôt rare...). Quoi qu'il en soit, quelque chose se charge mal ou s'exécute mal...
Il serait utile de charger la page sur un poste de travail et visualiser via les outils du navigateur le temps que met chaque ressource pour être chargée / exécutée.
Via Firefox sur Androïd, cette image se charge très rapidement
trusiad a écrit :

upload/21457-capturemob.jpg
puis plus rien.

L'écran reste figé sur cette image et aucun chargement ne s'opère.


Par contre avec Chrome sur Androïd, l'affichage se fait comme la version desktop. Par contre tous les éléments sont vraiment trop petits. Ça coince pour le tactile, ça coince pour la lecture...

Bref, pas du tout un site pour mobile. Attention, gardez en-tête que 49% des recherches internet passent par un mobile.

J'en connais un qui va passer un trèèès long wk Smiley cligne
Modifié par Greg_Lumiere (13 May 2016 - 14:24)
Je viens de dégoter un desktop et jeter un coup d'oeil au source de la page HTML Smiley eek
Soit je n'ai rien compris, soit il y a un vrai problème de conception.
Sous Firefox, écran 16/9, l'outil de vérification du DOM me demande s'il doit afficher les 159 noeuds de type A en sus de ceux déjà affichés Smiley sweatdrop
L'arborescence HTML liste une palanquée de balises A ayant toutes le même style :
<a style="width: 56.6875px; height: 81px; font-size: 42.5px;"></a>

Sur les N cases de ce type affichées à l'écran, seules 5 ou 6 contiennent un attribut @src renvoyant vers un lien + une icône issue de la fonte téléchargée.Toutes les autres cases ne servent qu'à afficher une bordure noire et se comportent comme des "mini" DIV.
Ce constat fait, je comprends mieux à présent pourquoi IE sur Nokia Win 8 soit à la ramasse... Déjà que ce navigateur n'est pas un foudre de guerre, monter une page pareille le met à genoux pour de bon.
A priori, je n'ai pas l'impression que le code javascript utilisé pour générer dynamiquement la partition écran soit un modèle d'efficacité, du moins lorsqu'on visualise le code HTML produit Smiley ohwell .
En fait, tout le contenu de la page est généré par le script en question :
<script type="text/javascript"/>

  var nombre = Math.floor(Math.random() * 6);
  if (nombre < 10) {var zero = "0"} else {var zero = ""};
  document.body.style.backgroundImage = "url(images/body"+zero+nombre+".jpg)"; 

  var le = screen.width;
  var he = screen.height;
  var lf = window.innerWidth;
  var hf = window.innerHeight;  
  
  function ratio (v, w) 
    {
    return (w == 0) ? v : ratio (w, v%w);
    }
  
  var pgcd = ratio (le, he);
  
  var liens = document.links; 
  
  var grille = new Array();
  grille.length = (le/pgcd)*(he/pgcd);
  

  
  for (i=0; i< liens.length ; i++)
    {
    liens[i].style.display = "none";
    var nombre = Math.floor(Math.random() * grille.length);
    if (grille[nombre] != undefined) {i--} else {grille[nombre] = liens[i]} 
    }
 
  for (i=0; i< grille.length ; i++)
    {
    var dalle = document.createElement("a");   
    if (grille[i] != undefined) 
      {
      var texte = document.createTextNode(grille[i].innerHTML);
      dalle.href = grille[i];
      }
    else 
      {
      var texte = document.createTextNode("");
      }
    dalle.appendChild(texte);
    document.body.appendChild(dalle);
    dalle.style.width = lf/(le/pgcd)-4+"px";
    if (grille[i] == undefined) 
      {
      dalle.style.height = hf/(he/pgcd)-4+"px";
      }
    else 
      {
      dalle.style.lineHeight = hf/(he/pgcd)-4+"px";	
      }
    dalle.style.fontSize = hf/(he/pgcd)/2+"px";
    }
    
</script>

La boucle qui tue Smiley smile
Comme le pressentaient les commentaires précédents, c'est probablement là que se situe le noeud du problème et ce script nécessite un revue de détail en profondeur.
Même si HTML5 est permissif sur la présence ou non de l'attribut @src dans la balise A, je ne suis pas sûr qu'on ait intérêt à utiliser celle-ci juste pour partitionner une image en petits blocs et leur ajouter une bordure noire.[/i][/i][/i][/i][/i][/i]
Modifié par sepecat (13 May 2016 - 15:18)
En première approche, indépendamment de la logique même, l'examen du script montre qu'il y a un certain nombre de redondances inutiles et pénalisantes en temps de calcul pouvant être évitées :
dalle.style.width = lf/(le/pgcd)-4+"px";
    if (grille[i] == undefined) 
      {
      dalle.style.height = hf/(he/pgcd)-4+"px";
      }
    else 
      {
      dalle.style.lineHeight = hf/(he/pgcd)-4+"px";	
      }
    dalle.style.fontSize = hf/(he/pgcd)/2+"px";

Sauf erreur, les instructions :
- lf/(le/pgcd)-4+"px"
- hf/(he/pgcd)-4+"px"
- hf/(he/pgcd)/2+"px"
notamment, peuvent être calculées hors boucle, puisqu'elles n'utilisent pas l'index, et stockées sous forme de constantes.
C'est toujours ça de gagné Smiley cligne [/i]
J'entends. Je vais poser le problème autrement : comment diviser l'écran en une grille s'adapatant à toutes les tailles d'écran, et disposant mes liens de façon aléatoire ?
Modifié par trusiad (13 May 2016 - 16:58)
trusiad a écrit :
J'entends. Je vais poser le problème autrement : comment diviser l'écran en une grille s'adapatant à toutes les tailles d'écran, et disposant mes liens de façon aléatoire ?

Côté performances, essaie tout d'abord de factoriser les calculs, comme indiqué dans mon précédent commentaire. Cela soulagera d'autant le processeur, en supprimant les valeurs redondantes car donnant systématiquement le même résultat.
Pour ce qui est de la grille en soi, je n'ai pas de solution toute prête, mais si je devais traiter cette problématique, je pense que je procéderais ainsi :
- positionnement de l'image en arrière plan
- affichage en coordonnées 0,0 et fixed d'un tracé SVG comportant les blocs délimités par une bordure noire (SVG créé dynamiquement via Javascript ou bien un flux SVG existant de grande taille avec overflow = hidden)
- positionnement en fixed des cinq ou six blocs contenant une icône et un lien hypertexte
A priori, le SVG contenant la totalité des blocs doit être très rapide à tracer puisqu'il ne comporte que des lignes droites...
Puisque le site doit être responsive, et afin de conserver des tailles de blocs suffisamment visibles (problème soulevé par Greg Lumiere sur les portables), je serais plus enclin à privilégier un flux SVG construit dynamiquement via javascript afin de tenir compte des dimensions réelles de l'écran.
Voili, voilou Smiley smile ... juste une piste de réflexion que d'autres intervenants pourront compléter ou contester selon leur humeur.
J'ai trouvé une partie du problème : la grille est basée sur le ratio de l'écran. Sur les desktops, c'est simple : 4/3, 16/9, etc.
Sur les mobiles, en revanche, il y a de quoi faire tomber le navigateur de meilleure volonté : 40x71 pour l'iphone 5, 375x667 pour l'iphone 6. Beaucoup trop lourd (des centaines de case à créer) et illisble (des cases minuscules).
Du coup, au départ, je me suis arrangé pour qu'aucun des deux termes du ratio ne soit supérieur à 16. Et ça paraît bien fonctionner.
Merci à tous pour le coup de main.
Modifié par trusiad (14 May 2016 - 09:09)
trusiad a écrit :
J'ai trouvé une partie du problème : la grille est basée sur le ratio de l'écran. Sur les desktops, c'est simple : 4/3, 16/9, etc.
Sur les mobiles, en revanche, il y a de quoi faire tomber le navigateur de meilleure volonté : 40x71 pour l'iphone 5, 375x667 pour l'iphone 6. Beaucoup trop lourd (des centaines de case à créer) et illisble (des cases minuscules).
Du coup, au départ, je me suis arrangé pour qu'aucun des deux termes du ratio ne soit supérieur à 16. Et ça paraît bien fonctionner.
Merci à tous pour le coup de main.

Ça fonctionne à présent sur mon Nokia, avec un temps de chargement correct Smiley smile .
Il y a juste une petite marge à droite et en bas de l'écran non couverte par le quadrillage (environ dix à quinze pixels de large).
Oui, sans doute parce que j'ai mis des arrondis. Je crois que je vais laisser les décimales, ce sera plus précis.