mirror of
https://github.com/tabler/tabler.git
synced 2026-10-12 21:27:06 +04:00
119 lines
2.9 KiB
SCSS
119 lines
2.9 KiB
SCSS
@use '../config' as *;
|
|
|
|
// Every item is an equal, invisible column; hovering a column shows its image over the whole gallery
|
|
.hover-gallery {
|
|
// scss-docs-start hover-gallery-css-vars
|
|
--hover-gallery-aspect-ratio: #{$hover-gallery-aspect-ratio};
|
|
--hover-gallery-indicator-size: #{$hover-gallery-indicator-size};
|
|
--hover-gallery-indicator-gap: #{$hover-gallery-indicator-gap};
|
|
--hover-gallery-indicator-padding: #{$hover-gallery-indicator-padding};
|
|
--hover-gallery-indicator-color: #{$hover-gallery-indicator-color};
|
|
--hover-gallery-indicator-scrim-height: #{$hover-gallery-indicator-scrim-height};
|
|
--hover-gallery-indicator-scrim-bg: #{$hover-gallery-indicator-scrim-bg};
|
|
--hover-gallery-indicator-inactive-opacity: #{$hover-gallery-indicator-inactive-opacity};
|
|
// scss-docs-end hover-gallery-css-vars
|
|
position: relative;
|
|
display: flex;
|
|
aspect-ratio: var(--hover-gallery-aspect-ratio);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.hover-gallery-item {
|
|
flex: 1;
|
|
|
|
img {
|
|
position: absolute;
|
|
inset: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
pointer-events: none;
|
|
object-fit: cover;
|
|
opacity: 0;
|
|
}
|
|
|
|
&:first-child img,
|
|
&:hover img {
|
|
opacity: 1;
|
|
}
|
|
|
|
&:hover img {
|
|
z-index: 1;
|
|
}
|
|
}
|
|
|
|
// One bar per item at the bottom edge, lit for the image on display
|
|
.hover-gallery-indicators {
|
|
gap: var(--hover-gallery-indicator-gap);
|
|
padding: var(--hover-gallery-indicator-padding);
|
|
|
|
// Darkens the bottom edge so the bars stay visible on any image
|
|
&::after {
|
|
position: absolute;
|
|
inset: auto 0 0;
|
|
z-index: 1;
|
|
height: var(--hover-gallery-indicator-scrim-height);
|
|
pointer-events: none;
|
|
content: '';
|
|
background: var(--hover-gallery-indicator-scrim-bg);
|
|
}
|
|
|
|
.hover-gallery-item {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
|
|
// The gap between columns must not drop the hover, so the item reaches over it
|
|
padding-inline: calc(var(--hover-gallery-indicator-gap) * 0.5);
|
|
margin-inline: calc(var(--hover-gallery-indicator-gap) * -0.5);
|
|
|
|
&::after {
|
|
position: relative;
|
|
z-index: 2;
|
|
flex: 1;
|
|
height: var(--hover-gallery-indicator-size);
|
|
content: '';
|
|
background: var(--hover-gallery-indicator-color);
|
|
opacity: var(--hover-gallery-indicator-inactive-opacity);
|
|
@include border-radius(var(--hover-gallery-indicator-size));
|
|
}
|
|
|
|
&:hover::after {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
&:not(:hover) .hover-gallery-item:first-child::after {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
// Without hover the same markup becomes a swipeable strip
|
|
@media (hover: none) {
|
|
.hover-gallery {
|
|
gap: 0;
|
|
padding: 0;
|
|
overflow-x: auto;
|
|
scroll-snap-type: x mandatory;
|
|
scrollbar-width: none;
|
|
}
|
|
|
|
.hover-gallery::after {
|
|
display: none;
|
|
}
|
|
|
|
.hover-gallery .hover-gallery-item {
|
|
flex: 0 0 100%;
|
|
padding: 0;
|
|
margin: 0;
|
|
scroll-snap-align: start;
|
|
|
|
img {
|
|
position: static;
|
|
opacity: 1;
|
|
}
|
|
|
|
&::after {
|
|
display: none;
|
|
}
|
|
}
|
|
}
|