Position values
Quick positioning classes are available, though they are not responsive.
Arrange elements
Arrange elements easily with the edge positioning utilities. The format is position="{position}".
Where property is one of:
top- for the verticaltoppositionstart- for the horizontalleftposition (in LTR)bottom- for the verticalbottompositionend- for the horizontalrightposition (in LTR)
Where position is one of:
0- for0edge position50- for50%edge position100- for100%edge position
<template>
<b-div position="relative">
<b-div
position="absolute"
:top="0"
:start="0"
/>
<b-div
position="absolute"
:top="0"
:end="0"
/>
<b-div
position="absolute"
:top="50"
:start="50"
/>
<b-div
position="absolute"
:bottom="50"
:end="50"
/>
<b-div
position="absolute"
:bottom="0"
:start="0"
/>
<b-div
position="absolute"
:bottom="0"
:end="0"
/>
</b-div>
</template>
Center elements
In addition, you can also center the elements with the transform utility attribute translate="middle".
This class applies the transformations translateX(-50%) and translateY(-50%) to the element which, in combination with the edge positioning utilities, allows you to absolute center an element.
<template>
<b-div position="relative">
<b-div
position="absolute"
:top="0"
:start="0"
translate="middle"
/>
<b-div
position="absolute"
:top="0"
:start="50"
translate="middle"
/>
<b-div
position="absolute"
:top="0"
:start="100"
translate="middle"
/>
<b-div
position="absolute"
:top="50"
:start="0"
translate="middle"
/>
<b-div
position="absolute"
:top="50"
:start="50"
translate="middle"
/>
<b-div
position="absolute"
:top="50"
:start="100"
translate="middle"
/>
<b-div
position="absolute"
:top="100"
:start="0"
translate="middle"
/>
<b-div
position="absolute"
:top="100"
:start="50"
translate="middle"
/>
<b-div
position="absolute"
:top="100"
:start="100"
translate="middle"
/>
</b-div>
</template>
By adding translate="middle-x" or translate="middle-y" classes, elements can be positioned only in horizontal or vertical direction.
<template>
<b-div position="relative">
<b-div
position="absolute"
:top="0"
:start="0"
/>
<b-div
position="absolute"
:top="0"
:start="50"
translate="middle-x"
/>
<b-div
position="absolute"
:top="0"
:end="0"
/>
<b-div
position="absolute"
:top="50"
:start="0"
translate="middle-y"
/>
<b-div
position="absolute"
:top="50"
:start="50"
translate="middle"
/>
<b-div
position="absolute"
:top="50"
:end="0"
translate="middle-y"
/>
<b-div
position="absolute"
:bottom="0"
:start="0"
/>
<b-div
position="absolute"
:bottom="0"
:start="50"
translate="middle-x"
/>
<b-div
position="absolute"
:bottom="0"
:end="0"
/>
</b-div>
</template>
Examples
Here are some real life examples of these classes:
<template>
<b-button
color="primary"
position="relative"
>
Mails
<Badge
position="absolute"
top="0"
start="100"
rounded="pill"
background-color="secondary"
translate="middle"
>
+99
<b-span
class="visually-hidden"
visually-hidden
>
unread messages
</b-span>
</Badge>
</b-button>
<b-button
color="secondary"
position="relative"
rounded="pill"
>
Marker
<b-svg
width="1em"
height="1em"
viewBox="0 0 16 16"
position="absolute"
top="100"
start="50"
fill="var(--bs-secondary)"
translate="middle"
margin="t-1"
>
<path d="M7.247 11.14L2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z" />
</b-svg>
</b-button>
<b-button
color="primary"
position="relative"
>
Alerts
<Badge
position="absolute"
top="0"
start="100"
translate="middle"
border
border-color="light"
rounded="circle"
background-color="danger"
padding="2"
>
<b-span
class="visually-hidden"
visually-hidden
>
unread messages
</b-span>
</Badge>
</b-button>
</template>
You can use these classes with existing components to create new ones. Remember that you can extend its functionality by adding entries to the $position-values variable.
<template>
<b-div
position="relative"
margin="4"
>
<Progress style="height: 1px">
<ProgressBar
:value="50"
/>
</Progress>
<b-button
position="absolute"
:top="0"
:start="0"
translate="middle"
color="primary"
size="sm"
rounded="pill"
style="width: 2rem; height: 2rem"
>
1
</b-button>
<b-button
position="absolute"
:top="0"
:start="50"
translate="middle"
color="primary"
size="sm"
rounded="pill"
style="width: 2rem; height: 2rem"
>
2
</b-button>
<b-button
position="absolute"
:top="0"
:start="100"
translate="middle"
color="secondary"
size="sm"
rounded="pill"
style="width: 2rem; height: 2rem"
>
3
</b-button>
</b-div>
</template>
Position Components
You can also use <Relative /> and <Absolute /> as a shortcut for position="{position}".
<template>
<Relative>
<Absolute
:top="0"
:start="0"
translate="middle"
/>
<Absolute
:top="0"
:start="50"
translate="middle"
/>
<Absolute
:top="0"
:start="100"
translate="middle"
/>
<Absolute
:top="50"
:start="0"
translate="middle"
/>
<Absolute
:top="50"
:start="50"
translate="middle"
/>
<Absolute
:top="50"
:start="100"
translate="middle"
/>
<Absolute
:top="100"
:start="0"
translate="middle"
/>
<Absolute
:top="100"
:start="50"
translate="middle"
/>
<Absolute
:top="100"
:start="100"
translate="middle"
/>
</Relative>
</template>