Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

offset-anchor

Baseline Large disponibilité

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis août 2023.

>

La propriété CSS offset-anchor définit le point à l'intérieur de la boîte d'un élément se déplaçant le long d'un offset-path qui est effectivement en mouvement le long du chemin.

Exemple interactif

offset-anchor: auto;
offset-anchor: right top;
offset-anchor: left bottom;
offset-anchor: 20% 80%;
<section class="default-example" id="default-example">
  <div class="wrapper">
    <div id="example-element"></div>
  </div>
  <button id="playback" type="button">Lecture</button>
</section>
#example-element {
  offset-path: path("M 0,20 L 200,20");
  animation: distance 3000ms infinite alternate ease-in-out;
  width: 40px;
  height: 40px;
  background: cyan;
  animation-play-state: paused;
}

#example-element.running {
  animation-play-state: running;
}

.wrapper {
  background-image: linear-gradient(
    to bottom,
    transparent,
    transparent 49%,
    black 50%,
    black 51%,
    transparent 52%
  );
  border: 1px solid #cccccc;
  width: 90%;
}

@keyframes distance {
  0% {
    offset-distance: 0%;
  }
  100% {
    offset-distance: 100%;
  }
}

#playback {
  position: absolute;
  top: 0;
  left: 0;
  font-size: 1em;
}
const example = document.getElementById("example-element");
const button = document.getElementById("playback");

button.addEventListener("click", () => {
  if (example.classList.contains("running")) {
    example.classList.remove("running");
    button.textContent = "Lecture";
  } else {
    example.classList.add("running");
    button.textContent = "Pause";
  }
});

Syntaxe

css
/* Valeurs avec un mot-clé */
offset-anchor: top;
offset-anchor: bottom;
offset-anchor: left;
offset-anchor: right;
offset-anchor: center;
offset-anchor: auto;

/* Valeurs de type <percentage> */
offset-anchor: 25% 75%;

/* Valeurs de type <length> */
offset-anchor: 0 0;
offset-anchor: 1cm 2cm;
offset-anchor: 10ch 8em;

/* Valeurs de décalage relatives à un bord */
offset-anchor: bottom 10px right 20px;
offset-anchor: right 3em bottom 10px;

/* Valeurs globales */
offset-anchor: inherit;
offset-anchor: initial;
offset-anchor: revert;
offset-anchor: revert-layer;
offset-anchor: unset;

Valeurs

auto

offset-anchor reçoit la même valeur que transform-origin sauf si offset-path vaut none, dans ce cas, elle récupère la valeur de offset-position.

<position>

Une position (<position>) définie par un couple de coordonnées X/Y qui permet de placer un objet par rapport aux bords de sa boîte. On peut définir la position à partir de une à quatre valeurs. Pour plus d'informations, voir les pages sur <position> et background-position. La syntaxe à trois valeurs ne fonctionne pas pour <position>, excepté pour background(-position).

Définition formelle

Valeur initialeauto
Applicabilitééléments transformables
Héritéenon
Pourcentagesrelatifs à la largeur et à la hauteur de la boîte de référence de l'élément
Valeur calculéepour une valeur de type <length> sa valeur absolue, sinon un pourcentage
Type d'animationune position

Syntaxe formelle

offset-anchor = 
auto |
<position>

<position> =
<position-one> |
<position-two> |
<position-four>

<position-one> =
left |
center |
right |
top |
bottom |
x-start |
x-end |
y-start |
y-end |
block-start |
block-end |
inline-start |
inline-end |
<length-percentage>

<position-two> =
[ left | center | right | x-start | x-end ] && [ top | center | bottom | y-start | y-end ] |
[ left | center | right | x-start | x-end | <length-percentage> ] [ top | center | bottom | y-start | y-end | <length-percentage> ] |
[ block-start | center | block-end ] && [ inline-start | center | inline-end ] |
[ start | center | end ]{2}

<position-four> =
[ [ left | right | x-start | x-end ] <length-percentage> ] && [ [ top | bottom | y-start | y-end ] <length-percentage> ] |
[ [ block-start | block-end ] <length-percentage> ] && [ [ inline-start | inline-end ] <length-percentage> ] |
[ [ start | end ] <length-percentage> ]{2}

<length-percentage> =
<length> |
<percentage>

Exemples

>

Définir différentes valeurs de offset-anchor

Dans l'exemple suivant, nous avons trois éléments <div> imbriqués dans des éléments <section>. Chaque <div> reçoit le même offset-path (une ligne horizontale de 200 pixels de long) et est animé pour se déplacer le long de celle-ci. Les trois reçoivent ensuite différentes valeurs de background-color et de offset-anchor.

Chaque <section> a été mis en forme avec un dégradé linéaire pour lui donner une ligne horizontale traversant son centre, afin de vous donner un affichage visuel de l'endroit où les chemins d'encart des <div> se trouvent.

Cela vous permet de voir quel effet ont les différentes valeurs de offset-anchor — la première, auto, fait se déplacer le point central du <div> le long du chemin. Les deux autres font se déplacer respectivement les points supérieur droit et inférieur gauche du <div> le long du chemin.

HTML

html
<section>
  <div class="offset-anchor1"></div>
</section>
<section>
  <div class="offset-anchor2"></div>
</section>
<section>
  <div class="offset-anchor3"></div>
</section>

CSS

css
div {
  offset-path: path("M 0,20 L 200,20");
  animation: move 3000ms infinite alternate ease-in-out;
  width: 40px;
  height: 40px;
}

section {
  background-image: linear-gradient(
    to bottom,
    transparent,
    transparent 49%,
    black 50%,
    black 51%,
    transparent 52%
  );
  border: 1px solid #cccccc;
  margin-bottom: 10px;
}

.offset-anchor1 {
  offset-anchor: auto;
  background: cyan;
}

.offset-anchor2 {
  offset-anchor: right top;
  background: purple;
}

.offset-anchor3 {
  offset-anchor: left bottom;
  background: magenta;
}

@keyframes move {
  0% {
    offset-distance: 0%;
  }
  100% {
    offset-distance: 100%;
  }
}

Résultat

Spécifications

Spécification
Motion Path Module Level 1>
# offset-anchor-property>

Compatibilité des navigateurs

Voir aussi