├── README.md ├── demo └── index.html ├── docs ├── modality-mq.md └── modality-pseudo.md └── src └── keyboard-modality.js /README.md: -------------------------------------------------------------------------------- 1 | **Deprecated:** Please look at https://github.com/wicg/focus-ring/ instead. 2 | 3 | Archived content below. 4 | 5 | --- 6 | 7 | Based on a conversation between Alice Boxhall, Brian Kardell and Marcy Sutton, this prototype attaches/manages metadata in the form of a `modality` attribute to the body, as a way to allow authors to experiment with adapting style based on the user's _active_ input modality (i.e., how they are interacting with the UI _right now_). 8 | 9 | [Demo](https://alice.github.io/modality/demo) 10 | 11 | ## Rationale 12 | 13 | There are many instances in which it would be useful for authors to understand the user's current interaction modality and be able to adapt the UI with better accomodations. The motivating example is `:focus` where the status quo is quite problematic: 14 | 15 | - The default focus ring is not based on a single :focus rule as some might expect, not all things which can receive focus receive a ring in all cases. Adding such a rule is always currently problematic, but it's also exceptionally common. 16 | - Many developers disable the default focus ring in their CSS styles, others attempt to style it in concert with their design. The former often seems to be a result of finding the default focus ring both aesthetically unpleasant and confusing to users when applied after a mouse or touch event and introduces accessibility problems. The latter inevitably creates considerably more of the kind of problem that the former was trying to solve. 17 | 18 | To deal with this: 19 | - It seems evident that a visual indication of what has focus is only interesting to a user who is using the keyboard to interact with the page. A user using any kind of pointing device would only be interested in what is in focus if they were _just about_ to use the keyboard - otherwise, it is irrelevant and potentially confusing. 20 | - Thus, if we only show the focus ring when relevant, we can avoid user confusion and avoid creating incentives for developers to disable it. 21 | - A mechanism for exposing focus ring styles only when the keyboard is the user's current input modality gives us this opportunity. 22 | 23 | ## Implementation Prototype 24 | 25 | At this stage, we're only looking at keyboard modality. 26 | 27 | The tiny [keyboard-modality.js](http://alice.github.io/modality/src/keyboard-modality.js) provides a prototype intended to achieve the goals we are proposing with technology that exists today in order for developers to be able to try it out, understand it and provide feedback. Simply speaking, it sets a `modality=keyboard` attribute on `body` if the script determines that the keyboard is being used. Similarly, the attribute is removed if the script determines that the user is no longer using the keyboard. This allows authors to write rules which consider the input modality and style appropriately. 28 | 29 | It also simulates how the default UA styles would be adjusted by appending the following style as the first rule in the page, which disables the focus ring _unless_ `modality` is set to `keyboard`: 30 | 31 | ```html 32 | body:not([modality=keyboard]) :focus { 33 | outline: none; 34 | } 35 | ``` 36 | 37 | (This is added in a ` 24 | 25 | 30 | 31 |
32 |34 | This page contains various html controls and demonstrates a proposal for only drawing a focus ring when the keyboard is being used. 35 | Navigate through the interactive elements various ways (using mouse, switch to keyboard, try it on a touch device). You should see a green focus indicator (or comment out green focus ring style to see default focus ring) on elements below differently based on whether you interact with them via keyboard or mouse. If you are using the mouse and get lost, at any time you can tab/shift-tab to find your focus indicator. 36 |
37 |