diff --git a/docs/api/content.md b/docs/api/content.md
index 832e22cd9d1..c8e9568530f 100644
--- a/docs/api/content.md
+++ b/docs/api/content.md
@@ -54,6 +54,8 @@ import Fullscreen from '@site/static/usage/v8/content/fullscreen/index.md';
To place elements outside of the scrollable area, assign them to the `fixed` slot. Doing so will [absolutely position](https://developer.mozilla.org/en-US/docs/Web/CSS/position#absolute_positioning) the element to the top left of the content. In order to change the position of the element, it can be styled using the [top, right, bottom, and left](https://developer.mozilla.org/en-US/docs/Web/CSS/position) CSS properties.
+The `fixedSlotPlacement` property is used to determine if content in the `fixed` slot is placed before or after the main content in the DOM. When set to `before`, fixed slot content will be placed before the main content and will therefore receive keyboard focus before the main content receives keyboard focus. This can be useful when the main content contains an infinitely-scrolling list, preventing a [FAB](./fab) or other fixed content from being reachable by pressing the tab key.
+
import Fixed from '@site/static/usage/v8/content/fixed/index.md';
diff --git a/docs/api/fab.md b/docs/api/fab.md
index 3e665ad8159..d3f5e77ced6 100644
--- a/docs/api/fab.md
+++ b/docs/api/fab.md
@@ -67,6 +67,16 @@ import SafeArea from '@site/static/usage/v8/fab/safe-area/index.md';
+### Relative to Infinite List
+
+In scenarios where a view contains many interactive elements, such as an infinitely-scrolling list, it may be challenging for users to navigate to the Floating Action Button (FAB) if it is placed below all the items in the DOM.
+
+By setting the `fixedSlotPlacement` property on [Content](./content) to `before`, the FAB will be placed before the main content in the DOM. This ensures that the FAB receives keyboard focus before other interactive elements receive focus, making it easier for users to access the FAB.
+
+import BeforeContent from '@site/static/usage/v8/fab/before-content/index.md';
+
+
+
## Button Sizing
Setting the `size` property of the main fab button to `"small"` will render it at a mini size. Note that this property will not have an effect when used with the inner fab buttons.
diff --git a/static/usage/v8/fab/before-content/angular/example_component_html.md b/static/usage/v8/fab/before-content/angular/example_component_html.md
new file mode 100644
index 00000000000..494d73158e6
--- /dev/null
+++ b/static/usage/v8/fab/before-content/angular/example_component_html.md
@@ -0,0 +1,20 @@
+```html
+
+
+
+
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+```
diff --git a/static/usage/v8/fab/before-content/angular/example_component_ts.md b/static/usage/v8/fab/before-content/angular/example_component_ts.md
new file mode 100644
index 00000000000..7a4ee72cdd0
--- /dev/null
+++ b/static/usage/v8/fab/before-content/angular/example_component_ts.md
@@ -0,0 +1,31 @@
+```tsx
+import { Component, OnInit } from '@angular/core';
+
+import { InfiniteScrollCustomEvent } from '@ionic/angular';
+
+@Component({
+ selector: 'app-example',
+ templateUrl: 'example.component.html',
+})
+export class ExampleComponent implements OnInit {
+ items = [];
+
+ ngOnInit() {
+ this.generateItems();
+ }
+
+ private generateItems() {
+ const count = this.items.length + 1;
+ for (let i = 0; i < 50; i++) {
+ this.items.push(`Item ${count + i}`);
+ }
+ }
+
+ onIonInfinite(ev) {
+ this.generateItems();
+ setTimeout(() => {
+ (ev as InfiniteScrollCustomEvent).target.complete();
+ }, 500);
+ }
+}
+```
diff --git a/static/usage/v8/fab/before-content/demo.html b/static/usage/v8/fab/before-content/demo.html
new file mode 100644
index 00000000000..1c7e04ef66b
--- /dev/null
+++ b/static/usage/v8/fab/before-content/demo.html
@@ -0,0 +1,66 @@
+
+
+