Encore une autre ancre positionnement bizarrerie
Positionnement de l'ancrage CSS: une caractéristique surprenante, mais il y a des problèmes délicats. Bien qu'il ne change pas la donne comme Flexbox ou Grid, il comble l'écart dans le positionnement du CSS pendant des décennies. Cependant, il a également des caractéristiques uniques qui conduisent à un comportement déroutant. Cet article explorera un problème de positionnement d'ancrage qui m'a troublé depuis longtemps.
Origin
J'ai découvert ce problème il y a un mois en lisant le cas de quelqu'un d'autre de positionnement de l'ancrage, en particulier l'article de Temani Afif sur "le positionnement de l'ancrage et l'animation axée sur le défilement". Nous recommandons fortement de lire cet article pour voir ce qui a attiré mon attention. Il combine intelligemment le positionnement de l'ancrage et les animations pilotées par défilement pour créer un curseur de plage qui change également la couleur à mesure que le progrès change.
Ce qui est encore plus étonnant, c'est qu'il utilise deux éléments cibles avec le même nom d'ancrage, chaque élément attaché à son point d'ancrage correspondant, comme la magie. Si cela ne semble pas intéressant, nous devons passer brièvement comment fonctionne le positionnement de l'ancrage.
CSS Position d'ancrage et attribut d'ancrage-scope
Veuillez vous référer à notre guide complet de positionnement de l'ancrage CSS pour une compréhension plus approfondie.
Le positionnement de l'ancrage apporte deux nouveaux concepts à l'élément CSS: Anchor Point et Target . Une ancre est un élément de référence utilisé pour localiser d'autres éléments. L'élément cible est un élément qui est absolument positionné par rapport à un ou plusieurs points d'ancrage.
Les ancres et les cibles peuvent être presque n'importe quel élément, vous pouvez les considérer comme deux divs placés côte à côte:
<code><div>anchor</div> <div>target</div></code>
Tout d'abord, nous devons enregistrer l'élément d'ancrage dans CSS en utilisant l'attribut anchor-name
:
<code>.anchor { anchor-name: --my-anchor; }</code>
Ensuite, utilisez l'attribut position-anchor
sur l'élément absolument positionné pour le fixer à un point d'ancrage avec le même nom. Cependant, pour déplacer la cible autour du point d'ancrage, nous avons besoin de l'attribut position-area
.
<code>.target { position: absolute; position-anchor: --my-anchor; position-area: top right; }</code>
Cela fonctionne bien, mais si nous changeons le marqueur pour inclure plus d'ancres et de cibles, la situation devient compliquée:
<code></code>
- ancre 1cible 1
- ancre 2cible 2
- ancre 3cible 3
L'élément cible n'est pas attaché à son point d'ancrage le plus proche, mais est tout empilé sur le dernier point d'ancrage enregistré dans le DOM.
L'attribut anchor-scope
a été introduit dans Chrome 131 pour résoudre ce problème. Il limite la portée de l'ancrage pointe vers les sous-arbres afin que chaque cible soit correctement attachée. Cependant, je ne veux pas prêter attention à cette propriété, car ce qui a attiré mon attention au départ, c'est que temani ne l'utilisait pas . Pour une raison quelconque, toutes les cibles sont attachées correctement, encore une fois comme la magie.
Que s'est-il passé?
La cible est généralement attachée à la dernière ancre du DOM, pas son ancre la plus proche, mais dans notre premier exemple, nous voyons deux ancres avec le même anchor-name
et leurs cibles supplémentaires correspondantes. Tout cela n'utilise pas l'attribut anchor-scope
. ce qui s'est passé?
Deux mots: contient un bloc .
Il convient de noter sur le positionnement de l'ancrage qu'il dépend dans une large mesure de la façon dont les éléments contiennent des blocs. Ce n'est pas une caractéristique inhérente du positionnement de l'ancrage lui-même, mais une caractéristique de positionnement absolu. Un élément absolument positionné est positionné par rapport à son bloc de confinement, tandis que les attributs de marge comme top: 0px
, left: 30px
ou inset: 1rem
déplacent simplement des éléments autour de la limite du bloc contenant, créant le bloc d'inclusion soi-disant modifié .
La cible attachée à l'ancre n'est pas différente. position-area
(généralement static
). Temani profite de ce fait pour créer un nouveau bloc d'inclusion pour chaque curseur afin qu'ils ne puissent être attachés qu'à leurs points d'ancrage correspondants. Si vous regardez le code, vous pouvez le trouver au début: relative
<code><div>anchor</div> <div>target</div></code>
une autre question
Au lieu d'utiliser l'attribut
pour attacher chaque ancre à sa cible respective, nous profitons de la façon de calculer le bloc contenant des éléments absolus. Cependant, il existe un autre moyen, sans aucun code supplémentaire requis. anchor-scope
Logiquement, chaque note de bas de page est un objectif, mais le choix des points d'ancrage est un peu délicat. J'ai d'abord pensé que chaque paragraphe pouvait être utilisé comme ancre, mais cela signifie qu'il y aura plusieurs ancres avec le même
. Résultat: toutes les cibles seront empilées sur la dernière ancre: anchor-name
, nous réduisons donc le nombre d'ancres à un, en utilisant un élément qui peut être une ancre courante pour toutes les cibles. anchor-name
Dans ce cas, nous voulons positionner chaque cible uniquement des deux côtés du poteau, nous pouvons donc utiliser le corps entier du poteau comme ancre, et comme chaque cible est naturellement alignée sur l'axe vertical, il ne reste plus que de les déplacer le long de l'axe horizontal:
Vous pouvez mieux vérifier comment le message d'origine a été fait!
Conclusion
anchor-scope
Probablement une propriété CSS récemment publiée au navigateur (jusqu'à présent, uniquement dans Chrome 131), nous ne pouvons donc pas nous attendre à ce que son soutien dépasse les attentes. Bien que j'aimerais l'utiliser à tout moment, n'importe où, il restera limité aux démos courtes pendant un certain temps. Ce n'est pas une raison de limiter l'utilisation d'autres propriétés de positionnement d'ancrage, qui sont soutenues dans Chrome 125 et plus tard (et espérons-le dans d'autres navigateurs dans un avenir proche), donc j'espère que ces problèmes mineurs pourront vous aider à continuer à utiliser le positionnement de l'ancrage sans aucun souci.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

L'autre jour, j'ai repéré ce morceau particulièrement charmant sur le site Web de Corey Ginnivan où une collection de cartes se cassent les uns sur les autres pendant que vous faites défiler.

Je vois que Google Fonts a déployé un nouveau design (tweet). Comparé à la dernière grande refonte, cela semble beaucoup plus itératif. Je peux à peine faire la différence

Avez-vous déjà eu besoin d'un compte à rebours sur un projet? Pour quelque chose comme ça, il pourrait être naturel d'atteindre un plugin, mais c'est en fait beaucoup plus

Questions sur les zones de slash violet dans les dispositions flexibles Lorsque vous utilisez des dispositions flexibles, vous pouvez rencontrer des phénomènes déroutants, comme dans les outils du développeur (D ...

Lorsque le nombre d'éléments n'est pas fixé, comment sélectionner le premier élément enfant du nom de classe spécifié via CSS. Lors du traitement de la structure HTML, vous rencontrez souvent différents éléments ...

Tout ce que vous avez toujours voulu savoir sur les attributs de données dans HTML, CSS et JavaScript.

Au début d'un nouveau projet, la compilation SASS se produit en un clin d'œil. Cela se sent bien, surtout quand il est associé à BrowSersync, qui recharge

Comment implémenter des fenêtres dans le développement frontal ...
