ui.panel_absolute(*args, top=None, left=None, right=None, bottom=None, width=None, height=None, draggable=False, fixed=False, cursor='auto', **kwargs)

Create a panel of absolutely positioned content.

Creates a <div> tag whose CSS position is set to absolute (or fixed if fixed = True). In HTML, absolute coordinates are specified relative to an element's nearest parent element whose position is not set to static (the default). If no such parent is found, the coordinates are relative to the page borders. If you're not sure what that means, just keep in mind that you may get strange results if you use this function from inside of certain types of panels.


*args: TagChild | TagAttrs = ()

UI elements to include inside the panel.

top: Optional[str] = None

Distance between the top of the panel and the top of the page or parent container.

left: Optional[str] = None

Distance between the left side of the panel and the left of the page or parent container.

right: Optional[str] = None

Distance between the right side of the panel and the right of the page or parent container.

bottom: Optional[str] = None

Distance between the bottom of the panel and the bottom of the page or parent container.

width: Optional[str] = None

Width of the panel.

height: Optional[str] = None

Height of the panel.

draggable: bool = False

If True, allows the user to move the panel by clicking and dragging.

fixed: bool = False

Positions the panel relative to the browser window and prevents it from being scrolled with the rest of the page.

cursor: Literal[‘auto’, ‘move’, ‘default’, ‘inherit’] = ‘auto’

The type of cursor that should appear when the user mouses over the panel. Use "move" for a north-east-south-west icon, "default" for the usual cursor arrow, or "inherit" for the usual cursor behavior (including changing to an I-beam when the cursor is over text). The default is "auto", which is equivalent to "move" if draggable else "inherit".

**kwargs: TagAttrValue = {}

Attributes added to the content’s container tag.


Type Description
TagList A UI element


The position (top, left, right, bottom) and size (width, height) parameters are all optional, but you should specify exactly two of top, bottom, and height and exactly two of left, right, and width for predictable results.

Like most other distance parameters in Shiny, the position and size parameters take a number (interpreted as pixels) or a valid CSS size string, such as "100px" (100 pixels) or "25%".

For arcane HTML reasons, to have the panel fill the page or parent, specify 0 for top, left, right, and bottom rather than the more obvious width = "100%" and height = "100%".


#| standalone: true
#| components: [editor, viewer]
#| layout: vertical
#| viewerHeight: 400

## file: app.py
from shiny import App, Inputs, Outputs, Session, ui

app_ui = ui.page_fluid(
    ui.panel_title("A basic absolute panel example", "Demo"),
            "Drag me around!", ui.input_slider("n", "N", min=0, max=100, value=20)

def server(input: Inputs, output: Outputs, session: Session):

app = App(app_ui, server)