diff --git a/src/image-gallery/images/gallery-1.avif b/src/image-gallery/images/gallery-1.avif new file mode 100644 index 0000000..c6b0abe Binary files /dev/null and b/src/image-gallery/images/gallery-1.avif differ diff --git a/src/image-gallery/images/gallery-10.avif b/src/image-gallery/images/gallery-10.avif new file mode 100644 index 0000000..ffd694a Binary files /dev/null and b/src/image-gallery/images/gallery-10.avif differ diff --git a/src/image-gallery/images/gallery-11.avif b/src/image-gallery/images/gallery-11.avif new file mode 100644 index 0000000..82b3e4b Binary files /dev/null and b/src/image-gallery/images/gallery-11.avif differ diff --git a/src/image-gallery/images/gallery-12.avif b/src/image-gallery/images/gallery-12.avif new file mode 100644 index 0000000..440c81a Binary files /dev/null and b/src/image-gallery/images/gallery-12.avif differ diff --git a/src/image-gallery/images/gallery-13.avif b/src/image-gallery/images/gallery-13.avif new file mode 100644 index 0000000..9fec87f Binary files /dev/null and b/src/image-gallery/images/gallery-13.avif differ diff --git a/src/image-gallery/images/gallery-14.avif b/src/image-gallery/images/gallery-14.avif new file mode 100644 index 0000000..39f4177 Binary files /dev/null and b/src/image-gallery/images/gallery-14.avif differ diff --git a/src/image-gallery/images/gallery-15.avif b/src/image-gallery/images/gallery-15.avif new file mode 100644 index 0000000..163aaed Binary files /dev/null and b/src/image-gallery/images/gallery-15.avif differ diff --git a/src/image-gallery/images/gallery-16.avif b/src/image-gallery/images/gallery-16.avif new file mode 100644 index 0000000..bfacd0f Binary files /dev/null and b/src/image-gallery/images/gallery-16.avif differ diff --git a/src/image-gallery/images/gallery-17.avif b/src/image-gallery/images/gallery-17.avif new file mode 100644 index 0000000..f28b8e2 Binary files /dev/null and b/src/image-gallery/images/gallery-17.avif differ diff --git a/src/image-gallery/images/gallery-18.avif b/src/image-gallery/images/gallery-18.avif new file mode 100644 index 0000000..fedffc6 Binary files /dev/null and b/src/image-gallery/images/gallery-18.avif differ diff --git a/src/image-gallery/images/gallery-2.avif b/src/image-gallery/images/gallery-2.avif new file mode 100644 index 0000000..b62e4d9 Binary files /dev/null and b/src/image-gallery/images/gallery-2.avif differ diff --git a/src/image-gallery/images/gallery-3.avif b/src/image-gallery/images/gallery-3.avif new file mode 100644 index 0000000..6b9100b Binary files /dev/null and b/src/image-gallery/images/gallery-3.avif differ diff --git a/src/image-gallery/images/gallery-4.avif b/src/image-gallery/images/gallery-4.avif new file mode 100644 index 0000000..7e75541 Binary files /dev/null and b/src/image-gallery/images/gallery-4.avif differ diff --git a/src/image-gallery/images/gallery-5.avif b/src/image-gallery/images/gallery-5.avif new file mode 100644 index 0000000..8c583b6 Binary files /dev/null and b/src/image-gallery/images/gallery-5.avif differ diff --git a/src/image-gallery/images/gallery-6.avif b/src/image-gallery/images/gallery-6.avif new file mode 100644 index 0000000..2231110 Binary files /dev/null and b/src/image-gallery/images/gallery-6.avif differ diff --git a/src/image-gallery/images/gallery-7.avif b/src/image-gallery/images/gallery-7.avif new file mode 100644 index 0000000..2db3115 Binary files /dev/null and b/src/image-gallery/images/gallery-7.avif differ diff --git a/src/image-gallery/images/gallery-8.avif b/src/image-gallery/images/gallery-8.avif new file mode 100644 index 0000000..92a2be0 Binary files /dev/null and b/src/image-gallery/images/gallery-8.avif differ diff --git a/src/image-gallery/images/gallery-9.avif b/src/image-gallery/images/gallery-9.avif new file mode 100644 index 0000000..9f76ea7 Binary files /dev/null and b/src/image-gallery/images/gallery-9.avif differ diff --git a/src/image-gallery/index.html b/src/image-gallery/index.html new file mode 100644 index 0000000..bae10bc --- /dev/null +++ b/src/image-gallery/index.html @@ -0,0 +1,119 @@ + + + + + + Baseline Zoo + + + + + + +
+ + + + + +

+
+
+ + + + diff --git a/src/image-gallery/script.js b/src/image-gallery/script.js new file mode 100644 index 0000000..48849cf --- /dev/null +++ b/src/image-gallery/script.js @@ -0,0 +1,24 @@ +const dialogElem = document.getElementById("dialog"); +const dialogImageElem = document.getElementById("dialog-image"); +const dialogCreditElem = document.getElementById("dialog-credit"); +const showBtns = document.querySelectorAll(".show"); +const closeBtn = document.querySelector(".close"); + +[...showBtns].forEach((showBtn) => { + showBtn.addEventListener("click", (event) => { + const listItem = event.currentTarget.closest("li"); + + const creditHTML = listItem.querySelector(".credit").innerHTML; + dialogCreditElem.innerHTML = creditHTML; + + const imgSrc = listItem.querySelector("img").getAttribute("src"); + dialogImageElem.setAttribute("src", imgSrc); + dialogImageElem.addEventListener("load", () => { + dialogElem.showModal(); + }); + }); +}); + +closeBtn.addEventListener("click", () => { + dialogElem.close(); +}); diff --git a/src/image-gallery/style.css b/src/image-gallery/style.css new file mode 100644 index 0000000..8e4c813 --- /dev/null +++ b/src/image-gallery/style.css @@ -0,0 +1,196 @@ +.gallery { + display: grid; + gap: 0.2em; + grid-template-columns: repeat(auto-fit, minmax(16em, 1fr)); +} + +dialog { + --btn-bg-color: var(--color-base); + + background-color: transparent; + border: thin; + max-block-size: 80vh; + max-inline-size: 80vw; + opacity: var(--dialog-opacity, 0); + padding: 0; + scale: var(--dialog-scale, 0); + + @media (prefers-reduced-motion: reduce) { + --dialog-scale: 1; + } + + transition: display var(--fast) var(--ease) allow-discrete, + opacity var(--fast) var(--ease), + overlay var(--fast) var(--ease) allow-discrete, + scale var(--fast) var(--ease); + + &::backdrop { + background-color: var(--backdrop-bg, oklch(0.2 0.6 200 / 0.8)); + opacity: var(--dialog-opacity, 0); + transition: background-color var(--fast), display var(--fast) allow-discrete, + opacity var(--fast), overlay var(--fast) allow-discrete; + } + + &[open] { + --dialog-opacity: 1; + --dialog-scale: 1; + + display: grid; + grid-template: + 'dialog-close' auto + 'dialog-image' auto + 'dialog-credit' auto / 1fr; + } + + @starting-style { + &[open] { + --dialog-opacity: 0; + --dialog-scale: 0; + + @media (prefers-reduced-motion: reduce) { + --dialog-scale: 1; + } + } + + &[open]::backdrop { + --backdrop-bg: transparent; + --dialog-opacity: 0; + } + } + + #dialog-image { + grid-area: dialog-close / dialog-close / dialog-credit / dialog-credit; + } + + #dialog-credit { + backdrop-filter: blur(1em) brightness(60%); + color: white; + grid-area: dialog-credit; + margin: 0; + padding: 0.5em; + } +} + +[data-img] { + aspect-ratio: 1 / 1; + grid-area: image-start / image-start / caption-end / caption-end; + object-fit: cover; +} + +li { + display: grid; + grid-template: + "image" 1fr + "button" auto / 1fr; +} + +button { + --btn-filter: blur(1em); + + backdrop-filter: var(--btn-filter); + border-color: oklch(from var(--color-contrast) l c h / 0.5); + border-style: solid; + border-width: var(--border-size, 1px) 0 0 0; + text-shadow: 0.05rem 0.05rem 0.2rem var(--text-shadow-color, transparent); + transition: backdrop-filter var(--fast) var(--ease), + outline var(--fast) var(--ease), text-shadow var(--fast) var(--ease); + + @media (min-resolution: 2x) { + --border-size: 0.5px; + } + + &:hover, + &:focus { + --btn-filter: blur(0.75em) saturate(350%); + --text-shadow-color: oklch(from var(--color-base) 10% c h); + } +} + +.show { + grid-area: button; +} + +/* Presentational styles */ + +html { + --color-base: oklch(0.4 0.2 210); + --color-contrast: oklch( + from var(--color-base) calc(l + 0.6) calc(c - 0.15) h + ); + --fast: 0.35s; + --ease: cubic-bezier(0.5, 0.75, 0.75, 1.25); + + background-color: var(--color-base); + color: var(--color-contrast); + font-size: calc(0.75em + 1vw); + font-family: "Varta", sans-serif; + font-optical-sizing: auto; + font-weight: 300; + font-style: normal; +} + +body { + margin: 0; +} + +ul { + margin: 0; + padding: 0; +} + +li { + list-style-type: none; + margin: 0; +} + +:any-link { + color: var(--action-color, var(--color-contrast)); + text-decoration-color: inherit; + text-decoration-line: underline; + text-decoration-thickness: var(--link-underline-thickness, 1px); + text-underline-offset: 0.25em; + transition: + color var(--fast) var(--ease), + text-decoration-color var(--fast) var(--ease), + text-decoration-thickness var(--fast) var(--ease); + + &:is(:hover, :focus) { + --action-color: oklch(from var(--color-base) 90% c h); + --link-underline-thickness: 3px; + } +} + +img { + block-size: auto; + inline-size: 100%; + max-block-size: inherit; +} + +button { + appearance: none; + background-color: var(--btn-bg-color, transparent); + color: var(--action-color, var(--color-contrast)); + font-family: inherit; + font-size: inherit; + font-weight: inherit; + line-height: inherit; + margin: 0; + padding: var(--btn-padding, 0.5em); + outline: 2px var(--outline-color, transparent) solid; + outline-offset: -2px; + + span { + font-weight: 670; + } + + &:focus { + --outline-color: white; + } +} + +.close { + --btn-padding: 0.25em 0.5em; + + grid-area: dialog-close; + place-self: start end; +}