@import "../../themes/ionic.globals"; // Floating Action Buttons // -------------------------------------------------- /// @prop - Width and height of the FAB button $fab-size: 56px !default; /// @prop - Width and height of the FAB button mini $fab-mini-size: 40px !default; /// @prop - Margin of the FAB Container $fab-content-margin: 10px !default; /// @prop - Margin of the FAB List $fab-list-margin: 10px !default; /// @prop - Background color of the button in a list $fab-list-button-background-color: #f4f4f4 !default; .fab { @include text-align(center); @include appearance(none); @include border-radius(50%); position: relative; z-index: 0; display: block; overflow: hidden; width: $fab-size; height: $fab-size; font-size: 14px; line-height: $fab-size; text-overflow: ellipsis; text-transform: none; white-space: nowrap; cursor: pointer; transition: background-color, opacity 100ms linear; background-clip: padding-box; font-kerning: none; user-select: none; contain: strict; } .fab ion-icon { flex: 1; font-size: 2.4rem; } // FAB mini // -------------------------------------------------- .fab[mini] { @include margin(($fab-size - $fab-mini-size) / 2); width: $fab-mini-size; height: $fab-mini-size; line-height: $fab-mini-size; } .fab[mini] .fab-close-icon { line-height: $fab-mini-size; } // FAB container // -------------------------------------------------- ion-fab { position: absolute; z-index: $z-index-fixed-content; &[center] { @include position(null, null, null, 50%); @include margin-horizontal(-$fab-size / 2, null); } &[middle] { @include margin(-$fab-size / 2, null, null, null); top: 50%; } &[top] { top: $fab-content-margin; } &[right] { // scss-lint:disable PropertySpelling @include multi-dir() { right: $fab-content-margin; } @include multi-dir() { right: calc(#{$fab-content-margin} + constant(safe-area-inset-right)); right: calc(#{$fab-content-margin} + env(safe-area-inset-right)); } } &[end] { @include position-horizontal(null, $fab-content-margin); @include safe-position-horizontal(null, $fab-content-margin); } &[bottom] { bottom: $fab-content-margin; } &[left] { // scss-lint:disable PropertySpelling @include multi-dir() { left: $fab-content-margin; } @include multi-dir() { left: calc(#{$fab-content-margin} + constant(safe-area-inset-left)); left: calc(#{$fab-content-margin} + env(safe-area-inset-left)); } } &[start] { @include position-horizontal($fab-content-margin, null); @include safe-position-horizontal($fab-content-margin, null); } &[top][edge] { top: -$fab-size / 2; } &[bottom][edge] { bottom: -$fab-size / 2; } } // FAB list (speed dial) // -------------------------------------------------- ion-fab-list { @include margin($fab-size + $fab-list-margin, 0); position: absolute; top: 0; display: none; flex-direction: column; align-items: center; min-width: $fab-size; min-height: $fab-size; } .fab-in-list { @include margin(8px, 0); width: $fab-mini-size; height: $fab-mini-size; opacity: 0; visibility: hidden; transform: scale(0); } .fab-in-list.show { opacity: 1; visibility: visible; transform: scale(1); } ion-fab-list[side=left] .fab-in-list, ion-fab-list[side=right] .fab-in-list { @include margin(0, 8px); } ion-fab-list[side=top] { top: auto; bottom: 0; flex-direction: column-reverse; } ion-fab-list[side=left] { @include margin(0, $fab-size + $fab-list-margin); @include position-horizontal(null, 0); flex-direction: row-reverse; } ion-fab-list[side=right] { @include margin(0, $fab-size + $fab-list-margin); @include position(null, null, null, 0); flex-direction: row; } // FAB animation // -------------------------------------------------- .fab-list-active { display: flex; } .fab-close-icon { @include position(0, 0, null, 0); position: absolute; line-height: $fab-size; opacity: 0; transform: scale(.4) rotateZ(-45deg); transition: all ease-in-out 300ms; transition-property: transform, opacity; } .fab .button-inner { transition: all ease-in-out 300ms; transition-property: transform, opacity; } .fab-close-active .fab-close-icon { opacity: 1; transform: scale(1) rotateZ(0deg); } .fab-close-active .button-inner { opacity: 0; transform: scale(.4) rotateZ(45deg); }