在 Ionic FAB 列表中插入标签的正确方法是什么
whats the correct way of inserting label in an Ionic FAB list
我想插入一个标签,以便匹配 Fab 列表中的每个 FAB 图标,正确的做法是什么。我这样做的方式不起作用
<ion-fab left middle>
<button ion-fab color="dark">
<ion-icon name="arrow-dropup"></ion-icon>
<ion-label>here</ion-label>
</button>
<ion-fab-list side="top">
<button ion-fab>
<ion-icon name="logo-facebook"></ion-icon>
<ion-label>here</ion-label>
</button>
<button ion-fab>
<ion-icon name="logo-twitter"></ion-icon>
</button>
<button ion-fab>
<ion-icon name="logo-vimeo"></ion-icon>
</button>
<button ion-fab>
<ion-icon name="logo-googleplus"></ion-icon>
</button>
</ion-fab-list>
</ion-fab>
对于它的价值,我能够使用以下 SCSS 完成您的要求。
如果 Ionic 直接支持它就好了,但我找不到任何表明这是内置的东西。
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 解决方案很棒,但为了让它在 Ionic v2 上运行,我不得不将 Ionic 附带的 .fab
class 从 contain: strict
更改为 contain: layout
.
原来 class 是这样的:
.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;
}
因此,在您的页面 .scss 文件中添加以下内容:
.fab {
contain: layout;
}
它将覆盖页面的默认 .fab
class 并且它会起作用。
选择的答案似乎大部分时间都有效,但在某些 iOS 设备中,它没有采用 contain: layout;
设置,导致标签不对齐。我不需要我的标签作为可点击按钮的一部分,所以我的 FAB 标签添加在下方,适用于 iOS。相当简单。
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;
}
如果您使用的是 ionic 4,这适合您
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>
<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(预览):
I Ionic 4/5 已接受的答案(图标旁边的标签)不再有效。您必须使用 item
或 data-
等全局属性来使用 ::after
伪 css 样式。请参阅以下示例:
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);
}
来源:https://forum.ionicframework.com/t/fab-labels-in-ionic-4/139823/6
是的,你可以这样实现。
- 在
component.html
文件中。
<ion-fab vertical="bottom" horizontal="end">
<ion-fab-button color="success">
<ion-icon name="alert-circle-outline"></ion-icon>
</ion-fab-button>
<ion-fab-list side="top">
<ion-fab-button (click)="callFunction()" data-desc="Sales" color="success">
<ion-icon name="cart-outline"></ion-icon>
</ion-fab-button>
<ion-fab-button (click)="callFunction()" data-desc="Payment" color="success">
<ion-icon name="cash-outline"></ion-icon>
</ion-fab-button>
<ion-fab-button (click)="callFunction()" data-desc="Edit" color="danger">
<ion-icon name="create-outline"></ion-icon>
</ion-fab-button>
</ion-fab-list>
</ion-fab>
- 在
component.css
文件中..
ion-fab-button[data-desc] {
position: relative;
}
ion-fab-button[data-desc]::after {
position: absolute;
content: attr(data-desc);
z-index: 1;
right: 50px;
bottom: 7px;
color: var(--ion-color-contrast, #fff);
background-color: var(--ion-color-base, #fff);
padding: 5px 10px;
border-radius: 10px;
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);
}
我用这种方式处理翻译和 bootstrap
<ion-fab horizontal="start" vertical="bottom" slot="fixed">
<ion-fab-button color="secondary" class="">
<ion-icon name="add"></ion-icon>
</ion-fab-button>
<ion-fab-list side="top">
<ion-button color="success" (click)="callFunction()" style="text-transform:none">
<ion-label class="fw-bold">{{'fab-nonstop' | translate }} </ion-label>
<ion-icon name="airplane" class="ms-1"></ion-icon>
</ion-button>
<ion-button color="warning" (click)="callFunction()" style="text-transform:none">
<ion-label class="fw-bold">{{'fab-stop' | translate }} </ion-label>
<ion-icon name="car" class="ms-1"></ion-icon>
</ion-button>
</ion-fab-list>
</ion-fab>
这是结果:
更新 Ionic 版本 6+,带有阴影 DOM 和 ::part 选择器:
ion-fab-list ion-fab-button {
overflow: visible;
position: relative;
contain: layout;
}
ion-fab-list ion-fab-button ion-label {
position: absolute;
right: 50px;
color: var(--color);
background: var(--background);
line-height: 1rem;
padding: 4px 8px;
border-radius: 8px;
box-shadow: var(--box-shadow);
height: 40px;
width: max-content;
display: flex;
align-items: center;
}
ion-fab-list ion-fab-button::part(native) {
contain: initial;
overflow: visible;
}
我想插入一个标签,以便匹配 Fab 列表中的每个 FAB 图标,正确的做法是什么。我这样做的方式不起作用
<ion-fab left middle>
<button ion-fab color="dark">
<ion-icon name="arrow-dropup"></ion-icon>
<ion-label>here</ion-label>
</button>
<ion-fab-list side="top">
<button ion-fab>
<ion-icon name="logo-facebook"></ion-icon>
<ion-label>here</ion-label>
</button>
<button ion-fab>
<ion-icon name="logo-twitter"></ion-icon>
</button>
<button ion-fab>
<ion-icon name="logo-vimeo"></ion-icon>
</button>
<button ion-fab>
<ion-icon name="logo-googleplus"></ion-icon>
</button>
</ion-fab-list>
</ion-fab>
对于它的价值,我能够使用以下 SCSS 完成您的要求。
如果 Ionic 直接支持它就好了,但我找不到任何表明这是内置的东西。
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 解决方案很棒,但为了让它在 Ionic v2 上运行,我不得不将 Ionic 附带的 .fab
class 从 contain: strict
更改为 contain: layout
.
原来 class 是这样的:
.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;
}
因此,在您的页面 .scss 文件中添加以下内容:
.fab {
contain: layout;
}
它将覆盖页面的默认 .fab
class 并且它会起作用。
选择的答案似乎大部分时间都有效,但在某些 iOS 设备中,它没有采用 contain: layout;
设置,导致标签不对齐。我不需要我的标签作为可点击按钮的一部分,所以我的 FAB 标签添加在下方,适用于 iOS。相当简单。
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;
}
如果您使用的是 ionic 4,这适合您
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>
<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(预览):
I Ionic 4/5 已接受的答案(图标旁边的标签)不再有效。您必须使用 item
或 data-
等全局属性来使用 ::after
伪 css 样式。请参阅以下示例:
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);
}
来源:https://forum.ionicframework.com/t/fab-labels-in-ionic-4/139823/6
是的,你可以这样实现。
- 在
component.html
文件中。
<ion-fab vertical="bottom" horizontal="end">
<ion-fab-button color="success">
<ion-icon name="alert-circle-outline"></ion-icon>
</ion-fab-button>
<ion-fab-list side="top">
<ion-fab-button (click)="callFunction()" data-desc="Sales" color="success">
<ion-icon name="cart-outline"></ion-icon>
</ion-fab-button>
<ion-fab-button (click)="callFunction()" data-desc="Payment" color="success">
<ion-icon name="cash-outline"></ion-icon>
</ion-fab-button>
<ion-fab-button (click)="callFunction()" data-desc="Edit" color="danger">
<ion-icon name="create-outline"></ion-icon>
</ion-fab-button>
</ion-fab-list>
</ion-fab>
- 在
component.css
文件中..
ion-fab-button[data-desc] {
position: relative;
}
ion-fab-button[data-desc]::after {
position: absolute;
content: attr(data-desc);
z-index: 1;
right: 50px;
bottom: 7px;
color: var(--ion-color-contrast, #fff);
background-color: var(--ion-color-base, #fff);
padding: 5px 10px;
border-radius: 10px;
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);
}
我用这种方式处理翻译和 bootstrap
<ion-fab horizontal="start" vertical="bottom" slot="fixed">
<ion-fab-button color="secondary" class="">
<ion-icon name="add"></ion-icon>
</ion-fab-button>
<ion-fab-list side="top">
<ion-button color="success" (click)="callFunction()" style="text-transform:none">
<ion-label class="fw-bold">{{'fab-nonstop' | translate }} </ion-label>
<ion-icon name="airplane" class="ms-1"></ion-icon>
</ion-button>
<ion-button color="warning" (click)="callFunction()" style="text-transform:none">
<ion-label class="fw-bold">{{'fab-stop' | translate }} </ion-label>
<ion-icon name="car" class="ms-1"></ion-icon>
</ion-button>
</ion-fab-list>
</ion-fab>
这是结果:
更新 Ionic 版本 6+,带有阴影 DOM 和 ::part 选择器:
ion-fab-list ion-fab-button {
overflow: visible;
position: relative;
contain: layout;
}
ion-fab-list ion-fab-button ion-label {
position: absolute;
right: 50px;
color: var(--color);
background: var(--background);
line-height: 1rem;
padding: 4px 8px;
border-radius: 8px;
box-shadow: var(--box-shadow);
height: 40px;
width: max-content;
display: flex;
align-items: center;
}
ion-fab-list ion-fab-button::part(native) {
contain: initial;
overflow: visible;
}