framework7
Version:
Full featured mobile HTML framework for building iOS & Android apps
303 lines (291 loc) • 6.21 kB
text/less
/* === Photo Browser === */
@import './photo-browser-vars.less';
.photo-browser {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 400;
}
.photo-browser-standalone {
&.modal-in {
transition-duration: 0ms;
animation: photo-browser-in 400ms;
}
&.modal-out {
transition-duration: 0ms;
animation: photo-browser-out 400ms ;
&.swipe-close-to-bottom,
&.swipe-close-to-top {
animation: none ;
}
}
&.photo-browser-transitioning {
transition: 400ms;
animation: none ;
}
}
.photo-browser-popup {
&.modal-out {
&.swipe-close-to-bottom,
&.swipe-close-to-top {
transition-duration: 300ms;
}
&.swipe-close-to-bottom {
transform: translate3d(0, 100vh, 0);
}
&.swipe-close-to-top {
transform: translate3d(0, -100vh, 0);
}
}
}
.photo-browser-page {
background: none;
.toolbar {
transform: none;
}
}
.photo-browser-popup {
background: none;
}
.photo-browser-of {
margin: 0 5px;
}
.photo-browser-captions {
pointer-events: none;
position: absolute;
left: 0;
width: 100%;
bottom: var(--f7-safe-area-bottom);
z-index: 10;
opacity: 1;
transition-duration: 400ms;
&.photo-browser-captions-exposed {
opacity: 0;
}
}
.toolbar ~ .toolbar.photo-browser-thumbs {
bottom: calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom));
.page ~ .photo-browser-page:not(.photo-browser-exposed) &,
.photo-browser-popup:not(.photo-browser-exposed) &,
.photo-browser-standalone:not(.photo-browser-exposed) & {
height: var(--f7-toolbar-height);
}
.photo-browser-exposed & {
transform: translate3d(0, calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom, 0)), 0);
.swiper {
height: calc(100% - var(--f7-safe-area-bottom, 0));
}
}
}
.navbar + .toolbar.photo-browser-thumbs {
.swiper {
height: calc(100% - var(--f7-safe-area-bottom, 0));
}
}
.toolbar ~ .photo-browser-captions {
bottom: calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom));
transform: translate3d(0, 0px, 0);
&.photo-browser-captions-exposed {
transform: translate3d(0, 0px, 0);
}
}
.toolbar ~ .toolbar ~ .photo-browser-captions {
bottom: calc(var(--f7-toolbar-height) * 2 + var(--f7-safe-area-bottom));
&.photo-browser-captions-exposed {
transform: translate3d(0, var(--f7-toolbar-height), 0);
}
}
.toolbar:has(+ .photo-browser-thumbs) {
&::before,
&::after {
top: calc(-16px - var(--f7-toolbar-height)) ;
}
}
.photo-browser-thumbs {
transition-property: transform, background-color, color;
&::before,
&::after {
display: none;
}
.swiper {
width: 100%;
height: 100%;
}
.swiper-slide {
width: auto;
display: flex;
align-items: center;
justify-content: center;
}
img {
width: auto;
height: 75%;
display: block;
border-radius: 8px;
min-width: 4px;
}
.swiper-slide img {
transform: translateX(-4px);
transition-duration: 150ms;
}
.swiper-slide-active img {
transform: scale(1.2);
}
.swiper-slide-active ~ .swiper-slide img {
transform: translateX(4px);
}
}
.photo-browser-caption {
box-sizing: border-box;
color: var(--f7-photobrowser-caption-text-color);
transition-duration: 400ms;
position: absolute;
bottom: 0;
left: 0;
opacity: 0;
padding: 4px 5px;
width: 100%;
text-align: center;
font-size: var(--f7-photobrowser-caption-font-size);
font-weight: var(--f7-photobrowser-caption-font-weight);
&:empty {
display: none;
}
&.photo-browser-caption-active {
opacity: 1;
}
}
.photo-browser-swiper-container {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: hidden;
background: var(--f7-photobrowser-bg-color);
transition: 400ms;
transition-property: background-color;
touch-action: none;
}
.photo-browser-prev,
.photo-browser-next {
&.swiper-button-disabled {
opacity: 0.3;
pointer-events: none;
}
}
.photo-browser-slide {
width: 100%;
height: 100%;
position: relative;
overflow: hidden;
display: flex;
justify-content: center;
align-items: center;
flex-shrink: 0;
box-sizing: border-box;
span.swiper-zoom-container {
display: none;
}
img {
width: auto;
height: auto;
max-width: 100%;
max-height: 100%;
display: none;
}
&.swiper-slide-active,
&.swiper-slide-next,
&.swiper-slide-prev {
span.swiper-zoom-container {
display: flex;
}
img {
display: inline;
}
&.photo-browser-slide-lazy {
.preloader {
display: block;
}
}
}
iframe {
width: 100%;
height: 100%;
}
.preloader {
display: none;
position: absolute;
width: 42px;
height: 42px;
margin-left: -21px;
margin-top: -21px;
left: 50%;
top: 50%;
}
}
.photo-browser-page {
touch-action: none;
.navbar,
.toolbar {
transform: translate3d(0, 0, 0);
transition-duration: 400ms;
}
}
.photo-browser-exposed {
.navbar,
.toolbar:not(.photo-browser-thumbs) {
opacity: 0;
visibility: hidden;
pointer-events: none;
}
.toolbar:not(.photo-browser-thumbs) ~ .photo-browser-captions,
.toolbar ~ .toolbar.photo-browser-thumbs ~ .photo-browser-captions {
transform: translate3d(0, var(--f7-toolbar-height), 0);
}
.photo-browser-swiper-container {
background: var(--f7-photobrowser-exposed-bg-color);
}
}
.view.with-photo-browser-page-exposed {
.navbar {
opacity: 0;
pointer-events: none;
}
}
@keyframes photo-browser-in {
0% {
transform: translate3d(0, 0, 0) scale(0.5);
opacity: 0;
}
50% {
transform: translate3d(0, 0, 0) scale(1.05);
opacity: 1;
}
100% {
transform: translate3d(0, 0, 0) scale(1);
opacity: 1;
}
}
@keyframes photo-browser-out {
0% {
transform: translate3d(0, 0, 0) scale(1);
opacity: 1;
}
50% {
transform: translate3d(0, 0, 0) scale(1.05);
opacity: 1;
}
100% {
transform: translate3d(0, 0, 0) scale(0.5);
opacity: 0;
}
}
.if-ios-theme({
@import './photo-browser-ios.less';
});
.if-md-theme({
@import './photo-browser-md.less';
});