Browse Source

fix: profile in responsive layout

restructure
Garrit Franke 4 years ago
parent
commit
495f8f4280
  1. 18
      components/Header.js
  2. 21
      components/Layout.js
  3. 12
      components/Profile.js

18
components/Header.js

@ -1,14 +1,30 @@
import { useLayoutEffect, useState } from "react";
import Link from "next/link";
import Profile from "./Profile";
function useWindowSize() {
const [size, setSize] = useState([0, 0]);
useLayoutEffect(() => {
function updateSize() {
setSize([window.innerWidth, window.innerHeight]);
}
window.addEventListener("resize", updateSize);
updateSize();
return () => window.removeEventListener("resize", updateSize);
}, []);
return size;
}
export default function Header(props) {
const [windowWidth, windowHeight] = useWindowSize();
return (
<header className="header">
<nav className="nav" role="navigation" aria-label="main navigation">
<Link href="/">
<h1>{props.siteTitle}</h1>
</Link>
<Profile></Profile>
{windowWidth >= 768 && <Profile></Profile>}
</nav>
<style jsx>
{`

21
components/Layout.js

@ -1,5 +1,21 @@
import { useState, useLayoutEffect } from "react";
import Header from "./Header";
import Meta from "./Meta";
import Profile from "./Profile";
function useWindowSize() {
const [size, setSize] = useState([0, 0]);
useLayoutEffect(() => {
function updateSize() {
setSize([window.innerWidth, window.innerHeight]);
}
window.addEventListener("resize", updateSize);
updateSize();
return () => window.removeEventListener("resize", updateSize);
}, []);
return size;
}
export default function Layout({
siteTitle,
@ -7,11 +23,14 @@ export default function Layout({
children,
pathname,
}) {
const [windowWidth, windowHeight] = useWindowSize();
return (
<section className={`layout ${pathname == "info" && "info_page"}`}>
<section className={`layout`}>
<Meta siteTitle={siteTitle} siteDescription={siteDescription} />
<Header siteTitle={siteTitle} />
<div className="content">{children}</div>
{windowWidth <= 768 && <Profile className="content"></Profile>}
<style jsx>
{`
.layout {

12
components/Profile.js

@ -1,8 +1,8 @@
import Link from "next/link";
export default function Header(props) {
export default function Profile(props) {
return (
<header className="header">
<div className="profile">
<img src="/me.jpg"></img>
<h2>Garrit Franke</h2>
<p>Random tips, tricks and thoughts about software</p>
@ -20,8 +20,14 @@ export default function Header(props) {
Link {
margin: 1rem;
}
@media (max-width: 767px) {
.profile {
margin: 20px;
}
}
`}
</style>
</header>
</div>
);
}

Loading…
Cancel
Save