Focus management helps users know where they are on the page. In modals, it keeps keyboard users inside the popup until they close it.
Focus management in modals in Bootsrap
<!-- Bootstrap modal structure --> <div class="modal" tabindex="-1" aria-labelledby="modalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="modalLabel">Modal title</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <!-- Modal content here --> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Save changes</button> </div> </div> </div> </div>
Bootstrap automatically traps focus inside the modal when it is open.
Use tabindex="-1" on the modal container to make it focusable.
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal"> Launch modal </button> <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Modal title</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> Modal body text goes here. </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Save changes</button> </div> </div> </div> </div>
autofocus attribute.<!-- Modal with focus on input --> <div class="modal fade" id="inputModal" tabindex="-1" aria-labelledby="inputModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="inputModalLabel">Enter your name</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <input type="text" class="form-control" placeholder="Your name" autofocus> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Submit</button> </div> </div> </div> </div>
This complete example uses Bootstrap 5 modal. When you open the modal, keyboard focus is trapped inside. The input field gets focus automatically. You can navigate with Tab and Shift+Tab keys without leaving the modal.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Bootstrap Modal Focus Example</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <main class="container py-5"> <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#focusModal"> Open Modal </button> <div class="modal fade" id="focusModal" tabindex="-1" aria-labelledby="focusModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="focusModalLabel">Focus Management</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <p>Try using Tab and Shift+Tab keys. Focus stays inside this modal.</p> <input type="text" class="form-control mb-3" placeholder="Type here..." autofocus> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close Modal</button> </div> </div> </div> </div> </main> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </body> </html>
Bootstrap modals handle focus trapping automatically, so you don't need extra code.
Always use aria-labelledby and aria-hidden for accessibility.
Use the autofocus attribute on an input inside the modal to set initial focus.
Focus management keeps keyboard users inside the modal until it closes.
Bootstrap modals trap focus automatically for better accessibility.
Use semantic HTML and ARIA attributes for screen reader support.
Practice
Solution
Step 1: Understand focus management concept
Focus management ensures keyboard users cannot tab outside the modal while it is open.Step 2: Identify purpose in Bootstrap modals
Bootstrap modals trap focus inside to improve accessibility for keyboard and screen reader users.Final Answer:
To keep keyboard users inside the modal until it closes -> Option AQuick Check:
Focus management = trap keyboard focus inside modal [OK]
- Thinking it changes modal style
- Confusing focus with mouse clicks
- Assuming it resizes modal automatically
Solution
Step 1: Recall ARIA roles for modals
Modals should havearia-modal='true'to indicate a modal dialog to screen readers.Step 2: Identify Bootstrap's automatic ARIA attribute
Bootstrap addsaria-modal='true'to trap focus and signal modal behavior.Final Answer:
aria-modal='true' -> Option BQuick Check:
Bootstrap modals use aria-modal='true' for accessibility [OK]
- Confusing aria-hidden with aria-modal
- Using aria-expanded which is for collapsibles
- Thinking aria-live controls modal focus
<button id='openModal'>Open</button>
<div class='modal' tabindex='-1' role='dialog' aria-modal='true'>
<div class='modal-dialog'>
<div class='modal-content'>
<button id='closeModal'>Close</button>
</div>
</div>
</div>What happens when the modal is open and the user presses the Tab key repeatedly?
Solution
Step 1: Understand Bootstrap modal focus trap
Bootstrap traps keyboard focus inside the modal when open, cycling through modal elements only.Step 2: Analyze Tab key behavior
Pressing Tab moves focus forward inside modal elements, looping back to first element after last.Final Answer:
Focus cycles only between elements inside the modal -> Option DQuick Check:
Tab key cycles focus inside modal [OK]
- Thinking focus escapes modal on Tab
- Assuming focus gets stuck on one element
- Believing focus moves outside modal to browser
Solution
Step 1: Check tabindex attribute role in focus trapping
Bootstrap requirestabindex='-1'on the modal container to manage focus properly.Step 2: Identify cause of focus escape
Withouttabindex='-1', focus trapping fails and keyboard can move outside modal.Final Answer:
The modal is missing thetabindex='-1'attribute -> Option AQuick Check:
Missing tabindex='-1' breaks focus trap [OK]
- Thinking aria-modal='false' causes focus issues
- Assuming close button affects focus trap
- Confusing backdrop attribute with focus behavior
Solution
Step 1: Understand default Bootstrap focus behavior
Bootstrap traps focus inside modal but does not automatically return focus to opener on close.Step 2: Implement custom focus return
Use JavaScript event listener on modal's 'hidden.bs.modal' event to set focus back to the button that opened it.Final Answer:
Add a JavaScript event listener on modal close to focus the opener button -> Option CQuick Check:
Return focus to opener with JS event listener [OK]
- Relying on autofocus attribute inside modal
- Using tabindex='0' on modal container incorrectly
- Disabling Bootstrap focus trap unnecessarily
Ready to prove it?
Pass the test and this pattern moves unknown
