feat: create drawer for responsive
This commit is contained in:
parent
831f1cc4d4
commit
7413338aba
42
src/components/Drawer/styles.ts
Normal file
42
src/components/Drawer/styles.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import styled, { keyframes } from "styled-components";
|
||||||
|
|
||||||
|
export const Drawer = styled.button`
|
||||||
|
all: unset;
|
||||||
|
color: white;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: color 0.3s;
|
||||||
|
display: none;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: ${props => props.theme.cream}
|
||||||
|
}
|
||||||
|
&::after {
|
||||||
|
content: "☰";
|
||||||
|
}
|
||||||
|
@media(max-width: 640px){
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
export const DrawerContainer = styled.div`
|
||||||
|
display: block;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 100vh;
|
||||||
|
border-radius: 8px;
|
||||||
|
width: 200px;
|
||||||
|
background-color: ${(props) => props.theme["gray-800"]};
|
||||||
|
animation-name: drawerAnimation;
|
||||||
|
`
|
||||||
|
|
||||||
|
export const DrawerItem = styled.a`
|
||||||
|
text-decoration: none;
|
||||||
|
padding: 1rem;
|
||||||
|
display: block;
|
||||||
|
color: white;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover {
|
||||||
|
color: ${props => props.theme.cream}
|
||||||
|
}
|
||||||
|
`
|
@ -3,13 +3,17 @@ import { HeaderContainer, NavLink, HomeLink, LanguageSelector } from "./styles";
|
|||||||
import { AvatarHeader } from "../Avatar/avatar";
|
import { AvatarHeader } from "../Avatar/avatar";
|
||||||
import i18n from "../../utils/i18n";
|
import i18n from "../../utils/i18n";
|
||||||
import { t } from "i18next";
|
import { t } from "i18next";
|
||||||
|
import { Drawer, DrawerContainer, DrawerItem } from "../Drawer/styles";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
export default function Header() {
|
export default function Header() {
|
||||||
const changeLanguage = (event: React.ChangeEvent<HTMLSelectElement>) => {
|
const changeLanguage = (event: React.ChangeEvent<HTMLSelectElement>) => {
|
||||||
i18n.changeLanguage(event.target.value);
|
i18n.changeLanguage(event.target.value);
|
||||||
localStorage.setItem("language", event.target.value);
|
localStorage.setItem("language", event.target.value);
|
||||||
};
|
};
|
||||||
|
const [openDrawer, setOpenDrawer] = useState(false);
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
<HashRouter>
|
<HashRouter>
|
||||||
<HeaderContainer>
|
<HeaderContainer>
|
||||||
<HomeLink href="/">
|
<HomeLink href="/">
|
||||||
@ -20,6 +24,7 @@ export default function Header() {
|
|||||||
<NavLink href="#about">{t("about")}</NavLink>
|
<NavLink href="#about">{t("about")}</NavLink>
|
||||||
<NavLink href="#contact">{t("contact")}</NavLink>
|
<NavLink href="#contact">{t("contact")}</NavLink>
|
||||||
<NavLink href="#projects">{t("projects")}</NavLink>
|
<NavLink href="#projects">{t("projects")}</NavLink>
|
||||||
|
<Drawer onClick={() => setOpenDrawer(!openDrawer)} />
|
||||||
<LanguageSelector onChange={changeLanguage}>
|
<LanguageSelector onChange={changeLanguage}>
|
||||||
<option value="pt-br">
|
<option value="pt-br">
|
||||||
Português
|
Português
|
||||||
@ -30,6 +35,15 @@ export default function Header() {
|
|||||||
</LanguageSelector>
|
</LanguageSelector>
|
||||||
</nav>
|
</nav>
|
||||||
</HeaderContainer>
|
</HeaderContainer>
|
||||||
|
{openDrawer &&
|
||||||
|
<DrawerContainer onClick={() => setOpenDrawer(false)}>
|
||||||
|
<DrawerItem>Giv's Website</DrawerItem>
|
||||||
|
<DrawerItem href="#about">{t("about")}</DrawerItem>
|
||||||
|
<DrawerItem href="#contact">{t("contact")}</DrawerItem>
|
||||||
|
<DrawerItem href="#projects">{t("projects")}</DrawerItem>
|
||||||
|
</DrawerContainer>
|
||||||
|
}
|
||||||
</HashRouter>
|
</HashRouter>
|
||||||
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
@ -23,6 +23,9 @@ export const NavLink = styled.a`
|
|||||||
&:hover {
|
&:hover {
|
||||||
color: ${props => props.theme["cream"]};
|
color: ${props => props.theme["cream"]};
|
||||||
}
|
}
|
||||||
|
@media(max-width: 640px){
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
export const HeaderContainer = styled.div`
|
export const HeaderContainer = styled.div`
|
||||||
|
Loading…
x
Reference in New Issue
Block a user