aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-01-08 19:34:18 +0100
committerArmand Philippot <git@armandphilippot.com>2022-01-08 19:34:18 +0100
commitd738152a59d2ef8f476b16789ba386dc57ff2211 (patch)
tree5ed6e82114e50006ba2e3183d00dfbb0fffd746e /src
parent118f2225e991fad2872e1073eeccb8dbcdd5334d (diff)
refactor: improve button-like links styles
The goal was to replace the "read more articles about" links with button-like links to keep a certain consistence between buttons. The hasIcon variable was useless so I update some components and especially the back to top link.
Diffstat (limited to 'src')
-rw-r--r--src/components/Buttons/ButtonLink/ButtonLink.tsx5
-rw-r--r--src/components/Buttons/Buttons.module.scss5
-rw-r--r--src/components/Footer/Footer.module.scss9
-rw-r--r--src/components/PostFooter/PostFooter.module.scss40
-rw-r--r--src/components/PostFooter/PostFooter.tsx27
-rw-r--r--src/components/PostPreview/PostPreview.tsx6
6 files changed, 29 insertions, 63 deletions
diff --git a/src/components/Buttons/ButtonLink/ButtonLink.tsx b/src/components/Buttons/ButtonLink/ButtonLink.tsx
index 3e78440..4c94b34 100644
--- a/src/components/Buttons/ButtonLink/ButtonLink.tsx
+++ b/src/components/Buttons/ButtonLink/ButtonLink.tsx
@@ -8,17 +8,14 @@ const ButtonLink = ({
target,
position = 'left',
isExternal = false,
- hasIcon = false,
}: {
children: ReactNode;
target: string;
position?: ButtonPosition;
isExternal?: boolean;
- hasIcon?: boolean;
}) => {
const positionModifier = `link--${position}`;
- const iconModifier = hasIcon ? ` ${styles['link--icon']}` : '';
- const classes = `${styles.btn} ${styles.link} ${styles[positionModifier]}${iconModifier}`;
+ const classes = `${styles.btn} ${styles.link} ${styles[positionModifier]}`;
return isExternal ? (
<a className={classes} href={target}>
diff --git a/src/components/Buttons/Buttons.module.scss b/src/components/Buttons/Buttons.module.scss
index 08dc8b4..15065b2 100644
--- a/src/components/Buttons/Buttons.module.scss
+++ b/src/components/Buttons/Buttons.module.scss
@@ -117,8 +117,13 @@
}
.link {
+ display: flex;
+ flex-flow: row wrap;
+ place-items: center;
+ gap: var(--spacing-2xs);
width: max-content;
padding: var(--spacing-2xs) var(--spacing-sm);
+ position: relative;
background: var(--color-bg);
border: fun.convert-px(3) solid var(--color-primary);
border-radius: fun.convert-px(5);
diff --git a/src/components/Footer/Footer.module.scss b/src/components/Footer/Footer.module.scss
index 4daa52a..9376958 100644
--- a/src/components/Footer/Footer.module.scss
+++ b/src/components/Footer/Footer.module.scss
@@ -12,6 +12,7 @@
.back-to-top {
--button-size: #{fun.convert-px(55)};
+ --icon-size: #{fun.convert-px(32)};
position: fixed;
bottom: calc(var(--toolbar-size) + var(--spacing-md));
@@ -36,19 +37,19 @@
height: var(--button-size);
svg {
- width: 100%;
padding: var(--spacing-2xs);
}
:global {
.arrow-head {
- transform: translateY(12px) translateX(-5px) scale(1.5);
+ transform: translateY(#{fun.convert-px(18)});
transition: all 0.45s ease-in-out 0s;
}
.arrow-bar {
opacity: 0;
- transform: translateY(12px) translateX(5px) scale(0.5);
+ transform: translateY(#{fun.convert-px(18)})
+ translateX(#{fun.convert-px(5)}) scale(0.5);
transition: transform 0.45s ease-in-out 0s, opacity 0.7s ease-in-out 0s;
}
}
@@ -57,7 +58,7 @@
&:focus {
:global {
.arrow-head {
- transform: translateY(0) translateX(0) scale(1);
+ transform: translateY(0);
}
.arrow-bar {
diff --git a/src/components/PostFooter/PostFooter.module.scss b/src/components/PostFooter/PostFooter.module.scss
index a34269f..7c1f1ce 100644
--- a/src/components/PostFooter/PostFooter.module.scss
+++ b/src/components/PostFooter/PostFooter.module.scss
@@ -7,44 +7,12 @@
.list {
@extend %flex-list;
-}
-.item {
- &:not(:last-child) {
- margin-right: var(--spacing-2xs);
- }
+ gap: var(--spacing-xs);
}
-.link {
- display: flex;
- align-items: center;
- gap: var(--spacing-2xs);
- padding: fun.convert-px(3) var(--spacing-xs);
- position: relative;
- background: linear-gradient(
- to right,
- var(--color-primary) 50%,
- var(--color-bg) 50%
- )
- 100% 0 / 210% 100%;
- border: fun.convert-px(2) solid var(--color-primary);
- border-radius: fun.convert-px(5);
- box-shadow: fun.convert-px(1) fun.convert-px(1) fun.convert-px(2) 0
- var(--color-shadow-light);
- font-weight: 600;
- text-decoration: none;
- transition: all 0.5s ease-in-out 0s, color 0.5s ease-in-out 0s;
-
- &:hover,
- &:focus {
- background-position: 0 0;
- color: var(--color-fg-inverted);
- transition: all 0.4s ease-in-out 0s, color 0.3s ease-in-out 0.1s;
- }
-
- &:active {
- background-position: 100% 0;
- border-color: var(--color-primary-dark);
- color: var(--color-primary-dark);
+.item {
+ > a {
+ padding: calc(var(--spacing-2xs) / 2) var(--spacing-xs);
}
}
diff --git a/src/components/PostFooter/PostFooter.tsx b/src/components/PostFooter/PostFooter.tsx
index fe933d7..06e86bc 100644
--- a/src/components/PostFooter/PostFooter.tsx
+++ b/src/components/PostFooter/PostFooter.tsx
@@ -1,3 +1,4 @@
+import { ButtonLink } from '@components/Buttons';
import { t } from '@lingui/macro';
import { SubjectPreview } from '@ts/types/taxonomies';
import Image from 'next/image';
@@ -9,20 +10,18 @@ const PostFooter = ({ subjects }: { subjects: SubjectPreview[] }) => {
return subjects.map((subject) => {
return (
<li className={styles.item} key={subject.id}>
- <Link href={`/sujet/${subject.slug}`}>
- <a className={styles.link}>
- {subject.featuredImage && (
- <Image
- src={subject.featuredImage.sourceUrl}
- alt={subject.featuredImage.altText}
- layout="intrinsic"
- width="20"
- height="20"
- />
- )}
- {subject.title}
- </a>
- </Link>
+ <ButtonLink target={`/sujet/${subject.slug}`}>
+ {subject.featuredImage && (
+ <Image
+ src={subject.featuredImage.sourceUrl}
+ alt={subject.featuredImage.altText}
+ layout="intrinsic"
+ width="20"
+ height="20"
+ />
+ )}
+ {subject.title}
+ </ButtonLink>
</li>
);
});
diff --git a/src/components/PostPreview/PostPreview.tsx b/src/components/PostPreview/PostPreview.tsx
index 9cb7752..d89ddb5 100644
--- a/src/components/PostPreview/PostPreview.tsx
+++ b/src/components/PostPreview/PostPreview.tsx
@@ -48,11 +48,7 @@ const PostPreview = ({
dangerouslySetInnerHTML={{ __html: post.intro }}
></div>
<footer className={styles.footer}>
- <ButtonLink
- target={`/article/${post.slug}`}
- position="left"
- hasIcon={true}
- >
+ <ButtonLink target={`/article/${post.slug}`} position="left">
{t`Read more`}
<span className="screen-reader-text">
{' '}