position.php — Position Block Support
Handles sticky and fixed positioning for blocks.
Source: wp-includes/block-supports/position.php
Since: 6.2.0
Support Key
supports.position
Position types are gated by global theme settings (not just block support):
settings.position.stickymust betruefor stickysettings.position.fixedmust betruefor fixed
Registered Attribute
| Attribute | Type |
|---|---|
style | object |
Block Attributes Read
From $block['attrs']['style']['position']:
| Key | Description |
|---|---|
type | sticky or fixed |
top | Top offset |
right | Right offset |
bottom | Bottom offset |
left | Left offset |
Functions
wp_register_position_support()
php
function wp_register_position_support( WP_Block_Type $block_type )Since: 6.2.0
Access: private
wp_render_position_support()
php
function wp_render_position_support( string $block_content, array $block ): stringSince: 6.2.0
Access: private
Processing:
- Checks block support and non-empty
style.position - Reads global settings to determine allowed position types
- For each side (
top,right,bottom,left):- If value is
0or'0', converts to'0px'forcalc()compatibility - For
topwithfixedorsticky: wraps incalc({value} + var(--wp-admin--admin-bar--position-offset, 0px))to account for the admin bar
- If value is
- Sets
position: {type}andz-index: 10 - Stores CSS in style engine
block-supportscontext - Adds unique class and
is-position-{type}class viaWP_HTML_Tag_Processor
Generated CSS Classes
| Class | Condition |
|---|---|
wp-container-{id} | Unique position container |
is-position-sticky | Sticky position |
is-position-fixed | Fixed position |
Generated Inline Styles
- If value is
0or'0', converts to'0px'forcalc()compatibility - For
topwithfixedorsticky: wraps incalc({value} + var(--wp-admin--admin-bar--position-offset, 0px))to account for the admin bar
Hooks
| Hook | Type | Priority | Callback |
|---|---|---|---|
render_block | filter | 10 | wp_render_position_support |
Registration
php
WP_Block_Supports::get_instance()->register(
'position',
array(
'register_attribute' => 'wp_register_position_support',
)
);