/* ██████ █████ ██ ██ ███████ ██████ ██ ██ ██████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ███ ███████ ██ ██ █████ ██████ ████ ██████ ██ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██ ██ ███████ ███████ ███████ ██ ██ ██ ██████ ██████ ██ ██ A pure css gallery, made with a bunch of wonderful hacks! Will be upgraded to be (slightly) less hacky once :target-within lands in browsers. Exported to codepen: https://codepen.io/sbrl/details/YzZJYxg */ :root { --gallerybox-bg: hsla(0, 0%, 95%, 0.75); } @media (prefers-color-scheme: dark) { :root { --gallerybox-bg: hsla(0, 0%, 30%, 0.75); } } @media (orientation: landscape) { .gallerybox-gallery { max-width: 95vw; } } .gallerybox { display: flex; justify-content: center; /* The element causes a small amount of extra padding at the bottom of the element, so we use this to balance out the look at the top ideally we'd shift the out of the way, but we can't without also shifting the inside */ padding-top: 0.2em; } .gallerybox-gallery { --gallerybox-nextprev-padding: 5vw; --gallerybox-nextprev-move: 0.2em; --gallerybox-nextprev-hover: 0.1em; max-width: 80vmax; display: grid; grid-template-columns: auto; grid-template-rows: auto; grid-template-areas: "main"; } /* .gallerybox picture { position: relative; top: -1em; } .gallerybox picture > img { position: relative; top: 1em; } */ .gallerybox-item { grid-area: main; z-index: 2; } .gallerybox-item > figcaption { background: var(--gallerybox-bg); position: absolute; bottom: 0.25em; left: 0; right: 0; padding: 0.75em 1em; text-align: center; } .gallerybox-gallery > .gallerybox-item:target { display: block; z-index: 100; } /* .gallerybox-gallery > .gallerybox-item:not(:target) { display: none; z-index: 2; } .gallerybox-item:not(:target) ~ .gallerybox-item:last-child { display: block; z-index: 2; } */ /* .gallerybox-gallery:target-within > .gallerybox-item:target { display: block; } .gallerybox-gallery:target-within > .gallerybox-item:not(:target) { display: none; } */ .gallerybox-item { position: relative; } .gallerybox-item img { max-width: 100%; } :where(.gallerybox-prev, .gallerybox-next) { display: flex; align-items: center; height: 100%; position: absolute; top: 0; vertical-align: middle; font-weight: bold; font-size: 4em; color: hsla(0, 0%, 100%, 0.8) !important; text-decoration: none; transform: none; transition: transform 0.25s; } .gallerybox-item > .gallerybox-prev { padding-left: var(--gallerybox-nextprev-padding); left: 0; } .gallerybox-item > .gallerybox-next { padding-right: var(--gallerybox-nextprev-padding); right: 0; } :where(.gallerybox-prev, .gallerybox-next):hover { color: hsla(0, 0%, 100%, 1) !important; } :is(.gallerybox-prev, .gallerybox-next):active { color: hsla(0, 0%, 100%, 1) !important; } .gallerybox-next:hover { transform: translateX(calc(var(--gallerybox-nextprev-hover) * -1)); } .gallerybox-prev:hover { transform: translateX(var(--gallerybox-nextprev-hover)); } .gallerybox-prev:active { transform: translateX(calc(var(--gallerybox-nextprev-move) * -1)); } .gallerybox-next:active { transform: translateX(var(--gallerybox-nextprev-move)); }