summaryrefslogtreecommitdiffstats
path: root/src/components/Icons
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2021-12-13 22:04:03 +0100
committerArmand Philippot <git@armandphilippot.com>2021-12-13 22:04:26 +0100
commitaec575c3b5797069e4964cfafa26e3de3b92f99e (patch)
treeca58b4e85b4f0d3eb78b57cfa58aa9bad9fd4c2f /src/components/Icons
parent5bc55ac0a801cbe82c41a10f7e680612be4deaf8 (diff)
chore: add main-nav component
I choose to implement main-nav paths manually instead of fetching them from GraphQL to ensure functional navigation without JS.
Diffstat (limited to 'src/components/Icons')
-rw-r--r--src/components/Icons/Hamburger/Hamburger.module.scss54
-rw-r--r--src/components/Icons/Hamburger/Hamburger.tsx13
-rw-r--r--src/components/Icons/index.tsx3
3 files changed, 70 insertions, 0 deletions
diff --git a/src/components/Icons/Hamburger/Hamburger.module.scss b/src/components/Icons/Hamburger/Hamburger.module.scss
new file mode 100644
index 0000000..1ae01bb
--- /dev/null
+++ b/src/components/Icons/Hamburger/Hamburger.module.scss
@@ -0,0 +1,54 @@
+@use "@styles/abstracts/functions" as fun;
+
+.icon {
+ position: relative;
+
+ &,
+ &::before,
+ &::after {
+ background: var(--color-primary);
+ background-image: linear-gradient(
+ to right,
+ var(--color-primary-light) 0%,
+ var(--color-highlight) 100%
+ );
+ border: fun.convert-px(1) solid var(--color-border);
+ border-radius: fun.convert-px(3);
+ display: block;
+ width: var(--btn-size, fun.convert-px(50));
+ height: fun.convert-px(6);
+ margin: auto;
+ transition: all 0.25s ease-in-out 0s, transform 0.4s ease-in 0s;
+ }
+
+ &::before,
+ &::after {
+ content: "";
+ position: absolute;
+ }
+
+ &::before {
+ bottom: fun.convert-px(15);
+ }
+
+ &::after {
+ top: fun.convert-px(15);
+ }
+
+ &--active {
+ background: transparent;
+ border: transparent;
+
+ &::before {
+ transform-origin: 50% 50%;
+ transform: rotate(45deg);
+ bottom: 0;
+ }
+
+ &::after {
+ transform-origin: 50% 50%;
+ transform: rotate(-45deg);
+ top: 0;
+ }
+ }
+}
diff --git a/src/components/Icons/Hamburger/Hamburger.tsx b/src/components/Icons/Hamburger/Hamburger.tsx
new file mode 100644
index 0000000..3b9e609
--- /dev/null
+++ b/src/components/Icons/Hamburger/Hamburger.tsx
@@ -0,0 +1,13 @@
+import styles from './Hamburger.module.scss';
+
+const HamburgerIcon = ({ isActive }: { isActive: boolean }) => {
+ return (
+ <span
+ className={`${styles.icon}${
+ isActive ? ` ${styles['icon--active']}` : ''
+ }`}
+ ></span>
+ );
+};
+
+export default HamburgerIcon;
diff --git a/src/components/Icons/index.tsx b/src/components/Icons/index.tsx
new file mode 100644
index 0000000..da4e029
--- /dev/null
+++ b/src/components/Icons/index.tsx
@@ -0,0 +1,3 @@
+import HamburgerIcon from './Hamburger/Hamburger';
+
+export { HamburgerIcon };
n class="nt">as mix; @use "@styles/abstracts/placeholders"; .article { @extend %grid; grid-auto-flow: column dense; align-items: baseline; &--no-comments { padding-bottom: var(--spacing-lg); } } .breadcrumb { @extend %grid; grid-column: 1 / -1; padding: var(--spacing-md) 0; > * { grid-column: 2; } &__items { font-size: var(--font-size-sm); } } .header { grid-column: 1 / -1; margin-bottom: var(--spacing-md); } .body { grid-column: 2; > * + * { margin-top: var(--spacing-sm); margin-bottom: var(--spacing-sm); } } .sidebar { grid-column: 2; &--first { margin-bottom: var(--spacing-xs); @include mix.media("screen") { @include mix.dimensions("lg") { grid-column: 1; align-self: stretch; margin: 0 var(--spacing-xs) var(--spacing-md); } } } &--last { margin: var(--spacing-lg) 0 0; @include mix.media("screen") { @include mix.dimensions("md") { grid-column: 3; align-self: stretch; margin: 0 var(--spacing-xs) var(--spacing-md); } } } } .footer { grid-column: 2; } .comments { @extend %grid; grid-column: 1 / -1; margin: var(--spacing-lg) 0 0; padding: 0 0 var(--spacing-lg); background: var(--color-bg-secondary); border-top: fun.convert-px(3) solid var(--color-border-light); &__section { grid-column: 2; margin: var(--spacing-md) 0 0; } }