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 verticaltop
positionstart
- for the horizontalleft
position (in LTR)bottom
- for the verticalbottom
positionend
- for the horizontalright
position (in LTR)
Where position is one of:
0
- for0
edge 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>