A helper node for displaying scrollable elements such as lists. A ScrollContainer node meant to contain a [Control] child. ScrollContainers will automatically create a scrollbar child ([HScrollBar], [VScrollBar], or both) when needed and will only draw the Control within the ScrollContainer area. Scrollbars will automatically be drawn at the right (for vertical) or bottom (for horizontal) and will enable dragging to move the viewable Control (and its children) within the ScrollContainer. Scrollbars will also automatically resize the grabber based on the [member Control.rect_min_size] of the Control relative to the ScrollContainer. Works great with a [Panel] control. You can set [code]EXPAND[/code] on the children's size flags, so they will upscale to the ScrollContainer's size if it's larger (scroll is invisible for the chosen dimension). $DOCS_URL/tutorials/ui/gui_containers.md Ensures the given [code]control[/code] is visible (must be a direct or indirect child of the ScrollContainer). Used by [member follow_focus]. [b]Note:[/b] This will not work on a node that was just added during the same frame. If you want to scroll to a newly added child, you must wait until the next frame using [signal SceneTree.idle_frame]: [codeblock] add_child(child_node) yield(get_tree(), "idle_frame") ensure_control_visible(child_node) [/codeblock] Returns the horizontal scrollbar [HScrollBar] of this [ScrollContainer]. [b]Warning:[/b] This is a required internal node, removing and freeing it may cause a crash. If you wish to disable the horizontal scrollbar, use [member scroll_horizontal_enabled]. If you want to only hide it instead, use its [member CanvasItem.visible] property. Returns the vertical scrollbar [VScrollBar] of this [ScrollContainer]. [b]Warning:[/b] This is a required internal node, removing and freeing it may cause a crash. If you wish to disable the vertical scrollbar, use [member scroll_vertical_enabled]. If you want to only hide it instead, use its [member CanvasItem.visible] property. If [code]true[/code], the ScrollContainer will automatically scroll to focused children (including indirect children) to make sure they are fully visible. The current horizontal scroll value. [b]Note:[/b] If you are setting this value in the [method Node._ready] function or earlier, it needs to be wrapped with [method Object.set_deferred], since scroll bar's [member Range.max_value] is not initialized yet. [codeblock] func _ready(): set_deferred("scroll_horizontal", 600) [/codeblock] If [code]true[/code], enables horizontal scrolling. The current vertical scroll value. [b]Note:[/b] Setting it early needs to be deferred, just like in [member scroll_horizontal]. [codeblock] func _ready(): set_deferred("scroll_vertical", 600) [/codeblock] If [code]true[/code], enables vertical scrolling. Emitted when scrolling stops. Emitted when scrolling is started. The background [StyleBox] of the [ScrollContainer].