framework7
Version:
Full featured mobile HTML framework for building iOS & Android apps
593 lines (587 loc) • 15.5 kB
text/less
.ios {
--f7-navbarLeftTextOffset: calc(4px + 12px + var(--f7-navbar-inner-padding-left));
--f7-navbarTitleLargeOffset: var(--f7-navbar-large-title-padding-left);;
.navbar {
.material-icons {
width: 24px;
}
.f7-icons {
width: 28px;
}
a.icon-only {
width: 44px;
margin: 0;
justify-content: center;
}
.left, .right {
a + a {
.ltr({
margin-left: 15px;
});
.rtl({
margin-right: 15px;
});
}
}
b {
font-weight: 600;
}
.left {
.ltr({
margin-right: 10px;
});
.rtl({
margin-left: 10px;
});
}
.right {
.ltr({
margin-left: 10px;
});
.rtl({
margin-right: 10px;
});
}
.right:first-child {
.ltr({
right: calc(8px + var(--f7-safe-area-right));
});
.rtl({
left: calc(8px + var(--f7-safe-area-left));
});
}
}
.navbar-inner {
justify-content: space-between;
}
.navbar-inner-left-title {
justify-content: flex-start;
.right {
.ltr({
margin-left: auto;
});
.rtl({
margin-right: auto;
});
}
.title {
text-align: left;
.ltr({
margin-right: 10px;
});
.rtl({
margin-left: 10px;
});
}
}
// Positions
.view-master-detail .navbar-previous:not(.navbar-master),
.view:not(.view-master-detail) .navbar-previous {
pointer-events: none;
.title-large {
transform: translateY(-100%);
opacity: 0;
transition: 0ms;
.title-large-text {
transform: scale(0.5);
transition: 0ms;
}
.title-large-inner {
transform: translateX(-100%);
opacity: 0;
transition: 0ms;
}
}
.left,
.right,
> .title,
.subnavbar,
.fading {
opacity: 0;
}
.sliding {
opacity: 0;
}
.subnavbar.sliding, &.sliding .subnavbar {
opacity: 1;
transform: translate3d(-100%, 0, 0);
}
}
.navbar-next {
pointer-events: none;
.title-large {
transform: translateX(100%);
transition: 0ms;
.title-large-text, .title-large-inner {
transition: 0ms;
}
}
.left, .right, > .title, .subnavbar, .fading {
opacity: 0;
}
.sliding {
opacity: 0;
}
&.sliding {
.left, .right, > .title, .subnavbar {
opacity: 0;
}
}
.subnavbar.sliding, &.sliding .subnavbar {
opacity: 1;
transform: translate3d(100%, 0, 0);
}
}
.router-dynamic-navbar-inside {
.navbar-next {
.title-large,
.title-large-text,
.title-large-inner {
transform: none;
}
}
.navbar-previous {
.title-large {
opacity: 1;
transform: translate3d(0px, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0);
}
.title-large-text,
.title-large-inner {
transform: translate3d(0, calc(var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0);
}
}
}
// Animations
.router-transition {
.navbar {
transition-duration: var(--f7-page-transition-duration);
}
.title-large {
transition: 0ms;
}
.navbar-current {
.left,
> .title,
.right, .subnavbar {
animation: ios-navbar-element-fade-out var(--f7-page-transition-duration) forwards;
}
.sliding,
.left.sliding .icon + span,
&.sliding .left,
&.sliding .left .icon + span,
&.sliding > .title,
&.sliding .right {
transition-duration: var(--f7-page-transition-duration);
opacity: 0 ;
animation: none;
}
&.sliding .subnavbar,
.sliding.subnavbar {
transition-duration: var(--f7-page-transition-duration);
animation: none;
opacity: 1;
}
}
}
.router-transition-forward .navbar-next,
.router-transition-backward .navbar-previous {
.left, > .title, .right, .subnavbar {
animation: ios-navbar-element-fade-in var(--f7-page-transition-duration) forwards;
}
& .sliding,
& .left.sliding .icon + span,
&.sliding .left,
&.sliding .left .icon + span,
&.sliding > .title,
&.sliding .right,
&.sliding .subnavbar {
transition-duration: var(--f7-page-transition-duration);
animation: none;
transform: translate3d(0,0,0) ;
opacity: 1 ;
}
}
.router-transition-forward {
.navbar-current.router-navbar-transition-from-large.router-navbar-transition-to-large {
.title-large {
overflow: visible;
.title-large-text {
animation: ios-navbar-title-large-text-slide-up var(--f7-page-transition-duration) forwards, ios-navbar-title-large-text-fade-out var(--f7-page-transition-duration) forwards;
}
}
}
.navbar-current.router-navbar-transition-from-large:not(.router-navbar-transition-to-large) {
.title-large {
animation: ios-navbar-title-large-slide-up var(--f7-page-transition-duration) forwards;
.title-large-text {
animation: ios-navbar-title-large-text-fade-out var(--f7-page-transition-duration) forwards, ios-navbar-title-large-text-scale-out var(--f7-page-transition-duration) forwards;
}
}
}
.navbar-current.router-navbar-transition-from-large {
.title-large-inner {
animation: ios-navbar-title-large-inner-current-to-previous var(--f7-page-transition-duration) forwards;
}
}
&:not(.router-dynamic-navbar-inside) .navbar-next.router-navbar-transition-from-large {
.left .back span {
animation: ios-navbar-back-text-next-to-current var(--f7-page-transition-duration) forwards;
transition: none;
.ltr({
transform-origin: left center;
});
.rtl({
transform-origin: right center;
});
}
}
.navbar-next.router-navbar-transition-from-large.router-navbar-transition-to-large {
.title-large {
overflow: visible;
.title-large-text,
.title-large-inner {
animation: ios-navbar-title-large-text-slide-left var(--f7-page-transition-duration) forwards;
}
}
}
.navbar-next.router-navbar-transition-to-large:not(.router-navbar-transition-from-large) {
.title-large {
animation: ios-navbar-title-large-slide-down var(--f7-page-transition-duration) forwards;
.title-large-text,
.title-large-inner {
animation: ios-navbar-title-large-text-slide-left-top var(--f7-page-transition-duration) forwards;
}
}
}
.navbar-next.navbar-inner-large:not(.navbar-inner-large-collapsed),
.navbar-current.navbar-inner-large:not(.navbar-inner-large-collapsed) {
> .title {
animation: none;
opacity: 0 ;
transition-duration: 0;
}
}
&.router-dynamic-navbar-inside .navbar-next,
&.router-dynamic-navbar-inside .navbar-current {
.title-large,
.title-large-text,
.title-large-inner {
animation: none ;
}
}
}
.router-transition-backward {
&:not(.router-dynamic-navbar-inside) .navbar-current.router-navbar-transition-to-large .left .back span {
animation: ios-navbar-back-text-current-to-previous var(--f7-page-transition-duration) forwards;
transition: none;
.ltr({
transform-origin: left center;
});
.rtl({
transform-origin: right center;
});
}
.navbar-current.router-navbar-transition-from-large.router-navbar-transition-to-large {
.title-large {
overflow: visible;
transform: translateX(100%);
.title-large-text,
.title-large-inner {
animation: ios-navbar-title-large-text-slide-right var(--f7-page-transition-duration) forwards;
}
}
}
.navbar-current.router-navbar-transition-from-large:not(.router-navbar-transition-to-large) {
.title-large {
animation: ios-navbar-title-large-slide-up var(--f7-page-transition-duration) forwards;
.title-large-text,
.title-large-inner {
animation: ios-navbar-title-large-text-slide-right-bottom var(--f7-page-transition-duration) forwards;
}
}
}
.navbar-current.router-navbar-transition-to-large:not(.router-navbar-transition-from-large) {
.title-large {
opacity: 0;
}
}
.navbar-previous.router-navbar-transition-from-large.router-navbar-transition-to-large {
.title-large {
overflow: visible;
opacity: 1;
transform: translateY(0);
.title-large-text {
animation: ios-navbar-title-large-text-slide-down var(--f7-page-transition-duration) forwards, ios-navbar-title-large-text-fade-in var(--f7-page-transition-duration) forwards;
}
}
}
.navbar-previous.router-navbar-transition-to-large:not(.router-navbar-transition-from-large) {
.title-large {
opacity: 1;
animation: ios-navbar-title-large-slide-down var(--f7-page-transition-duration) forwards;
.title-large-text {
animation: ios-navbar-title-large-text-scale-in var(--f7-page-transition-duration) forwards, ios-navbar-title-large-text-fade-in var(--f7-page-transition-duration) forwards;
}
}
}
.navbar-previous.router-navbar-transition-to-large {
.title-large-inner {
animation: ios-navbar-title-large-inner-previous-to-current var(--f7-page-transition-duration) forwards;
}
}
.navbar-current.navbar-inner-large:not(.navbar-inner-large-collapsed),
.navbar-previous.navbar-inner-large:not(.navbar-inner-large-collapsed) {
> .title {
animation: none;
opacity: 0 ;
transition-duration: 0;
}
}
&.router-dynamic-navbar-inside .navbar-previous,
&.router-dynamic-navbar-inside .navbar-current {
.title-large,
.title-large-text,
.title-large-inner {
animation: none ;
}
}
}
}
.view-master-detail {
.navbar-master.navbar-previous {
pointer-events: auto;
.left,
&:not(.navbar-inner-large) .title,
.right,
.subnavbar {
opacity: 1;
}
}
.ios &.router-transition .navbar-master {
.left,
.left .icon + span,
&:not(.navbar-inner-large) .title,
.right,
.subnavbar,
.sliding,
.fading {
opacity: 1 ;
transition-duration: 0ms;
transform: none ;
animation: none ;
}
&.navbar-inner-large {
.title {
opacity: calc(-1 + 2 * var(--f7-navbar-large-collapse-progress)) ;
transition-duration: 0ms;
transform: none ;
animation: none ;
}
.title-large,
.title-large-text,
.title-large-inner {
transition-duration: 0ms;
animation: none ;
}
}
}
}
@keyframes ios-navbar-element-fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes ios-navbar-element-fade-out {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes ios-navbar-title-large-slide-up {
0% {
transform: translateY(0%);
}
100% {
transform: translateY(calc(-1 * var(--f7-navbar-large-title-height)));
}
}
@keyframes ios-navbar-title-large-slide-down {
0% {
transform: translateY(calc(-1 * var(--f7-navbar-large-title-height)));
}
100% {
transform: translateY(0%);
}
}
@keyframes ios-navbar-title-large-text-slide-up {
0% {
transform: translateX(0px) translateY(0%) scale(1);
}
100% {
transform: translateX(calc(var(--f7-navbarLeftTextOffset) - var(--f7-navbarTitleLargeOffset))) translateY(calc(-1 * (var(--f7-navbar-height) + var(--f7-navbar-large-title-height)) / 2)) scale(0.5);
}
}
@keyframes ios-navbar-title-large-text-slide-down {
0% {
transform: translateX(calc(var(--f7-navbarLeftTextOffset) - var(--f7-navbarTitleLargeOffset))) translateY(calc(-1 * (var(--f7-navbar-height) + var(--f7-navbar-large-title-height)) / 2)) scale(0.5);
}
100% {
transform: translateX(0px) translateY(0%) scale(1);
}
}
@keyframes ios-navbar-title-large-text-slide-left {
0% {
.ltr({
transform: translateX(0%) scale(1);
});
.rtl({
transform: translateX(-200%) scale(1);
});
}
100% {
.ltr({
transform: translateX(-100%) scale(1);
});
.rtl({
transform: translateX(-100%) scale(1);
});
}
}
@keyframes ios-navbar-title-large-text-slide-right {
0% {
transform: translateX(-100%) scale(1);
}
100% {
.ltr({
transform: translateX(0%) scale(1);
});
.rtl({
transform: translateX(-200%) scale(1);
});
}
}
@keyframes ios-navbar-title-large-text-slide-left-top {
0% {
.ltr({
transform: translateX(100%) translateY(var(--f7-navbar-large-title-height)) scale(1);
});
.rtl({
transform: translateX(-100%) translateY(var(--f7-navbar-large-title-height)) scale(1);
});
}
100% {
transform: translateX(0%) translateY(0%) scale(1);
}
}
@keyframes ios-navbar-title-large-text-slide-right-bottom {
0% {
transform: translateX(0%) translateY(0%) scale(1);
}
100% {
.ltr({
transform: translateX(100%) translateY(var(--f7-navbar-large-title-height)) scale(1);
});
.rtl({
transform: translateX(-100%) translateY(var(--f7-navbar-large-title-height)) scale(1);
});
}
}
@keyframes ios-navbar-title-large-text-fade-out {
0% {
opacity: 1;
}
80% {
opacity: 0;
}
100% {
opacity: 0;
}
}
@keyframes ios-navbar-title-large-text-fade-in {
0% {
opacity: 0;
}
20% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes ios-navbar-title-large-text-scale-out {
0% {
transform: translateY(0%) scale(1);
}
100% {
transform: translateY(0%) scale(0.5);
}
}
@keyframes ios-navbar-title-large-text-scale-in {
0% {
transform: translateY(0%) scale(0.5);
}
100% {
transform: translateY(0%) scale(1);
}
}
@keyframes ios-navbar-back-text-current-to-previous {
0% {
opacity: 1;
transform: translateY(0px) translateX(0px) scale(1);
}
80% {
opacity: 0;
}
100% {
opacity: 0;
transform: translateX(calc(var(--f7-navbarTitleLargeOffset) - var(--f7-navbarLeftTextOffset))) translateY(calc((var(--f7-navbar-height) + var(--f7-navbar-large-title-height)) / 2)) scale(2);
}
}
@keyframes ios-navbar-back-text-next-to-current {
0% {
opacity: 0;
transform: translateX(calc(var(--f7-navbarTitleLargeOffset) - var(--f7-navbarLeftTextOffset))) translateY(calc((var(--f7-navbar-height) + var(--f7-navbar-large-title-height)) / 2)) scale(2);
}
20% {
opacity: 0;
}
100% {
opacity: 1;
transform: translateX(0px) translateY(0px) scale(1);
}
}
@keyframes ios-navbar-title-large-inner-current-to-previous {
0% {
transform: translateX(0%);
opacity: 1;
}
100% {
.ltr({
transform: translateX(-100%);
});
.rtl({
transform: translateX(100%);
});
opacity: 0;
}
}
@keyframes ios-navbar-title-large-inner-previous-to-current {
0% {
.ltr({
transform: translateX(-100%);
});
.rtl({
transform: translateX(100%);
});
opacity: 0;
}
100% {
transform: translateX(0%);
opacity: 1;
}
}