diff --git a/packages/eui/.loki/reference/chrome_desktop_Display_EuiDragDropContext_Within_Flyouts.png b/packages/eui/.loki/reference/chrome_desktop_Display_EuiDragDropContext_Within_Flyouts.png
new file mode 100644
index 00000000000..3a19fa07633
Binary files /dev/null and b/packages/eui/.loki/reference/chrome_desktop_Display_EuiDragDropContext_Within_Flyouts.png differ
diff --git a/packages/eui/.loki/reference/chrome_desktop_Display_EuiDragDropContext_Within_Modals.png b/packages/eui/.loki/reference/chrome_desktop_Display_EuiDragDropContext_Within_Modals.png
new file mode 100644
index 00000000000..2af48209dc9
Binary files /dev/null and b/packages/eui/.loki/reference/chrome_desktop_Display_EuiDragDropContext_Within_Modals.png differ
diff --git a/packages/eui/.loki/reference/chrome_mobile_Display_EuiDragDropContext_Within_Flyouts.png b/packages/eui/.loki/reference/chrome_mobile_Display_EuiDragDropContext_Within_Flyouts.png
new file mode 100644
index 00000000000..5e4cd5a805c
Binary files /dev/null and b/packages/eui/.loki/reference/chrome_mobile_Display_EuiDragDropContext_Within_Flyouts.png differ
diff --git a/packages/eui/.loki/reference/chrome_mobile_Display_EuiDragDropContext_Within_Modals.png b/packages/eui/.loki/reference/chrome_mobile_Display_EuiDragDropContext_Within_Modals.png
new file mode 100644
index 00000000000..7bc192cf8f0
Binary files /dev/null and b/packages/eui/.loki/reference/chrome_mobile_Display_EuiDragDropContext_Within_Modals.png differ
diff --git a/packages/eui/changelogs/upcoming/8048.md b/packages/eui/changelogs/upcoming/8048.md
new file mode 100644
index 00000000000..aca59ca4556
--- /dev/null
+++ b/packages/eui/changelogs/upcoming/8048.md
@@ -0,0 +1,7 @@
+- Updated `EuiDraggable` with a new `usePortal` prop.
+ - This prop portals the dragged element to the body, allowing it to escape stacking contexts which prevents buggy drag positioning in e.g. popovers, modals, and flyouts.
+
+**Deprecations**
+
+- Deprecated `EuiPopover`'s `hasDragDrop` prop. Use `EuiDraggable`'s new `usePortal` prop instead.
+
diff --git a/packages/eui/src-docs/src/views/drag_and_drop/drag_and_drop_example.js b/packages/eui/src-docs/src/views/drag_and_drop/drag_and_drop_example.js
index de190eafb4a..471f589e10f 100644
--- a/packages/eui/src-docs/src/views/drag_and_drop/drag_and_drop_example.js
+++ b/packages/eui/src-docs/src/views/drag_and_drop/drag_and_drop_example.js
@@ -1,5 +1,4 @@
import React from 'react';
-import { Link } from 'react-router-dom';
import { GuideSectionTypes } from '../../components';
import {
@@ -34,12 +33,12 @@ const dragAndDropTypesSource = require('!!raw-loader!./drag_and_drop_types');
import DragAndDropClone from './drag_and_drop_clone';
const dragAndDropCloneSource = require('!!raw-loader!./drag_and_drop_clone');
+import DragAndDropPortal from './drag_and_drop_portal';
+const dragAndDropPortalSource = require('!!raw-loader!./drag_and_drop_portal');
+
import DragAndDropComplex from './drag_and_drop_complex';
const dragAndDropComplexSource = require('!!raw-loader!./drag_and_drop_complex');
-import DragAndDropInPopover from './in_popover';
-const dragAndDropInPopoverSource = require('!!raw-loader!./in_popover');
-
export const DragAndDropExample = {
title: 'Drag and drop',
intro: (
@@ -343,31 +342,11 @@ export const DragAndDropExample = {
demo:
- EuiDraggables in EuiDroppables,{' '} - EuiDroppables in EuiDraggables, - custom drag handles, horizontal movement, vertical movement, - flexbox, panel inception, you name it. -
- > - ), - demo:
- This behavior particularly affects{' '}
-
- EuiPopover
-
- . If using drag and drop UX within a popover, you{' '}
- must include the{' '}
-
+ If the styling of the your draggable content is scoped to a parent
+ component, the styling won't be applied while dragging it when
+ using
+ EuiDraggables in EuiDroppables,{' '} + EuiDroppables in EuiDraggables, + custom drag handles, horizontal movement, vertical movement, + flexbox, panel inception, you name it. +
+ > + ), + demo: