framework7
Version:
Full featured mobile HTML framework for building iOS & Android apps
422 lines (400 loc) • 11.8 kB
text/less
@import './button-vars.less';
button {
appearance: none;
width: 100%;
}
.button {
--f7-touch-ripple-color: rgba(var(--f7-theme-color-rgb), 0.25);
text-decoration: none;
text-align: center;
display: flex;
appearance: none;
background: none;
margin: 0;
white-space: nowrap;
text-overflow: ellipsis;
position: relative;
overflow: hidden;
font-family: inherit;
cursor: pointer;
outline: 0;
box-sizing: border-box;
vertical-align: middle;
justify-content: center;
align-items: center;
border: var(--f7-button-border-width, 0px) solid
var(--f7-button-border-color, var(--f7-theme-color));
font-size: var(--f7-button-font-size);
color: var(--f7-button-text-color, var(--f7-theme-color));
height: var(--f7-button-height);
line-height: calc(var(--f7-button-height) - var(--f7-button-border-width, 0) * 2);
padding: var(--f7-button-padding-vertical, 0px) var(--f7-button-padding-horizontal);
border-radius: var(--f7-button-border-radius);
min-width: var(--f7-button-min-width);
font-weight: var(--f7-button-font-weight);
letter-spacing: var(--f7-button-letter-spacing);
text-transform: var(--f7-button-text-transform);
background-color: var(--f7-button-bg-color);
box-shadow: var(--f7-button-box-shadow);
&.active-state {
color: var(--f7-button-pressed-text-color, var(--f7-button-text-color, var(--f7-theme-color)));
}
input[type='submit']&,
input[type='button']&,
input[type='reset']& {
width: 100%;
}
> i + span,
> span + span,
> span ~ i {
.ltr({
margin-left: 4px;
});
.rtl({
margin-right: 4px;
});
}
}
.subnavbar .button,
.navbar .button,
.toolbar .button,
.searchbar .button {
color: var(--f7-button-text-color, var(--f7-theme-color));
}
.button-round,
.ios .button-round-ios,
.md .button-round-md {
--f7-button-border-radius: var(--f7-button-height);
}
.button-fill,
.ios .button-fill-ios,
.md .button-fill-md,
.button-active,
.button.tab-link-active {
--f7-button-bg-color: var(--f7-button-fill-bg-color, var(--f7-theme-color));
--f7-button-text-color: var(--f7-button-fill-text-color, #fff);
--f7-touch-ripple-color: var(--f7-touch-ripple-white);
.ios .color-white &,
.ios &.color-white {
--f7-button-text-color: #000;
}
}
.button-fill,
.ios .button-fill-ios,
.md .button-fill-md {
--f7-button-pressed-bg-color: var(--f7-button-fill-pressed-bg-color);
}
.button-active,
.button.tab-link-active {
--f7-button-pressed-bg-color: var(--f7-button-bg-color);
}
.button-outline,
.ios .button-outline-ios,
.md .button-outline-md {
--f7-button-border-color: var(--f7-button-outline-border-color, var(--f7-theme-color));
--f7-button-border-width: var(--f7-button-outline-border-width);
}
.button-tonal,
.ios .button-tonal-ios,
.md .button-tonal-md {
--f7-button-bg-color: var(--f7-button-tonal-bg-color);
--f7-button-text-color: var(--f7-button-tonal-text-color);
--f7-button-pressed-bg-color: var(--f7-button-tonal-pressed-bg-color);
}
.button-large,
.ios .button-large-ios,
.md .button-large-md {
--f7-button-height: var(--f7-button-large-height);
--f7-button-font-size: var(--f7-button-large-font-size);
--f7-button-font-weight: var(--f7-button-large-font-weight);
--f7-button-text-transform: var(--f7-button-large-text-transform);
}
.button-small,
.ios .button-small-ios,
.md .button-small-md {
--f7-button-outline-border-width: var(--f7-button-small-outline-border-width);
--f7-button-height: var(--f7-button-small-height);
--f7-button-font-size: var(--f7-button-small-font-size);
--f7-button-font-weight: var(--f7-button-small-font-weight);
--f7-button-text-transform: var(--f7-button-small-text-transform);
}
.ios .button-small.button-fill,
.ios .button-small-ios.button-fill,
.ios .button-small.button-fill-ios {
--f7-button-border-width: var(--f7-button-small-outline-border-width);
--f7-button-pressed-text-color: var(--f7-theme-color);
--f7-button-pressed-bg-color: transparent;
}
.segmented {
align-self: center;
display: flex;
flex-wrap: nowrap;
border-radius: var(--f7-button-border-radius);
box-shadow: var(--f7-button-box-shadow);
box-sizing: border-box;
.button,
button {
width: 100%;
flex-shrink: 1;
min-width: 0;
border-radius: 0;
}
.ltr({
.button:first-child {
border-radius: var(--f7-button-border-radius) 0 0 var(--f7-button-border-radius);
}
.button:not(.button-outline):first-child {
border-left: none;
}
.button.button-outline {
&:nth-child(n + 2) {
border-left: none;
}
}
.button:last-child {
border-radius: 0 var(--f7-button-border-radius) var(--f7-button-border-radius) 0;
}
.button-round:first-child {
border-radius: var(--f7-button-height) 0 0 var(--f7-button-height);
}
.button-round:last-child {
border-radius: 0 var(--f7-button-height) var(--f7-button-height) 0;
}
});
.rtl({
.button:first-child {
border-radius: 0 var(--f7-button-border-radius) var(--f7-button-border-radius) 0;
}
.button:not(.button-outline):first-child {
border-right: none;
}
.button.button-outline {
&:nth-child(n + 2) {
border-right: none;
}
}
.button:last-child {
border-radius: var(--f7-button-border-radius) 0 0 var(--f7-button-border-radius);
}
.button-round:first-child {
border-radius: 0 var(--f7-button-height) var(--f7-button-height) 0;
}
.button-round:last-child {
border-radius: var(--f7-button-height) 0 0 var(--f7-button-height);
}
});
.button:first-child:last-child {
border-radius: var(--f7-button-border-radius);
}
}
.segmented-raised,
.ios .segmented-raised-ios,
.md .segmented-raised-md {
box-shadow: var(--f7-button-raised-box-shadow);
.button:not(.button-outline) {
.ltr({
border-left: 1px solid var(--f7-segmented-raised-divider-color);
});
.rtl({
border-right: 1px solid var(--f7-segmented-raised-divider-color);
});
}
}
// Raised
.button-raised,
.ios .button-raised-ios,
.md .button-raised-md {
--f7-button-box-shadow: var(--f7-button-raised-box-shadow);
&.active-state {
--f7-button-box-shadow: var(--f7-button-raised-pressed-box-shadow);
}
}
// Strong
.segmented-strong,
.ios .segmented-strong-ios,
.md .segmented-strong-md {
--f7-button-bg-color: transparent;
--f7-button-hover-bg-color: var(--f7-segmented-strong-button-hover-bg-color);
--f7-button-text-color: var(--f7-segmented-strong-button-text-color);
--f7-button-font-weight: var(--f7-segmented-strong-button-font-weight);
--f7-button-text-transform: var(--f7-segmented-strong-button-text-transform);
--f7-button-pressed-bg-color: var(--f7-segmented-strong-button-pressed-bg-color);
position: relative;
background: var(--f7-segmented-strong-bg-color);
border-radius: calc(var(--f7-button-border-radius) + 2px);
box-shadow: none;
padding: var(--f7-segmented-strong-padding);
overflow: hidden;
.button {
z-index: 1;
transform: translate3d(0, 0, 0);
}
.button,
.button:first-child,
.button:last-child {
border-radius: var(--f7-button-border-radius);
}
.button + .button {
.ltr({
margin-left: var(--f7-segmented-strong-between-buttons);
});
.rtl({
margin-right: var(--f7-segmented-strong-between-buttons);
});
}
.button.button-active,
.button.tab-link-active {
--f7-button-hover-bg-color: transparent;
--f7-button-bg-color: transparent;
--f7-button-text-color: var(--f7-segmented-strong-button-active-text-color);
--f7-button-font-weight: var(--f7-segmented-strong-button-active-font-weight);
}
.segmented-highlight {
--f7-segmented-highlight-num: 1;
--f7-segmented-highlight-active: 0;
--f7-segmented-highlight-padding: calc(var(--f7-segmented-strong-padding) * 2);
--f7-segmented-highlight-between: var(--f7-segmented-strong-between-buttons);
--f7-segmented-highlight-width: calc(
(
100% - var(--f7-segmented-highlight-padding) - var(--f7-segmented-highlight-between) *
(var(--f7-segmented-highlight-num) - 1)
) / var(--f7-segmented-highlight-num)
);
position: absolute;
background-color: var(--f7-segmented-strong-button-active-bg-color);
border-radius: var(--f7-button-border-radius);
box-shadow: var(--f7-segmented-strong-button-active-box-shadow);
left: var(--f7-segmented-strong-padding);
top: var(--f7-segmented-strong-padding);
height: calc(100% - var(--f7-segmented-strong-padding) * 2);
width: var(--f7-segmented-highlight-width);
z-index: 0;
transform: translateX(
calc(
var(--f7-segmented-highlight-active) * 100% + var(--f7-segmented-highlight-active) *
var(--f7-segmented-highlight-between)
)
);
transition: 200ms;
}
}
.segmented-highlight {
.button:nth-child(2) ~ & {
--f7-segmented-highlight-num: 2;
}
.button:nth-child(3) ~ & {
--f7-segmented-highlight-num: 3;
}
.button:nth-child(4) ~ & {
--f7-segmented-highlight-num: 4;
}
.button:nth-child(5) ~ & {
--f7-segmented-highlight-num: 5;
}
.button:nth-child(6) ~ & {
--f7-segmented-highlight-num: 6;
}
.button:nth-child(7) ~ & {
--f7-segmented-highlight-num: 7;
}
.button:nth-child(8) ~ & {
--f7-segmented-highlight-num: 8;
}
.button:nth-child(9) ~ & {
--f7-segmented-highlight-num: 9;
}
.button:nth-child(10) ~ & {
--f7-segmented-highlight-num: 10;
}
.button-active:nth-child(2) ~ &,
.tab-link-active:nth-child(2) ~ & {
--f7-segmented-highlight-active: 1;
}
.button-active:nth-child(3) ~ &,
.tab-link-active:nth-child(3) ~ & {
--f7-segmented-highlight-active: 2;
}
.button-active:nth-child(4) ~ &,
.tab-link-active:nth-child(4) ~ & {
--f7-segmented-highlight-active: 3;
}
.button-active:nth-child(5) ~ &,
.tab-link-active:nth-child(5) ~ & {
--f7-segmented-highlight-active: 4;
}
.button-active:nth-child(6) ~ &,
.tab-link-active:nth-child(6) ~ & {
--f7-segmented-highlight-active: 5;
}
.button-active:nth-child(7) ~ &,
.tab-link-active:nth-child(7) ~ & {
--f7-segmented-highlight-active: 6;
}
.button-active:nth-child(8) ~ &,
.tab-link-active:nth-child(8) ~ & {
--f7-segmented-highlight-active: 7;
}
.button-active:nth-child(9) ~ &,
.tab-link-active:nth-child(9) ~ & {
--f7-segmented-highlight-active: 8;
}
.button-active:nth-child(10) ~ &,
.tab-link-active:nth-child(10) ~ & {
--f7-segmented-highlight-active: 9;
}
}
// Round
.segmented-round,
.ios .segmented-round-ios,
.md .segmented-round-md {
border-radius: var(--f7-button-height);
.segmented-highlight {
border-radius: var(--f7-button-height);
}
}
.subnavbar .segmented {
width: 100%;
}
.button-preloader {
position: relative;
--f7-preloader-color: var(--f7-button-text-color, var(--f7-theme-color));
&:not(.button-large) {
--f7-preloader-size: calc(var(--f7-button-height) - 6px);
}
&.button-fill {
--f7-preloader-color: #fff;
}
& > span:not(.preloader) {
transition: 0.2s;
display: inline-flex;
align-items: center;
align-content: center;
justify-content: center;
transform: scale(1);
}
& > .preloader {
position: absolute;
left: 50%;
top: 50%;
transition: 0.2s;
transition-property: opacity;
opacity: 0;
visibility: hidden;
margin-left: calc(-1 * var(--f7-preloader-size) / 2);
margin-top: calc(-1 * var(--f7-preloader-size) / 2);
}
&.button-loading > span:not(.preloader) {
opacity: 0;
transform: scale(0);
}
&.button-loading > .preloader {
opacity: 1;
visibility: visible;
}
}
.if-ios-theme({
@import './button-ios.less';
});
.if-md-theme({
@import './button-md.less';
});