Я загрузил отличное руководство с компонентами gatsby и стилями. В этом руководстве используется подход, ориентированный на настольные ПК.
Я пытаюсь сначала перейти с настольных компьютеров на мобильные устройства, версия для настольных ПК работает так, как предполагалось, но мое преобразование в сначала мобильные устройства не работает .
Это файл Navbar.jsx, я считаю, что этот файл не нужно было изменять и импортирует фактический блок меню
import React, { useState } from 'react'
import styled from 'styled-components'
import RightNav from './RightNav'
const StyledBurger = styled.div`
width: 2rem;
height: 2rem;
position: fixed;
top: 15px;
right: 20px;
z-index: 20;
display: none;
@media (max-width: 768px) {
display: flex;
justify-content: space-around;
flex-flow: column nowrap;
}
div {
width: 2rem;
height: 0.25rem;
background-color: ${({ open }) => (open ? '#ccc' : '#333')};
border-radius: 10px;
transform-origin: 1px;
transition: all 0.3s linear;
&:nth-child(1) {
transform: ${({ open }) => (open ? 'rotate(45deg)' : 'rotate(0)')};
}
&:nth-child(2) {
transform: ${({ open }) => (open ? 'translateX(100%)' : 'translateX(0)')};
opacity: ${({ open }) => (open ? 0 : 1)};
}
&:nth-child(3) {
transform: ${({ open }) => (open ? 'rotate(-45deg)' : 'rotate(0)')};
}
}
`
const Burger = () => {
const [open, setOpen] = useState(false)
return (
<>
<StyledBurger open={open} onClick={() => setOpen(!open)}>
<div />
<div />
<div />
</StyledBurger>
<RightNav open={open} />
</>
)
}
export default Burger
Это моя попытка преобразовать его в mobile-first с минимальной шириной, исходный код находится в блоке комментариев:
import React, { useState } from 'react'
import styled from 'styled-components'
import RightNav from './RightNav'
const StyledBurger = styled.div`
/* width: 2rem;
height: 2rem;
position: fixed;
top: 15px;
right: 20px;
z-index: 20;
display: none;
@media (max-width: 768px) {
display: flex;
justify-content: space-around;
flex-flow: column nowrap;
} */
display: flex;
justify-content: space-around;
flex-flow: column nowrap;
@media (min-width: 350px) {
width: 2rem;
height: 2rem;
position: fixed;
top: 15px;
right: 20px;
z-index: 20;
display: none;
}
div {
width: 2rem;
height: 0.25rem;
background-color: ${({ open }) => (open ? '#ccc' : '#333')};
border-radius: 10px;
transform-origin: 1px;
transition: all 0.3s linear;
&:nth-child(1) {
transform: ${({ open }) => (open ? 'rotate(45deg)' : 'rotate(0)')};
}
&:nth-child(2) {
transform: ${({ open }) => (open ? 'translateX(100%)' : 'translateX(0)')};
opacity: ${({ open }) => (open ? 0 : 1)};
}
&:nth-child(3) {
transform: ${({ open }) => (open ? 'rotate(-45deg)' : 'rotate(0)')};
}
}
`
const Burger = () => {
const [open, setOpen] = useState(false)
return (
<>
<StyledBurger open={open} onClick={() => setOpen(!open)}>
<div />
<div />
<div />
</StyledBurger>
<RightNav open={open} />
</>
)
}
export default Burger
This it меню файла RightNav.jsx, импортированное в Burger.jsx
import React from 'react'
import styled from 'styled-components'
const Ul = styled.ul`
list-style: none;
display: flex;
flex-flow: row nowrap;
li {
padding: 18px 10px;
}
@media (max-width: 768px) {
flex-flow: column nowrap;
background-color: #0d2538;
position: fixed;
transform: ${({ open }) => (open ? 'translateX(0)' : 'translateX(100%)')};
top: 0;
right: 0;
height: 100vh;
width: 300px;
padding-top: 3.5rem;
transition: transform 0.3s ease-in-out;
li {
color: #fff;
}
}
`
const RightNav = ({ open }) => {
return (
<Ul open={open}>
<li>Home</li>
<li>About Us</li>
<li>Contact Us</li>
<li>Sign In</li>
<li>Sign Up</li>
</Ul>
)
}
export default RightNav
И это моя попытка в файле RightNav.jsx сделать его мобильным, исходный код находится в блоке комментариев:
import React from 'react'
import styled from 'styled-components'
const Ul = styled.ul`
/* list-style: none;
display: flex;
flex-flow: row nowrap;
li {
padding: 18px 10px;
}
@media (max-width: 768px) {
flex-flow: column nowrap;
background-color: #0d2538;
position: fixed;
transform: ${({ open }) => (open ? 'translateX(0)' : 'translateX(100%)')};
top: 0;
right: 0;
height: 100vh;
width: 300px;
padding-top: 3.5rem;
transition: transform 0.3s ease-in-out;
li {
color: #fff;
}
} */
display:flex;
list-style: none;
flex-flow: column nowrap;
background-color: #0d2538;
position: fixed;
transform: ${({ open }) => (open ? 'translateX(0)' : 'translateX(100%)')};
top: 0;
right: 0;
height: 100vh;
width: 300px;
padding-top: 3.5rem;
transition: transform 0.3s ease-in-out;
li {
color: #fff;
}
@media (min-width: 350px) {
flex-flow: row nowrap;
li {
padding: 18px 10px;
}
}
`
const RightNav = ({ open }) => {
return (
<Ul open={open}>
<li>Home</li>
<li>About Us</li>
<li>Contact Us</li>
<li>Sign In</li>
<li>Sign Up</li>
</Ul>
)
}
export default RightNav