From 4e7ab8a432c7c291d8f28fb4b0aa41b886f62ebf Mon Sep 17 00:00:00 2001 From: Yohan Boujon Date: Mon, 7 Apr 2025 23:09:13 +0200 Subject: [PATCH] HoverCard: Added animations. Button: Persistent shadow when active. --- src/lib/components/hover-card.svelte | 87 +++++++++++++++++++++++++--- src/lib/css/base.css | 1 + src/lib/css/button.css | 4 +- src/lib/css/cover-img.css | 4 +- src/lib/css/hover-card.css | 38 +++++++++++- src/lib/json/hover-card.json | 3 + src/lib/json/hub.json | 12 +++- src/routes/+page.svelte | 6 +- 8 files changed, 137 insertions(+), 18 deletions(-) create mode 100644 src/lib/json/hover-card.json diff --git a/src/lib/components/hover-card.svelte b/src/lib/components/hover-card.svelte index 39177c8..fb1c3b5 100644 --- a/src/lib/components/hover-card.svelte +++ b/src/lib/components/hover-card.svelte @@ -1,21 +1,90 @@ -
+
{ + animateCard(true); + }} + on:mouseleave={() => { + animateCard(false); + }} +>
hover-card
-
-
- \ No newline at end of file +
diff --git a/src/lib/css/base.css b/src/lib/css/base.css index 5edf576..af9dd98 100644 --- a/src/lib/css/base.css +++ b/src/lib/css/base.css @@ -44,6 +44,7 @@ h2 { --background-dark: linear-gradient(180deg, rgba(248, 241, 241, 1) 0%, rgba(224, 217, 217, 1) 100%); --shadow: rgba(79, 50, 93, 0.25) 0px 30px 60px -12px, rgba(0, 0, 0, 0.3) 0px 18px 36px -18px; --shadow-hover: rgba(43, 33, 48, 0.5) 0px 22px 70px 4px; + --shadow-active: #2c1235a0 0px 20px 30px -10px; --z-index-last: -1; --z-index-normal: 0; --z-index-front: 1; diff --git a/src/lib/css/button.css b/src/lib/css/button.css index 8f25fba..7ce3d28 100755 --- a/src/lib/css/button.css +++ b/src/lib/css/button.css @@ -3,13 +3,13 @@ border: none; cursor: pointer; background-image: linear-gradient(to right, var(--navbar-dark) 0%, var(--navbar-light) 100%); - box-shadow: 0px 8px 18px -1px #33283760; padding: 0.2rem; transition: var(--transition); + box-shadow: var(--shadow); } .button:active { - box-shadow: 0px 4px 10px 0px #2c1235b0; + box-shadow: var(--shadow-active); transform: translateY(3px); } diff --git a/src/lib/css/cover-img.css b/src/lib/css/cover-img.css index c145fd1..cbcc486 100644 --- a/src/lib/css/cover-img.css +++ b/src/lib/css/cover-img.css @@ -15,7 +15,7 @@ background: linear-gradient(0deg, #00000000, #261C2C40 50%, #261c2c80 100%); height: calc(var(--navbar-height)*2); width: 100%; - z-index: 0; + z-index: var(--z-index-normal); } .cover-img-text { @@ -44,7 +44,7 @@ .cover-img-darken { grid-area: overlay; background-color: rgb(0, 0, 0, 0.35); - z-index: 0; + z-index: var(--z-index-normal); border-bottom-left-radius: 2rem; border-bottom-right-radius: 2rem; } diff --git a/src/lib/css/hover-card.css b/src/lib/css/hover-card.css index 6a589a6..3b3feb4 100644 --- a/src/lib/css/hover-card.css +++ b/src/lib/css/hover-card.css @@ -20,6 +20,11 @@ box-shadow: var(--shadow-hover); } +.hover-card-container:active { + transform: translateY(0.3rem) scale(100%); + box-shadow: var(--shadow-active); +} + .hover-card-container img { width: 100%; height: 100%; @@ -36,16 +41,45 @@ grid-area: overlay; width: 100%; height: 100%; - background-image: linear-gradient(0deg, #120e14 0%, #120e14dc 30%, #120e1491 35%, rgba(0,0,0,0) 45%); + background-image: linear-gradient(0deg, #120e14 0%, #120e14dc 30%, #120e1491 35%, rgba(0, 0, 0, 0) 45%); + opacity: 0; +} + +.hover-card-tip { + color: var(--color-background); + background-color: #120e14b0; + width: fit-content; + margin: 0.4rem; + padding: 0.4rem; + padding-right: 0.6rem; + padding-left: 0.6rem; + border-radius: 3rem; + box-shadow: var(--shadow); + opacity: 0; +} + +.hover-card-tip svg { + width: 1.4rem; + height: auto; +} + +.hover-card-tip span { + font-family: 'JetBrains Mono'; + font-weight: 400; + font-size: 0.8rem; + margin-left: 0.5rem; } .hover-card-metadata { width: 100%; height: 7rem; color: var(--color-background); + opacity: 0; } .hover-card-metadata h1 { + /* Animation */ + opacity: 0; font-family: 'JetBrains Mono'; font-weight: 800; font-size: 1.3rem; @@ -62,6 +96,8 @@ } .hover-card-metadata p { + /* Animation */ + opacity: 0; font-family: 'JetBrains Mono'; font-weight: 400; font-style: italic; diff --git a/src/lib/json/hover-card.json b/src/lib/json/hover-card.json new file mode 100644 index 0000000..ec4d600 --- /dev/null +++ b/src/lib/json/hover-card.json @@ -0,0 +1,3 @@ +{ + "seemore": "Voir plus" +} \ No newline at end of file diff --git a/src/lib/json/hub.json b/src/lib/json/hub.json index a8b2f1e..000ef15 100644 --- a/src/lib/json/hub.json +++ b/src/lib/json/hub.json @@ -50,13 +50,19 @@ }, "photos": [ { - "url": "https://share.etheryo.fr/rando/2024.07.28/IMG20240728150532.jpg" + "url": "https://share.etheryo.fr/rando/2024.07.28/IMG20240728150532.jpg", + "title": "Tarnished Peak (afterwar)", + "description": "Photo prise à Ben More, Écosse" }, { - "url": "https://share.etheryo.fr/rando/2024.07.28/IMG20240728142327.jpg" + "url": "https://share.etheryo.fr/rando/2024.07.28/IMG20240728142327.jpg", + "title": "Whitewashed", + "description": "Photo prise à Ben More, Écosse" }, { - "url": "https://share.etheryo.fr/rando/2023.11.01/Groupe%20Ombre%20Lac%20Montagne%20Rouge%20Bleu.jpg" + "url": "https://share.etheryo.fr/rando/2023.11.01/Groupe%20Ombre%20Lac%20Montagne%20Rouge%20Bleu.jpg", + "title": "Compagnons", + "description": "Photo prise au Lac d'Oô, France" } ] } \ No newline at end of file diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5d37c7c..ffa833d 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -70,7 +70,11 @@
{#each hubjson.photos as photo} - + {/each}