Skip to content

Add position-anchor: normal#29483

Merged
caugner merged 3 commits into
mdn:mainfrom
ddbeck:position-anchor-normal
Apr 22, 2026
Merged

Add position-anchor: normal#29483
caugner merged 3 commits into
mdn:mainfrom
ddbeck:position-anchor-normal

Conversation

@ddbeck

@ddbeck ddbeck commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Summary

This adds an entry for position-anchor: normal, even though it's not implemented anywhere yet.

Test results and supporting details

Ordinarily, I would not track something that does not have an implementation. However, it makes the existing notes difficult to understand, citing behaviors that were, at one time, standard but are no longer. Since there's no consensus implementation, I think it's easier to understand what's going on here with these changes.

While I was here, I corrected the data for Chrome's initial value and note for Safari. I had previously erred in writing the notes in #29272. To "test" the initial value, I used the browsers' dev tools to inspect the computed value on an unstyled element.

Related issues

@github-actions github-actions Bot added data:css Compat data for CSS features. https://developer.mozilla.org/docs/Web/CSS size:m [PR only] 25-100 LoC changed labels Apr 14, 2026
@github-actions

github-actions Bot commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Tip: Review these changes grouped by change (recommended for most PRs), or grouped by feature (for large PRs).

Comment on lines 17 to 28
{
"version_added": "125",
"version_added": "127",
"version_removed": "144",
"partial_implementation": true,
"notes": "The initial value is `normal` instead of `none` (see [bug 460415950](https://crbug.com/460415950))."
"notes": "The initial value is `auto` instead of `normal` (see [bug 460415950](https://crbug.com/460415950))."
},
{
"version_added": "125",
"version_removed": "127",
"partial_implementation": true,
"notes": "The initial value is `implicit` instead of `normal` (see [bug 340878604](https://crbug.com/340878604))."
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see the necessity for two separate statements. In fact, merging them would bring the evolution of the initial value closer together:

"Before Chrome 127, the initial value is implicitinstead ofnormal(see [bug 340878604](https://crbug.com/340878604)). Since Chrome 127, the initial value isautoinstead ofnormal (see [bug 460415950](https://crbug.com/460415950)).

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we'd be serving developers by suggesting that Chrome 125 to 144 represented a single implementation. The behavior of implicit is much closer to normal than auto is to normal. How the successive releases are broken is not just inconsistent with today's spec, but also inconsistent with Chrome's own implementations.

To put this another way, if Chrome had unshipped the implicit implementation in 128, then shipped the new auto implementation in 129, we would have no choice but to have multiple compat statements. This to me is closer in meaning to what is going on here than to collapse the two statements.

@caugner caugner Apr 22, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we'd be serving developers by suggesting that Chrome 125 to 144 represented a single implementation.

I disagree that combining the partial implementation period in a single statement suggests this is a "single" implementation (whatever that means). In my opinion, what is most relevant for developers is the version range of partial support, and the start version of full support. To understand the evolution of the partial support, they can then look at the partial statement's notes.

But I won't insist here.

{
"version_added": "144"
"version_added": "144",
"notes": "The initial value is `none` instead of `normal` (see [bug 501399489](https://crbug.com/501399489))."

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: According to https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/position-anchor#none, none is the initial value, but the spec defines normal as the initial value. So the MDN page should also be updated.

Given that each browser has notes here, would this not warrant a subfeature initial_value_is_normal that none of the browsers support, with notes what the initial value is instead in different version ranges?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did contemplate a one or more subfeatures, however I don't think there is a good case to be made for one here. There are a few issues with using subfeatures:

  • The spec evolution wasn't additive (e.g., like the contextual subfeature example in the guidelines). In a sense, you'd have to look to the initial_value_is_normal feature to know whether position-anchor itself is consistent between browsers.
  • This implied to me that we'd end up bubbling up the partial implementation to the parent feature. That would go against the spirit, if not the letter, of the behavioral subfeature guideline's recommendation to avoid subfeatures for data that "would be the same, across all browsers, as the parent feature."
  • Once all browsers ship normal, the initial_value_is_normal data would effectively duplicate the normal subfeature data, if you ignored the historic details. This also struck me as contrary to the spirit of the behavioral subfeature guideline.
  • If we used one subfeature, it's hard not to make the argument for multiple subfeatures (e.g., show each change in initial value, deprecating the old ones). This struck me as needlessly noisy.

That said, I will acknowledge that this PR does imply that we ought to make an implicit (deprecated) subfeature. I didn't do it because only one browser shipped it for a few months and it'll get deleted in a year anyway.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As for the docs, I expect that'll get resolved shortly. https://bugzilla.mozilla.org/show_bug.cgi?id=2030351 has dev-doc-needed; it should hit beta next week, so I figured the usual process would take that up.

@ddbeck ddbeck left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because I was reading the guidelines, I ended up catching some missing partial_implementation flags here. Pushed a change with that as well as responded to comments in line.

{
"version_added": "144"
"version_added": "144",
"notes": "The initial value is `none` instead of `normal` (see [bug 501399489](https://crbug.com/501399489))."

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did contemplate a one or more subfeatures, however I don't think there is a good case to be made for one here. There are a few issues with using subfeatures:

  • The spec evolution wasn't additive (e.g., like the contextual subfeature example in the guidelines). In a sense, you'd have to look to the initial_value_is_normal feature to know whether position-anchor itself is consistent between browsers.
  • This implied to me that we'd end up bubbling up the partial implementation to the parent feature. That would go against the spirit, if not the letter, of the behavioral subfeature guideline's recommendation to avoid subfeatures for data that "would be the same, across all browsers, as the parent feature."
  • Once all browsers ship normal, the initial_value_is_normal data would effectively duplicate the normal subfeature data, if you ignored the historic details. This also struck me as contrary to the spirit of the behavioral subfeature guideline.
  • If we used one subfeature, it's hard not to make the argument for multiple subfeatures (e.g., show each change in initial value, deprecating the old ones). This struck me as needlessly noisy.

That said, I will acknowledge that this PR does imply that we ought to make an implicit (deprecated) subfeature. I didn't do it because only one browser shipped it for a few months and it'll get deleted in a year anyway.

Comment on lines 17 to 28
{
"version_added": "125",
"version_added": "127",
"version_removed": "144",
"partial_implementation": true,
"notes": "The initial value is `normal` instead of `none` (see [bug 460415950](https://crbug.com/460415950))."
"notes": "The initial value is `auto` instead of `normal` (see [bug 460415950](https://crbug.com/460415950))."
},
{
"version_added": "125",
"version_removed": "127",
"partial_implementation": true,
"notes": "The initial value is `implicit` instead of `normal` (see [bug 340878604](https://crbug.com/340878604))."
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we'd be serving developers by suggesting that Chrome 125 to 144 represented a single implementation. The behavior of implicit is much closer to normal than auto is to normal. How the successive releases are broken is not just inconsistent with today's spec, but also inconsistent with Chrome's own implementations.

To put this another way, if Chrome had unshipped the implicit implementation in 128, then shipped the new auto implementation in 129, we would have no choice but to have multiple compat statements. This to me is closer in meaning to what is going on here than to collapse the two statements.

{
"version_added": "144"
"version_added": "144",
"notes": "The initial value is `none` instead of `normal` (see [bug 501399489](https://crbug.com/501399489))."

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As for the docs, I expect that'll get resolved shortly. https://bugzilla.mozilla.org/show_bug.cgi?id=2030351 has dev-doc-needed; it should hit beta next week, so I figured the usual process would take that up.

@ddbeck ddbeck requested a review from caugner April 21, 2026 15:32
Comment on lines 17 to 28
{
"version_added": "125",
"version_added": "127",
"version_removed": "144",
"partial_implementation": true,
"notes": "The initial value is `normal` instead of `none` (see [bug 460415950](https://crbug.com/460415950))."
"notes": "The initial value is `auto` instead of `normal` (see [bug 460415950](https://crbug.com/460415950))."
},
{
"version_added": "125",
"version_removed": "127",
"partial_implementation": true,
"notes": "The initial value is `implicit` instead of `normal` (see [bug 340878604](https://crbug.com/340878604))."
}

@caugner caugner Apr 22, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we'd be serving developers by suggesting that Chrome 125 to 144 represented a single implementation.

I disagree that combining the partial implementation period in a single statement suggests this is a "single" implementation (whatever that means). In my opinion, what is most relevant for developers is the version range of partial support, and the start version of full support. To understand the evolution of the partial support, they can then look at the partial statement's notes.

But I won't insist here.

@caugner caugner merged commit a1050bc into mdn:main Apr 22, 2026
9 checks passed
@mdn-bot mdn-bot mentioned this pull request Apr 22, 2026
@ddbeck ddbeck deleted the position-anchor-normal branch April 22, 2026 17:14
Elchi3 pushed a commit that referenced this pull request May 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

data:css Compat data for CSS features. https://developer.mozilla.org/docs/Web/CSS size:m [PR only] 25-100 LoC changed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants