diff options
| author | Armand Philippot <git@armandphilippot.com> | 2022-01-14 12:55:05 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2022-01-14 12:55:05 +0100 |
| commit | d47b859b218679cc99fa95e64b2308c378dc93fe (patch) | |
| tree | dae66ffd430aa638a68f807e67be90bf43cdc138 /src/components/Branding | |
| parent | 1ae70dc065785be7ee612db1d2d97bfd6b2daa07 (diff) | |
chore: improve Branding component
Diffstat (limited to 'src/components/Branding')
| -rw-r--r-- | src/components/Branding/Branding.module.scss | 94 | ||||
| -rw-r--r-- | src/components/Branding/Branding.tsx | 24 |
2 files changed, 96 insertions, 22 deletions
diff --git a/src/components/Branding/Branding.module.scss b/src/components/Branding/Branding.module.scss index ca1ba17..9babe6f 100644 --- a/src/components/Branding/Branding.module.scss +++ b/src/components/Branding/Branding.module.scss @@ -2,13 +2,15 @@ @use "@styles/abstracts/mixins" as mix; .wrapper { + --logo-size: clamp(#{fun.convert-px(68)}, 18vw, #{fun.convert-px(100)}); + display: grid; grid-template-columns: - clamp(#{fun.convert-px(55)}, 15vw, #{fun.convert-px(90)}) + var(--logo-size) minmax(0, 1fr); grid-template-rows: repeat(2, max-content); align-items: center; - column-gap: var(--spacing-md); + column-gap: var(--spacing-sm); padding: var(--spacing-sm) 0; text-shadow: fun.convert-px(2) fun.convert-px(2) 0 var(--color-fg-inverted); } @@ -16,15 +18,62 @@ .logo { grid-column: 1; grid-row: 1 / -1; + justify-self: center; display: flex; place-content: center; - border: fun.convert-px(1) solid var(--color-border); + width: var(--logo-size); + height: var(--logo-size); + position: relative; border-radius: 50%; - box-shadow: 0 0 0 fun.convert-px(4) var(--color-bg), - 0 0 fun.convert-px(3) fun.convert-px(5) var(--color-shadow); + transition: all 0.6s linear 0s; + transform-style: preserve-3d; - img { + &__front, + &__back { + width: 100%; + height: 100%; + padding: clamp(fun.convert-px(2), 0.8vw, fun.convert-px(5)); + position: absolute; + top: 0; + left: 0; + backface-visibility: hidden; + background: var(--color-bg); + border: fun.convert-px(1) solid var(--color-primary-dark); border-radius: 50%; + transition: all 0.6s linear 0s; + } + + &__front { + box-shadow: fun.convert-px(1) fun.convert-px(2) fun.convert-px(1) 0 + var(--color-shadow-light), + fun.convert-px(2) fun.convert-px(3) fun.convert-px(3) 0 + var(--color-shadow-lighter); + } + + &__back { + transform: rotateY(180deg); + } + + img, + svg { + border-radius: 50%; + } + + &:hover { + transform: rotateY(180deg); + } + + &:hover & { + &__front { + box-shadow: none; + } + + &__back { + box-shadow: fun.convert-px(1) fun.convert-px(2) fun.convert-px(1) 0 + var(--color-shadow-light), + fun.convert-px(2) fun.convert-px(3) fun.convert-px(3) 0 + var(--color-shadow-lighter); + } } } @@ -33,14 +82,8 @@ grid-row: 1; margin: 0; font-family: var(--font-family-secondary); - font-size: var(--font-size-xl); + font-size: clamp(var(--font-size-xl), 6vw, var(--font-size-2xl)); font-weight: 500; - - @include mix.media("screen") { - @include mix.dimensions("xs") { - font-size: var(--font-size-2xl); - } - } } .job { @@ -50,3 +93,28 @@ font-family: var(--font-family-secondary); font-size: var(--font-size-lg); } + +.link { + background: linear-gradient( + to top, + var(--color-primary-light) fun.convert-px(5), + transparent fun.convert-px(5) + ) + left / 0 100% no-repeat; + text-decoration: none; + transition: all 0.6s ease-out 0s; + + &:hover, + &:focus { + background-size: 100% 100%; + } + + &:focus { + color: var(--color-primary-light); + } + + &:active { + background-size: 0 100%; + color: var(--color-primary-dark); + } +} diff --git a/src/components/Branding/Branding.tsx b/src/components/Branding/Branding.tsx index d1f1ad7..e14ffdf 100644 --- a/src/components/Branding/Branding.tsx +++ b/src/components/Branding/Branding.tsx @@ -3,6 +3,7 @@ import Link from 'next/link'; import { ReactElement } from 'react'; import { t } from '@lingui/macro'; import photo from '@assets/images/armand-philippot.jpg'; +import Logo from '@assets/images/armand-philippot-logo.svg'; import { config } from '@config/website'; import styles from './Branding.module.scss'; @@ -14,18 +15,23 @@ const Branding: BrandingReturn = ({ isHome = false }) => { return ( <div className={styles.wrapper}> <div className={styles.logo}> - <Image - src={photo} - alt={t({ - message: `${config.name} picture`, - comment: 'Branding logo.', - })} - layout="intrinsic" - /> + <div className={styles.logo__front}> + <Image + src={photo} + alt={t({ + message: `${config.name} picture`, + comment: 'Branding logo.', + })} + layout="intrinsic" + /> + </div> + <div className={styles.logo__back}> + <Logo /> + </div> </div> <TitleTag className={styles.name}> <Link href="/"> - <a>{config.name}</a> + <a className={styles.link}>{config.name}</a> </Link> </TitleTag> <p className={styles.job}>{config.baseline}</p> |
