Skip to content

[css-view-transition-1] visibility: hidden analogy is misleading, elements remain keyboard-focusable and accessible #12629

Description

@sb3nder

Hi,
The current css-view-transitions-1 draft at point 4.2. View Transition Painting Order, says:

When a Document’s active view transition’s phase is "animating", the boxes generated by any element in that Document with captured in a view transition and its element contents, except transition root pseudo-element’s inclusive descendants, are not painted (as if they had visibility: hidden) and do not respond to hit-testing (as if they had pointer-events: none).

Note: Elements participating in a transition need to skip painting in their DOM location because their image is painted in the corresponding ::view-transition-new() pseudo-element instead. Similarly, hit-testing is skipped because the element’s DOM location does not correspond to where its contents are rendered. However, there is no change in how these elements are accessed by assistive technologies or the accessibility tree.

The issue is that the use of visibility: hidden in the following sentence:

are not painted (as if they had visibility: hidden) and do not respond to hit-testing (as if they had pointer-events: none).

is problematic with this sentence:

there is no change in how these elements are accessed by assistive technologies or the accessibility tree.

because visibility: hidden don't just make the element invisible and not-interactive, it also remove it from the accessibility tree.

Also, visibility: hidden doesn’t reflect how Chrome and Firefox currently preserve element focusability and interactivity, while opacity: 0 combined with pointer-events: none matches their behavior.


Related issue:


Testing links:

Activity

  1. changed the title [-][css-view-transition-1] Clarifications regarding interactivity and accesibility[/-] [+][css-view-transition-1] `visibility: hidden` analogy conflicts with accessibility behavior[/+] on Aug 25, 2025
  2. changed the title [-][css-view-transition-1] `visibility: hidden` analogy conflicts with accessibility behavior[/-] [+][css-view-transition-1] `visibility: hidden` analogy is misleading, elements remain keyboard-focusable and accessible[/+] on Sep 1, 2025
  3. sb3nder commented on Sep 1, 2025

    @sb3nder
    ContributorAuthor
    # visible accessibility tree focusable interactive example
    1 ✅ ✅ ✅ ✅ visibility: visible
    2 ✅ ✅ ❌ ❌~ - (disabled)
    3 ✅ ✅ ✅ ❌~ - (readonly)
    4 ✅ ❌ ✅ ✅~ aria-hidden="true"
    5 ✅ ❌ ❌ ❌ inert
    6 ❌ ✅ ✅ ✅ opacity: 0
    7 ❌ ❌ ❌ ❌ visibility: hidden , display: none
  4. fantasai commented on Sep 11, 2025

    @fantasai
    Collaborator

    This should go on the agenda by TPAC at the latest, I think.

  5. moved this from Agenda+ to Friday Morning in CSS WG TPAC 2025 agendaon Nov 8, 2025
  6. css-meeting-bot commented on Jan 21, 2026

    @css-meeting-bot
    Member

    The CSS Working Group just discussed [css-view-transition-1] `visibility: hidden` analogy is misleading, elements remain keyboard-focusable and accessible, and agreed to the following:

    • RESOLVED: change to "as opacity:0"
    The full IRC log of that discussion <TabAtkins> vmpstr: this is skirting the line of editorial
    <TabAtkins> vmpstr: in the spec we say that elements that are eparticipating in a view transition don't paint where they're ac Tually positioned
    <TabAtkins> vmpstr: in parens, "as if they're visibility:hidden".
    <TabAtkins> vmpstr: person filing the issue said hidden comes with other implications, like keyboard-focus. suggested we rephrase to "as opacity:0". fine with that
    <flackr> +1
    <bramus> +1
    <emilio> sgtm
    <TabAtkins> I think this is indeed editorial, and go for it
    <TabAtkins> astearns: k, so proposed resolution: change to "as opacity:0"
    <TabAtkins> RESOLVED: change to "as opacity:0"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions