i want to insert a label so that matches every FAB icon on the Fab list whats the correct way of doing it. the way i did it it doesn\'t work
<ion-fab horizontal="end" vertical="bottom" size='small'>
<ion-fab-button>
<ion-icon name="md-arrow-dropup"></ion-icon>
</ion-fab-button>
<ion-fab-list side="top">
<ion-item
style="position: absolute; margin: auto; border: 1px solid; right: 20px; border-radius: 30px; he`ight: 38px;">
<ion-icon style=" margin-top: 0px;" slot="end" src='assets/icon/lock.svg'></ion-icon>
<ion-label style=" margin-top: 0px;">Log out</ion-label>
</ion-item>
</ion-fab-list>
</ion-fab>
ion-fab with label and icon (Preview):
If you are using ionic 4, this is for you
ion-fab-button[data-desc] {
position: relative;
}
ion-fab-button[data-desc]::after {
position: absolute;
content: attr(data-desc);
z-index: 1;
right: 55px;
bottom: 4px;
background-color: var(--ion-color-dark);
padding: 9px;
border-radius: 15px;
color: white;
box-shadow: 0 3px 5px -1px rgba(0,0,0,0.2), 0 6px 10px 0 rgba(0,0,0,0.14), 0 1px 18px 0 rgba(0,0,0,0.12);
}
<ion-fab horizontal="end" vertical="bottom" slot="fixed">
<ion-fab-button color="primary" class="">
<ion-icon name="add"></ion-icon>
</ion-fab-button>
<ion-fab-list side="top">
<ion-fab-button color="primary" routerLink="/contacts/create" routerDirection="forward" data-desc="Create Contact">
<ion-icon name="person-add"></ion-icon>
</ion-fab-button>
<ion-fab-button color="primary" >
<ion-icon name="stats"></ion-icon>
</ion-fab-button>
<ion-fab-button color="primary" routerLink="/reminder/create" routerDirection="forward" data-desc="Create Reminder">
<ion-icon name="alarm"></ion-icon>
</ion-fab-button>
</ion-fab-list>
</ion-fab>
I Ionic 4/5 the accepted answer (labels next to icons) doesn't work anymore. You have to use ::after
pseudo css styling using a global attribute like item
or data-
. See the example below:
HTML:
<ion-fab vertical="bottom" horizontal="end">
<ion-fab-button>
<ion-icon name="add"></ion-icon>
</ion-fab-button>
<ion-fab-list side="top">
<ion-fab-button (click)="do1()" data-desc="Description 1">
<ion-icon name="contact"></ion-icon>
</ion-fab-button>
<ion-fab-button (click)="do2()" data-desc="Description 2">
<ion-icon name="person-add"></ion-icon>
</ion-fab-button>
</ion-fab-list>
</ion-fab>
SCSS:
ion-fab-button[data-desc] {
position: relative;
}
ion-fab-button[data-desc]::after {
position: absolute;
content: attr(data-desc);
z-index: 1;
right: 55px;
bottom: 4px;
background-color: var(--ion-color-primary);
padding: 9px;
border-radius: 15px;
color: white;
box-shadow: 0 3px 5px -1px rgba(0,0,0,0.2), 0 6px 10px 0 rgba(0,0,0,0.14), 0 1px 18px 0 rgba(0,0,0,0.12);
}
Source: https://forum.ionicframework.com/t/fab-labels-in-ionic-4/139823/6
For what it's worth, I was able to accomplish what you ask with the following SCSS.
It'd be nice if this was supported directly by Ionic, but I can't find anything indicating this is built-in.
button[ion-fab] {
overflow: visible;
position: relative;
ion-label {
position: absolute;
top: -8px;
right: 40px;
color: white;
background-color: rgba(0,0,0,0.7);
line-height: 24px;
padding: 4px 8px;
border-radius: 4px;
}
contain: layout;
}
ross solution is great,but in order for it to work on Ionic v2 I had to change the .fab
class that comes with Ionic from contain: strict
to contain: layout
.
This is how the class is originally:
.fab {
-moz-appearance: none;
-ms-appearance: none;
-webkit-appearance: none;
appearance: none;
position: relative;
z-index: 0;
display: block;
overflow: hidden;
width: 56px;
height: 56px;
border-radius: 50%;
font-size: 14px;
line-height: 56px;
text-align: center;
text-overflow: ellipsis;
text-transform: none;
white-space: nowrap;
cursor: pointer;
transition: background-color, opacity 100ms linear;
background-clip: padding-box;
-webkit-font-kerning: none;
font-kerning: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
contain: strict;
}
So, add the following on your page .scss file:
.fab {
contain: layout;
}
It will overwrite the default .fab
class for the page and it will work.
The chosen answer seemed to work most of the time, but in some iOS devices it was not picking up the contain: layout;
setting, making the label not align. I didn't need my label as part of the clickable button, so my FAB label addition is below which works on iOS. Fairly simple.
HTML
<ion-fab top right edge>
<button ion-fab color="primary">
<ion-icon name="add"></ion-icon>
</button>
<ion-label>Scan</ion-label>
</ion-fab>
CSS
ion-fab ion-label {
font-weight: bold;
color: color($colors, primary, base);
text-align: center;
margin: 0px !important;
}