5553 sujets

Sémantique web et HTML

Pages :
Modérateur
(reprise du message précédent)

Bonjour,

Le lien https://developer.mozilla.org/fr/docs/Web/HTML/Element/input#capture devrait fonctionner y compris avec chrome.

Mais il y a peut-être dans cette page du bricolage avec du js qui l'empêche d'aller à l'ancre comme attendu. J'ai fait le test avec safari : si js est activé, ça ne va pas à l'ancre directement . Si js est désactivé, ça va à l'ancre directement. Je vous laisse le soin de faire le test avec Chrome. Smiley lol

Note : attention, la page est longue à charger, il faut être patient avant que ça aille jusqu'à l'ancre.

Amicalement,
Modifié par parsimonhi (20 Nov 2023 - 14:48)
parsimonhi a écrit :
Bonjour,

Le lien https://developer.mozilla.org/fr/docs/Web/HTML/Element/input#capture devrait fonctionner y compris avec chrome.

Mais il y a peut-être dans cette page du bricolage avec du js qui l'empêche d'aller à l'ancre comme attendu. J'ai fait le test avec safari : si js est activé, ça ne va pas à l'ancre directement . Si js est désactivé, ça va à l'ancre directement. Je vous laisse le soin de faire le test avec Chrome. Smiley lol


non, ça ne fonctionne pas avec Chrome, ni avec Edge.
J'ai attendu plus d'une minute après son affichage et elle reste désespérément en début de page.
parsimonhi a écrit :
Bonjour,

Le lien https://developer.mozilla.org/fr/docs/Web/HTML/Element/input#capture devrait fonctionner y compris avec chrome.

Mais il y a peut-être dans cette page du bricolage avec du js qui l'empêche d'aller à l'ancre comme attendu. J'ai fait le test avec safari : si js est activé, ça ne va pas à l'ancre directement . Si js est désactivé, ça va à l'ancre directement. Je vous laisse le soin de faire le test avec Chrome. Smiley lol

Note : attention, la page est longue à charger, il faut être patient avant que ça aille jusqu'à l'ancre.

Amicalement,


Non, ça ne fonctionne pas avec Chrome ni avec Edge.
J'ai attendu plus d'une minute et la page reste désespérément au début.
J'ai retesté avec chrome et Edge, ça ne fonctionne pas.
La page reste désespérément au début même après avoir attendu 1 minute.
De toute façon les utilisateurs ne vont pas attendre un scroll sur une minute.

Il serait temps de faire le deuil de cette solution qui de toute façon n'est pas viable à long terme.

Rien que pour des sites comme Adobe ou Google, quand on voit la célérité avec laquelle ils changent les URL de leurs outils les plus célèbres, vous pensez bien que s'il s'agit de la section d'une page d'un site lambda...
Modérateur
Bonjour,

Ce n'est pas la question d'attendre 1 mn. Il faudrait surtout que l'internaute désactive javascript pour le site https://developer.mozilla.org. Donc oui, un lien vers une ancre de ce site semble ne pas être utilisable.

Par contre, dans le cas général, un lien vers une ancre d'un site (c'est à dire vers un élément ayant un id) fonctionne sur tous les navigateurs sans qu'on ait besoin de désactiver javascript. Par exemple, le lien suivant semble fonctionner très bien : https://forum.alsacreations.com/forum.php#p578983

Et on peut aussi éventuellement signaler le problème aux développeurs de https://developer.mozilla.org car ce n'est rien de plus qu'un bug chez eux.

Amicalement,
Modifié par parsimonhi (21 Nov 2023 - 10:10)
parsimonhi a écrit :
Par exemple, le lien suivant semble fonctionner très bien : https://forum.alsacreations.com/forum.php#p578983

Celui-là non mais comme ça oui : https://forum.alsacreations.com/topic-2-90719-2-Comment-utiliser-un-lien-local-sur-un-site-web-deja-existant-Y.html#p578983

Sinon, pour cibler l'ID d'un élément qui n'est pas un lien, je me suis fais un petit script maison :
if (window.location.hash) window.addEventListener('load', () => {
  const scroll = () => document.querySelector(window.location.hash).scrollIntoView()
  setTimeout(scroll, 2000) // @note On laisse le temps au visiteur de voir l'entête de la page avant le scroll vers l'ancre.
})
Modérateur
Bonjour,

Olivier C a écrit :

Celui-là non mais comme ça oui : https://forum.alsacreations.com/topic-2-90719-2-Comment-utiliser-un-lien-local-sur-un-site-web-deja-existant-Y.html#p578983


J'étais justement sur le point de remplacer mon lien par celui que tu proposes. Smiley smile

Il me semble que les 2 fonctionnent (en tout cas ils fonctionnent chez moi). Mais ton lien est mieux car il fonctionnera même quand le message p578983 ne sera plus sur la page https://forum.alsacreations.com/forum.php (alors qu'il n'est pas clair que mon lien fonctionnera toujours dans ce cas).

Amicalement,
Modérateur
Bonjour,

Cibler l'ID d'un élément qui n'est pas un lien ?????

Cibler un élément qui n'est pas un lien se cible exactement pareil que cibler un élément qui est un lien (il faut dans les cas qu'ils aient un id et c'est tout).

Je ne comprends pas bien la finalité de ton code.

Amicalement,
Modifié par parsimonhi (21 Nov 2023 - 10:25)
Effectivement, il faut que je précise :

- Si l'ID cible est atteinte par un hash href déjà présent sur même page, alors ok, pas de problème.
- Par contre, si je veux atteindre cette même ID (sur un élément qui n'est pas un lien) à partir d'une autre page, nop.

Testez avec ceci par exemple (nop) : https://developer.mozilla.org/fr/docs/Web/CSS/CSS_grid_layout#r%C3%A9f%C3%A9rence

Alors qu'avec ma solution JS (ok) : https://scriptura.github.io/page/components.html#section-accordions
Modérateur
Bonjour,

Olivier C a écrit :
Effectivement, il faut que je précise :

- Si l'ID cible est atteinte par un hash href déjà présent sur même page, alors ok, pas de problème.
- Par contre, si je veux atteindre cette même ID (sur un élément qui n'est pas un lien) à partir d'une autre page, nop.

Testez avec ceci par exemple (nop) : https://developer.mozilla.org/fr/docs/Web/CSS/CSS_grid_layout#r%C3%A9f%C3%A9rence

Alors qu'avec ma solution JS (ok) : https://scriptura.github.io/page/components.html#section-accordions

Moi toujours pas comprendre.

Encore une fois, ça ne marche pas pour https://developer.mozilla.org parce qu'ils ont mis dans leurs pages des scripts javascript qui s'amusent à scroller la page un peu n'importe comment. Mais ça marcherait sans ces scripts (et c'est pourquoi ça marche d'ailleurs si on désactive javascript quand on visite ce site).

Et encore une fois, on s'en fiche totalement que l'élément cible soit un lien ou pas.

Si par exemple tu cliques sur https://jeudego.org/#jdgTitle (site dont je m'occupe), ça marche très bien, l'élément cible est un h1, et il n'y a besoin d'aucune combine javascript pour faire marcher ça.

Essaie de retirer ton script js sur ta page et tu verras que ça marche sans problème quand même.

Amicalement,
Modifié par parsimonhi (21 Nov 2023 - 13:45)
Effectivement tu as raison. Sur Stackoverflow ça marche très bien aussi.

Mon script était destiné avant tout à cibler des ancres injectées après coup dans la page. Et du coup le script impacte tous mes liens. Il faut que je revoie ça, que je réduise son scope...
Modifié par Olivier C (21 Nov 2023 - 14:31)
Et bien au final ma réponse est moins tranchée :

J'ai viré mon script et si Firefox ne pose pas de problème pour arriver à une ID ciblée par le hash ce n'est pas du tout le cas de Chrome sur les pages avec un contenu conséquent. Et effectivement lorsque j'ai créé ce script je me souviens avoir testé essentiellement sous Chrome.

Bref, je vais peut-être apporter une modification au script mais chez moi il reste nécessaire pour doubler le comportement par défaut lorsque ce dernier échoue.

_______________________________
Édit. Voici le même script que précédement avec les explications et sans temporisation pour être au plus proche de la fonction native :
// -----------------------------------------------------------------------------
// @section     URL.hash & ID
// @description Si URL avec un hash, alors défilement jusqu'à l'ID cible.
// -----------------------------------------------------------------------------

/**
 *  @note Ce script double le comportement par défaut des navigateurs, se dernier se révélant défaillant sous Chrome, que ce soit pour les pages dotées d'un contenu conséquent ou en raison d'ancres créés en JavaScript après le chargement initial de la page (comme avec notre fonction lineMarks). Firefox ne souffre pas de ces limitations.
 *  @note Si le comportement de base s'applique avec succès, le script ne servira simplement à rien dans ce cas, sans engendrer de conflit.
 */

if (window.location.hash) window.addEventListener('load', () => {
  const scroll = () => document.querySelector(window.location.hash).scrollIntoView()
  //setTimeout(scroll, 1000) // @note Correction du fonctionnement après un laps de temps. 
  scroll() // Lancement du script dès sa disponibilité.
})

Modifié par Olivier C (21 Nov 2023 - 21:28)
Modérateur
Bonjour,

Olivier C a écrit :
Bref, je vais peut-être apporter une modification au script mais chez moi il reste nécessaire pour doubler le comportement par défaut lorsque ce dernier échoue.

Je continue de penser que ce bricolage est une mauvaise idée. Et je suis curieux de savoir dans quel cas exactement "ça ne marche pas avec Chrome".

Amicalement,
Je n'irais pas jusqu'à dire que cela ne fonctionne pas du tout, mais globalement je trouve que ça fonctionne mal avec les pages dotées d'un contenu conséquent (et je le redis, sous Firefox pas de problème).

Voici une URL de mon site pour tester : https://scriptura.github.io/page/components.html.
Modifié par Olivier C (22 Nov 2023 - 18:09)
Modérateur
Bonjour,

Je ne vois guère de problème si ce n'est que ton script à pour effet de revenir à l'ancre en cas de rafraichissement de la page. Or, Chrome par défaut reste à l'endroit où on est en cas de rafraichissement d'une page avec un hashtag, et ne va pas à l'ancre correspondante. Ce n'est pas un bug, mais une fonctionnalité du navigateur. Ton script empêche Chrome d'avoir son comportement par défaut.

Ce comportement par défaut est un choix du navigateur et non une obligation. Mais on notera qu'on peut avoir quelques raisons de vouloir rester au même endroit en cas de rafraichissement. Par exemple :
- quand il y a des pubs sur la page qui essaient de faire scroller la page vers l'endroit où elles sont intempestivement,
- quand on navigue en utilisant des fonctions d'accessibilité,
- quand on a eu besoin de configurer le navigateur de manière spécifique (y a pas mal de paramètres dans Chrome qui modifie la manière dont le navigateur doit scroller : voir chrome://flags/ ou faire une recherche sur internet avec les mots clés "scroll" et "anchoring" par exemple).

Bref, ton script ne peut que perturber la navigation des gens qui ont l'habitude de leur navigateur. Et s'il est possible que Firefox ait un comportement plus proche de celui que tu attends, ce n'est pas une raison pour l'imposer sur tous les navigateurs. En plus de ça, ça peut probablement pénaliser (certes légèrement) le SEO.

Ceci étant, il est aussi possible qu'il y ait des bugs en la matière avec Chrome. Auquel cas ton script pourrait avoir du sens. Le monde est imparfait !

Amicalement,
parsimonhi a écrit :
Je ne vois guère de problème si ce n'est que ton script à pour effet de revenir à l'ancre en cas de rafraichissement de la page. Or, Chrome par défaut reste à l'endroit où on est en cas de rafraichissement d'une page avec un hashtag, et ne va pas à l'ancre correspondante. Ce n'est pas un bug, mais une fonctionnalité du navigateur. Ton script empêche Chrome d'avoir son comportement par défaut.

Je dois dire que c'est un excellent argument.

Je vois ce dont tu parles pour le rafraîchissement de la page avec Chrome. Je pense effectivement qu'il ne faut pas contrarier ce comportement, quand bien même le premier comportement recherché serait imparfait pour certaines pages.

Bref, tu m'as convaincu.

Merci pour ton intervention.
Modifié par Olivier C (22 Nov 2023 - 22:43)