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 Link from "next/link";
import Profile from "./Profile"; 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) { export default function Header(props) {
const [windowWidth, windowHeight] = useWindowSize();
return ( return (
<header className="header"> <header className="header">
<nav className="nav" role="navigation" aria-label="main navigation"> <nav className="nav" role="navigation" aria-label="main navigation">
<Link href="/"> <Link href="/">
<h1>{props.siteTitle}</h1> <h1>{props.siteTitle}</h1>
</Link> </Link>
<Profile></Profile> {windowWidth >= 768 && <Profile></Profile>}
</nav> </nav>
<style jsx> <style jsx>
{` {`

21
components/Layout.js

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

12
components/Profile.js

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

Loading…
Cancel
Save