- From: Jihye Hong via GitHub <sysbot+gh@w3.org>
- Date: Tue, 29 Jan 2019 02:52:02 +0000
- To: public-css-archive@w3.org
I'd like to propose supporting the focus delegation feature in the spec. The detail is as below.
## Problem
When there are nested spatial navigation containers,
1. Too many key pressing is needed for reaching the target focusable element.
e.g. https://jihyerish.github.io/spatial-navigation/demo/sample/api_spatial_navigation_nested_container.html
2. Focus may move to the spatial navigation container which doesn't have any focusable element.
e.g. https://jihyerish.github.io/spatial-navigation/demo/sample/api_spatial_navigation_empty_nested_container.html
## Solution
If the spatial navigation container can be specified as **_delegable container_**, it can delegate the focus inside it. To be more specific, three updates may be needed to the spec.
#### (1) Add the new terminology: "Spatial navigation delegable container" (a.k.a. delegable container)
**Spatial navigation delegable container** is the spatial navigation container which doesn't hold the focus and give it to one of its focusable child elements.
> NOTE:
> - Best candidate: the element which will gain the focus from the currently focused element
> - Focusable element: focusable area specified in HTML Spec
> - Spatial navigation container: browsing context, scrollable element, the element specified with 'spatial-navigation-contain: contain'
#### (2) Add "delegable" value to the [`spatial-navigation-contain`](https://drafts.csswg.org/css-nav-1/#container) for specifying the spatial navigation delegable container
For example, the value of the property can be:
`spatial-navigation-contain: [auto | contain] && delegable?`
- `delegable` value can only be specified to the spatial navigation container. (whether the element is focusable or not)
- By default, the spatial navigation container is non-focusable and doesn't delegate the focus to its focusable children elements.
#### (3) Add the spatial navigation delegable container for the condition of candidates for searching the next target
The changes in the processing model will be:
1. Find the search origin
2. Find candidates
2-1. Find focusable elements and **delegable containers**
2-2. Find visible elements
3. Select the best candidate
3-1. If the best candidate is a delegable container, find candidates (step 2) inside it.
3-1-1. If there is a best candidate inside the delegable container, focus it.
3-1-2. Else, move the focus to the closest spatial navigation container of it.
3-2. Else, move the focus to the best candidate.
## More discussions
1. Do we have to delegate the focus to the focusable child elements which are visually outside of the delegable container?
=> To be simple, we need to consider this as an incorrect implementation.
2. If there is a scrollable and delegable container **_C_** of which focusable child elements are out of the view, which child element will gain the focus by delegating the focus?
=> There can be several approaches:
A: the first focusable child element of the container **_C_**
B: the closest focusable child element from the edge of the container **_C_**
--
GitHub Notification of comment by jihyerish
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/3378#issuecomment-458387533 using your GitHub account
Received on Tuesday, 29 January 2019 02:52:08 UTC