Bonjour
J'ai un menu avec hamburger qui fonctionne correctement sur Firefox et Chrome sur PC (image 1)
mais mon correspondant m'envoie une capture d'écran sous Firefix/Android qui montre une erreur de positionnement (image2)
http://paralletes.free.fr/tests/photo/hamburger.png
Le HTML:

<nav id="topPagination" class="" onmouseover="showHide(this)" onmouseout="showHide(this)">
Page 12 / 12
<div class="button" onclick="showHide(this);">?</div>
<ul>...</ul> <!-- le menu déployé -->
</nav>

et le CSS:

#topPagination,
#bottomPagination {
	display:table;
	margin:auto;
	margin-top:0.5em;
	position:relative;
	border:1px solid #990000;
	border-radius:10px;
	border-radius:1vw;
	padding:4px;
	padding:0.4vw;
	font-family:Geneva, Arial, Helvetica, sans-serif;
	font-size:0.8em;
	font-weight:bold;
	color:#990000;
	text-align:center;
	width:12em;
}
#topPagination .button,
#bottomPagination .button {
	position:absolute;
	left:0.65em;
	top:0.35em;
	z-index:20;
}

Il s'agit évidemment d'un problème de positionnement de "button", mais quoi?
Il semblerait que Firefox sur Android ait des problèmes avec top: 0.35em; ?

Je ne dispose pas de tablette sous Android pour tester, mon correspondant habite à 1000 km ... et je n'ai pas vraiment d'idée sur ce qu'il faut chercher.
Une idée?
Modifié par PapyJP (14 Nov 2015 - 16:07)
Bonjour PapyJp,
ton menu-hamburger est une img, n'est-ce-pas ?

Ne serait-ce alors judicieux et préférable de configurer cette img, par exemple avec un position:relative;vertical-align:middle, et mieux qu'un left et top : tout simplement avec un padding-left:_px;padding-top:_px si ces padding étaient toutefois utiles et nécessaires ?

Ou même configurer un vrai <button type="button">_</button> qui contienne img et texte, non ?
http://www.w3schools.com/tags/tag_button.asp

Je me questionne également en annexe sur la fonction showHide(this) qui poserait problème, telle qu'elle est sollicitée à des niveaux de "poupée russe" différents ...
Modifié par pictural (14 Nov 2015 - 17:38)
pictural a écrit :
Bonjour PapyJp,
ton menu-hamburger est une img, n'est-ce-pas ?

Ne serait-ce alors judicieux et préférable de configurer cette img, par exemple avec un position:relative;vertical-align:middle, et mieux qu'un left et top : tout simplement avec un padding-left:_px;padding-top:_px si ces padding étaient toutefois utiles et nécessaires ?

Ou même configurer un vrai &lt;button type="button"&gt;_&lt;/button&gt; qui contienne img et texte, non ?
http://www.w3schools.com/tags/tag_button.asp

Je me questionne également en annexe sur la fonction showHide(this) qui poserait problème, telle qu'elle est sollicitée à des niveaux de "poupée russe" différents ...

Ce n'est pas un image, c'est tout bêtement le caractère &equiv; (&#8801;).
Ça ne se voit pas parce que ce forum le remplace par un ? dans le HTML

Je veux que ce bouton soit positionné en z-index 20, par rapport au texte qui est en z-index auto et la liste qui est en z-index 10. De cette façon, c'est le même élément, positionné à la même place. Cela impose que ce soit un élément "position:absolute;

En quoi la fonction showHide poserait elle un problème? C'est une même fonction qui est utilisée dans toute la page (et dans tout le site) partout où on fait apparaître/disparaitre quelque chose.
Cette fonction rend "active" ou "inactive" la balise parent de celle qui est cliquée. Il y au plus une seule balise active dans une page. Tout cela est bien rodé et fonctionne sans problème.
Cela se fait en ajoutant la classe "active" à l'élément en question, et en stylant les choses à cacher selon que leur contenant a ou non la classe "active".
Ça permet d'éviter d'avoir plusieurs listes apparaissant sur la page: quand on en active une, ça désactive celle qui est ouverte.
Ce mécanisme fonctionne sans problème jusqu'à présent.
Modifié par PapyJP (14 Nov 2015 - 18:38)
Raphael a écrit :
Bonjour,

Pas sûr d'apporter une réelle solution, mais je ne pouvais pas ne pas intervenir tant le &lt;div class="button"&gt; me choque Smiley smile

Un excellent article à ce sujet :
http://www.ebaytechblog.com/2015/11/04/how-our-css-framework-helps-enforce-accessibility/

Bonjour Raphaël, et merci de votre sollicitude. Smiley smile
Ça vous choque vraiment tant que ça?
Faut-il mettre une balise <button> en faisant un raz de toutes les présentation par défaut qui polluent les navigateurs, et dont on n'est jamais sûr qu'on ne va pas trouver un effet de bord imprévu, ou bien changer le nom de la classe?
Si encore il existait une commande

button {
    all:reset !important;
]

ou plutôt

* {
    all:reset !important;
}


Si un jour je fais une opération "accessibilité pour mal voyants", j'aurai bien plus de choses que cela à changer, et d'abord à comprendre ce qu'il faut faire pour afficher des photos dans ce contexte.
Par ailleurs j'ai des classe "left", "right", "center", "title", et d'autres de même type, dont je suppose également qu'il faudrait les modifier pour les mêmes raison?

Si c'est vraiment tellement choquant, je changerai le nom du style pour autre chose, je suis ouvert aux suggestions.

A noter que ce "button" n'est pas vraiment un bouton, mais qu'il est là pour signifier qu'il y a unes liste déroulante au dessous.

Mais ce qui me préoccupe réellement pour le moment c'est surtout le fait que ce fichu FF/Android ne comprend mon CSS, et ça n'a pas grand chose à voir avec le nom de la classe.

Personne n'a le moindre contournement à me proposer?
Modifié par PapyJP (16 Nov 2015 - 18:13)
bonsoir,

peut-être passer le div en un lien avec une ancre vers l'ul et devant le texte :

<nav>
<a href="#ulmenu" onclick="showHide(this);">?</a> Page 12 / 12
<ul id="ulmenu">
<li>...
gc-nomade a écrit :
bonsoir,

peut-être passer le div en un lien avec une ancre vers l'ul et devant le texte :

<nav>
<a href="#ulmenu" onclick="showHide(this);">?</a>Page 12 / 12
<ul id="ulmenu">
<li>...

Franchement, ça m'obligerait à ficher en l'air toute une partie d'un design sain sans pour autant avoir la moindre idée de ce qui cloche réellement. En particulier s'il y a des références à (thïs) ce n'est pas pour ajouter des id parasites dans l'espoir sans doute vain de contourner peut être ce qui ressemble beaucoup à un bug d'implementation.
J'ai pu vérifier que ce même problème n'existe pas dans FF/iOS, Ça ressemble donc très fort à un effet de bord vicieux d.un bug d'Android.
Les navigateurs sont sensés implémenter le même standard, et donner un rendu similaire aux fichiers qui respectent le standard. Je conçois que l'on obtienne des résultats different si le fichier n'est pas conforme. Mais quelle est l'erreur dans le bout de code ci dessus?
a écrit :
A noter que ce "button" n'est pas vraiment un bouton, mais qu'il est là pour signifier qu'il y a unes liste déroulante au dessous.


Puisque son clic déclenche une action d'affichage/masquage, c'est fonctionellement bel et bien un bouton.

Dis-toi bien que si tu l'as instinctivement appelé bouton, ce n'est pas pour rien ! Le premier instinct est souvent juste, puis la rationalité revient nous faire douter.

@Raphaël: super article ! Enfin quelqu'un qui a compris comment faire les choses correctement et qui a eu le courage de l'expliquer. A mettre entre toutes les mains de ceux qui conçoivent des sites utilisant encore des tonnes de styles active, disabled, on, off, btn, tab, menu, etc.
J'aime énormément cette approche qui force à faire juste.
QuentinC a écrit :

Puisque son clic déclenche une action d'affichage/masquage, c'est fonctionellement bel et bien un bouton.

Tu as raison, je vais en faire une balise <button> et la styler en conséquence, mais pour moi cette balise était prévue pour être incluse dans un formulaire de saisie. Si on pousse un peu plus loin on pourrait mettre en <button> toutes les entrées de menu, ou --pourquoi pas -- tous les liens?
Ça pourrait faire l'objet d'une interessante discussion, mais ça ne ne nous avance toujours pas sur le VRAI sujet qui me préoccupe: pourquoi ce f... Navigateur n'interprète t il pas correctement mon CSS?
a écrit :
Tu as raison, je vais en faire une balise <button> et la styler en conséquence, mais pour moi cette balise était prévue pour être incluse dans un formulaire de saisie. Si on pousse un peu plus loin on pourrait mettre en <button> toutes les entrées de menu, ou --pourquoi pas -- tous les liens?


En HTML4, je crois que <button> devait effectivement se trouver dans un formulaire. Mais plus nécessairement en HTML5 !

Pour le reste, la distinction, du moins théorique, entre un lien et un bouton, c'est que le lien ouvre une autre page ou un autre onglet, alors que le bouton envoie un formulaire ou déclenche une action sur la même page. Mais parfois la frontière est mince... par exemple il est courant d'avoir un bouton OK pour envoyer un formulaire mais un lien Annuler qui, malgré qu'il renvoie à une autre page, est tout de même fonctionellement équivalent à un bouton (car il s'oppose à OK)
PapyJP a écrit :

Franchement, ça m'obligerait à ficher en l'air toute une partie d'un design sain sans pour autant avoir la moindre idée de ce qui cloche réellement. En particulier s'il y a des références à (thïs) ce n'est pas pour ajouter des id parasites dans l'espoir sans doute vain de contourner peut être ce qui ressemble beaucoup à un bug d'implementation.
J'ai pu vérifier que ce même problème n'existe pas dans FF/iOS, Ça ressemble donc très fort à un effet de bord vicieux d.un bug d'Android.
Les navigateurs sont sensés implémenter le même standard, et donner un rendu similaire aux fichiers qui respectent le standard. Je conçois que l'on obtienne des résultats different si le fichier n'est pas conforme. Mais quelle est l'erreur dans le bout de code ci dessus?


l'histoire du div en a plutôt que bouton n'etait qu'une proposition (et un appel déguiser à QuentinC pour une critique constructive .. qu'il a fait ).

Coté CSS et bug , le fait de mettre le bouton devant le texte permet de le faire flotter ... sans positionnement en absolu à la rescousse Smiley smile http://codepen.io/anon/pen/xwMzOQ

Pour le (this), je ne comprend pas ce que tu veut dire, this se réfère a lui même quelque balise qu'il soit ?
++
Je pense qu'il est préférable que je vous donne un lien vers le code: http://paralletes.free.fr/tests/pagination1.html

Le fameux "bouton"est en z-index 20, le menu étendu en z-index 10.
C'est pour cela qu'il faut que je les mette en position:absolute;

Si je mets le bouton DANS le bloc, il faut en fait en mettre un dans le menu avant extension et un autre dans le menu étendu, et m'assurer qu'ils sont bien superposés, ce qui m'oblige à faire des calculs en CSS, ce que le préfère éviter en raison du grand nombre de vielles versions de IE qui continuent à être utilisés par nos lecteurs.

Ces gens sont dans le monde entier, ils ne l'intéressent aucunement à la techno, ils ont acheté un machine il y a 10 ans, et tant qu'elle fonctionnera ils ne voient pas pourquoi ils devraient changer de version de navigateur juste pour aller voir au plus une fois par mois ce qu'il y a de changé sur le site.

Le bouton n'est là que pour ceux qui utilisent une tablette et n'ont donc pas de fonction de survol.
Ça les incite à cliquer dessus pour voir ce qu'il y a, alors que les autres voient apparaitre le menu déroulant dès qu'ils passent la souris dessus.

Pour l'instant, voici ce qu'ils voient:
http://paralletes.free.fr/tests/photo/pagination.png
C'est hideux, et tout le monde est d'accord pour changer, mais il ne faut pas tout ficher en l'air pour faire plus joli.

Je pensais avoir trouvé une solution convenable, et voilà que ce n'est pas IE7 sur XP qui pose problème, comme je craignais, mais FF sur Android!
Juste pour info, ton menu n'est pas accessible au clavier. IL faut un tabindex=0 sur l'élément cliquable, et le symbole utilisé est inconnu des lecteurs d'écran qui ne lisent pas.

De plus je suis d'avis que le "Page 12/12" devrait aussi être cliquable. Sur tablette/téléphone il n'y a peut-être pas beaucoup de place mais justement, ça risque de mettre en difficulté ceux qui ne sont pas suffisament agiles pour cliquer pile sur le symbole.

Évite les menus déroulants à la souris, c'est une catastrophe pour l'accessibilité.
Modifié par QuentinC (18 Nov 2015 - 07:39)
QuentinC a écrit :
Juste pour info, ton menu n'est pas accessible au clavier. IL faut un tabindex=0 sur l'élément cliquable, et le symbole utilisé est inconnu des lecteurs d'écran qui ne lisent pas.

Il y a des dizaines de liens sur chaque page, à commencer par un menu déroulant en tête que je n'ai pas reproduit sur la page de test, dont le seul but est d'éclairer un peu le contexte.
Je ne connais rien aux technos d'accessibilité, mais une petite exploration du DOM permet de trouver tous les liens d'une page, je ne comprends pas pourquoi il faut ajouter des tabindex. C'est tout simplement le signe que les gens qui font des navigateurs se fichent pas mal de la navigation au clavier.
Moyennant quoi je peux effectivement ajouter des tabindex en JS après le chargement de la page, mais ce n'est pas ma priorité, et il faudrait sans doute une réflexion sur quels liens doivent ou non avoir un tabindex, dans quel ordre, etc.

QuentinC a écrit :
De plus je suis d'avis que le "Page 12/12" devrait aussi être cliquable. Sur tablette/téléphone il n'y a peut-être pas beaucoup de place mais justement, ça risque de mettre en difficulté ceux qui ne sont pas suffisamment agiles pour cliquer pile sur le symbole.

Si je rends la "racine" cliquable, cela veut dire qu'il faut stopper la propagation, pour éviter qu'un clic sur un "enfant" remonte jusqu'à la racine ce qui pose des problèmes sur les vieux navigateurs qui ne supportent pas stopPropagation(); vous me direz que les vieux navigateurs ne tournent pas sur tablette, mais dans la mesure du possible je ne tiens pas à avoir du code divergeant entre les différents media. Et par ailleurs je n'ai toujours pas trouvé comment être sûr qu'un media est un "touch" bidule.

QuentinC a écrit :
Évite les menus déroulants à la souris, c'est une catastrophe pour l'accessibilité

A mon sens, ce qui est surtout une catastrophe pour l'accessibilité, c'est que les navigateurs du marché s'en contrefichent. Il est contradictoire de prétendre faire des "balises sémantiques" et devoir ajouter des "roles" et autres choses du même genre dans lesdites balises. Il ne devrait pas y avoir quoi que ce soit à faire pour qu'une page soit "accessible". C'est le navigateur qui devrait se débrouiller, quitte à donner quelques recommandations pour faciliter le travail.

Rien dans ce site n'est prévu pour l'accessibilité autre que depuis un PC avec souris. L'opération actuelle consiste à le rendre accessible à peu près correctement depuis une tablette, sachant que de plus en plus de personnes (dont moi-même) utilisent des tablettes pour consulter ce genre de site (images commentées).

Dans la mesure où nous ne sommes que deux, et que je suis le seul ayant quelques compétences techniques, je ne tiens pas à disperser mes efforts à apprendre et mettre en œuvre des techniques dans de nouveaux domaines. Il y a par exemple sur ce site des "visites 3D" qui ne fonctionnent plus depuis que Chrome et consort ont décidé de ne plus supporter certains plug-ins pour des raisons prétendument de sécurité. Nous avons décidé pour le moment de ne pas investir dans ce domaine, mais ce sera sans doute la prochaine étape.

Si on décide un jour de faire une opération "accessibilité", il faudra que je commence par comprendre comment ça fonctionne, et en premier lieu ce qu'il faut faire des images dans un tel contexte, et je ne manquerai pas de faire appel aux compétences des spécialistes de ce forum.

Mais tout cela nous entraine très loin de la question initiale:
http://paralletes.free.fr/tests/photo/hamburger.png
POURQUOI FF/ANDROID MET IL LE HAMBURGER AU DESSOUS DE LA ZONE "PAGE 12/12" ?

et la question subsidiaire qui va de soi:

QUE FAUT IL CHANGER DANS MON CODE POUR QUE FF/ANDROID METTE LE HAMBURGER AU BON ENDROIT ?

Merci de votre aide
Modifié par PapyJP (18 Nov 2015 - 10:09)
J'ai fait un essai en remplaçant le caractère "hamburger" par une image http://paralletes.free.fr/brownH.png .
D'un seul coup tout fonctionne, l'image n'est plus décalée, etc.

Il semble que la règle soit:

NE JAMAIS UTILISER DES CARACTÈRES GRAPHIQUES, ILS NE SONT PAS SUPPORTES PAR TOUS LES NAVIGATEURS.


Un peu similaire à http://forum.alsacreations.com/topic-4-77262-1-RnsoluGrosguillemets.html
où j'ai découvert que Chrome ne supporte pas les espaces autre que " " et "&nbsp;".

J'espère que le temps que nous avons passé à essayer de comprendre ce qui se passait n'a pas été perdu pour tout le monde.
Modifié par PapyJP (18 Nov 2015 - 19:06)
a écrit :
Je ne connais rien aux technos d'accessibilité, mais une petite exploration du DOM permet de trouver tous les liens d'une page, je ne comprends pas pourquoi il faut ajouter des tabindex. C'est tout simplement le signe que les gens qui font des navigateurs se fichent pas mal de la navigation au clavier.


Oui, mais...
1 - Les liens en display:none ne sont pas listés. Un lecteur d'écran étant, comme son nom l'indique, un dispositif qui vocalise ce qui se trouve à l'écran, ce qui est masqué visuellement doit l'être aussi vocalement; question de logique.
2 - Ton symbole n'est pas un vrai lien, c'est un div ou un span bidouillé. C'est donc à toi que revient la charge de renseigner le rôle correct et de gérer son fonctionnement pour qu'il se comporte comme un lien ordinaire.

Gérer le fonctionnement d'un élément personnalisé pour qu'il se comporte exactement comme si, ce n'est pas quelque chose d'évident et ça nécéssite d'être scrupuleusement testé dans plein de configurations variées; en fait, dans 99.99% des cas sur 99.99% des sites web du monde ce n'est pas fait correctement jusqu'au bout.
D'où l'article posté par Raphaël, conseillant au maximum d'utiliser les éléments préconçus pour leur usage avec leurs rôles implicites, avant de prendre la voie du composant personnalisé; simplement parce que faire un composant personnalisé qui est aussi accessible que son homologue natif est très difficile.


a écrit :
et il faudrait sans doute une réflexion sur quels liens doivent ou non avoir un tabindex, dans quel ordre, etc.


Tous les liens sont focusables par défaut et il n'y a pas de raison de changer ce comportement. Quant à l'ordre, la valeur 0 permet justement de ne pas avoir à y réfléchir. Tabindex=0 indique que l'élément doit être focusable et qu'il doit s'insérer dans l'ordre naturel du DOM.

a écrit :
Si je rends la "racine" cliquable, cela veut dire qu'il faut stopper la propagation, pour éviter qu'un clic sur un "enfant" remonte jusqu'à la racine ce qui pose des problèmes sur les vieux navigateurs qui ne supportent pas stopPropagation(); vous me direz que les vieux navigateurs ne tournent pas sur tablette, mais dans la mesure du possible je ne tiens pas à avoir du code divergeant entre les différents media.


Je ne vois pas le rapport. Tu mets "Page 12/12" en lien ou en un autre span est c'est réglé en 5 secondes, et tu ne te casses pas la tête avec des problèmes depropagation des évènements aux potentiels enfants.

a écrit :
Et par ailleurs je n'ai toujours pas trouvé comment être sûr qu'un media est un "touch" bidule


Si tu construisais des pages accessibles, tu n'aurais même pas à te poser cette question.

a écrit :
A mon sens, ce qui est surtout une catastrophe pour l'accessibilité, c'est que les navigateurs du marché s'en contrefichent. Il est contradictoire de prétendre faire des "balises sémantiques" et devoir ajouter des "roles" et autres choses du même genre dans lesdites balises. Il ne devrait pas y avoir quoi que ce soit à faire pour qu'une page soit "accessible". C'est le navigateur qui devrait se débrouiller, quitte à donner quelques recommandations pour faciliter le travail.


Les éléments standards avec leurs rôles implicites sont là. Si tu les utilises correctement, tu es à peu près certain de faire une page accessible sans rien avoir à faire d'autre.

Après, dès le moment où tu utilises des composants personalisés à base de conteneurs génériques type div/span ou si tu détournes certains éléments de leur utilisation prévue, les navigateurs tout comme les aides techniques ne sont pas magiques, ils ne peuvent pas deviner tes intentions; tu dois les expliciter clairement.

LE souci principal étant que, malgré la richesse de HTML, la majorité des gens n'arrivent pas à se contenter de ce qui existe de base.
Et si, après toutes les années que HTML existe, personne n'a jamais sérieusement pensé à standardiser les menus déroulants à la souris, c'est sûrement parce qu'au fond, c'est probablement une mauvaise idée. Je ne dis pas que HTML n'a pas de lacunes, mais elles se font de plus en plus rares.