Skip to content

Commit

Permalink
[A11Y] Fix nav drawer being focusable when off-screen on small viewpo…
Browse files Browse the repository at this point in the history
…rts (#2666)

* Fix nav drawer being focusable when off-screen on small viewports

Fixes #2565

* Implement review suggestions

* Format
  • Loading branch information
davwheat authored Mar 18, 2021
1 parent 59fdd76 commit 0cc12ae
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
19 changes: 18 additions & 1 deletion js/src/common/utils/Drawer.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,24 @@ export default class Drawer {
* @public
*/
hide() {
$('#app').removeClass('drawerOpen');
/**
* As part of hiding the drawer, this function also ensures that the drawer
* correctly animates out, while ensuring it is not part of the navigation
* tree while off-screen.
*
* More info: https://github.com/flarum/core/pull/2666#discussion_r595381014
*/

const $app = $('#app');

if (!$app.hasClass('drawerOpen')) return;

const $drawer = $('#drawer');

// Used to prevent `visibility: hidden` from breaking the exit animation
$drawer.css('visibility', 'visible').one('transitionend', () => $drawer.css('visibility', ''));

$app.removeClass('drawerOpen');

if (this.$backdrop) this.$backdrop.remove();
}
Expand Down
3 changes: 3 additions & 0 deletions less/common/App.less
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,9 @@
// the left side of the screen. On other devices, the drawer has no specific
// appearance.
@media @phone {
.App:not(.drawerOpen) .App-drawer {
visibility: hidden;
}
.drawerOpen {
overflow: hidden;
}
Expand Down

0 comments on commit 0cc12ae

Please sign in to comment.