8.md
May 17, 2020 · View on GitHub
Recursos, Metadados e CSS
2 -
3 -
1 -
4 -
5 -
6 -
7 -
8 -
9
Layout de polimento
Até o momento, apenas adicionamos o mínimo de código React e CSS apenas para ilustrar conceitos como Módulos CSS. Antes de prosseguirmos para a próxima lição (busca de dados), vamos aprimorar o estilo e o código da página.
Baixe sua foto do perfil
Primeiro, usaremos a foto do seu perfil para o design final.
-
Faça o download da sua foto de perfil no GitHub, Twitter, LinkedIn ou em outro lugar (ou use este arquivo).
-
Crie um diretório
imagesdentro do diretóriopublic. -
Salve a imagem como
profile.jpgno diretóriopublic/images. -
O tamanho da imagem pode variar dentro de 400px por 400px.
-
Você pode remover o arquivo de logotipo SVG não utilizado diretamente no diretório public.
Atualize components/layout.module.css
Segundo, usaremos o seguinte para components/layout.module.css - basta copiar e colar. Ele adiciona alguns estilos mais refinados.
.container {
max-width: 36rem;
padding: 0 1rem;
margin: 3rem auto 6rem;
}
.header {
display: flex;
flex-direction: column;
align-items: center;
}
.headerImage {
width: 6rem;
height: 6rem;
}
.headerHomeImage {
width: 8rem;
height: 8rem;
}
.backToHome {
margin: 3rem 0 0;
}
Crie styles/utils.module.css
Terceiro, vamos criar um conjunto de classes CSS úteis para tipografia e outras que serão úteis em vários componentes.
Vamos adicioná-lo como um módulo CSS em styles/utils.module.css.
.heading2Xl {
font-size: 2.5rem;
line-height: 1.2;
font-weight: 800;
letter-spacing: -0.05rem;
margin: 1rem 0;
}
.headingXl {
font-size: 2rem;
line-height: 1.3;
font-weight: 800;
letter-spacing: -0.05rem;
margin: 1rem 0;
}
.headingLg {
font-size: 1.5rem;
line-height: 1.4;
margin: 1rem 0;
}
.headingMd {
font-size: 1.2rem;
line-height: 1.5;
}
.borderCircle {
border-radius: 9999px;
}
.colorInherit {
color: inherit;
}
.padding1px {
padding-top: 1px;
}
.list {
list-style: none;
padding: 0;
margin: 0;
}
.listItem {
margin: 0 0 1.25rem;
}
.lightText {
color: #999;
}
Atualize components/layout.js
Quarto, copie o código a seguir para components/layout.js e altere Your Name na parte superior para seu nome. Aqui está o que há de novo:
meta tags (como og: image)
Booleano home que ajustará o tamanho do título e da imagem
Link "Back to home" na parte inferior se a home for false
import Head from 'next/head'
import styles from './layout.module.css'
import utilStyles from '../styles/utils.module.css'
import Link from 'next/link'
const name = 'Your Name'
export const siteTitle = 'Next.js Sample Website'
export default function Layout({ children, home }) {
return (
<div className={styles.container}>
<Head>
<link rel="icon" href="/favicon.ico" />
<meta
name="description"
content="Learn how to build a personal website using Next.js"
/>
<meta
property="og:image"
content={`https://og-image.now.sh/${encodeURI(
siteTitle
)}.png?theme=light&md=0&fontSize=75px&images=https%3A%2F%2Fassets.vercel.com%2Fimage%2Fupload%2Ffront%2Fassets%2Fdesign%2Fnextjs-black-logo.svg`}
/>
<meta name="og:title" content={siteTitle} />
<meta name="twitter:card" content="summary_large_image" />
</Head>
<header className={styles.header}>
{home ? (
<>
<img
src="/images/profile.jpg"
className={`${styles.headerHomeImage} ${utilStyles.borderCircle}`}
alt={name}
/>
<h1 className={utilStyles.heading2Xl}>{name}</h1>
</>
) : (
<>
<Link href="/">
<a>
<img
src="/images/profile.jpg"
className={`${styles.headerImage} ${utilStyles.borderCircle}`}
alt={name}
/>
</a>
</Link>
<h2 className={utilStyles.headingLg}>
<Link href="/">
<a className={utilStyles.colorInherit}>{name}</a>
</Link>
</h2>
</>
)}
</header>
<main>{children}</main>
{!home && (
<div className={styles.backToHome}>
<Link href="/">
<a>← Back to home</a>
</Link>
</div>
)}
</div>
)
}
Atualize pages/index.js
Finalmente, vamos atualizar a página inicial.
Altere o pages/index.js da seguinte maneira:
import Head from 'next/head'
import Layout, { siteTitle } from '../components/layout'
import utilStyles from '../styles/utils.module.css'
export default function Home() {
return (
<Layout home>
<Head>
<title>{siteTitle}</title>
</Head>
<section className={utilStyles.headingMd}>
<p>[Your Self Introduction]</p>
<p>
(This is a sample website - you’ll be building a site like this on{' '}
<a href="https://nextjs.org/learn">our Next.js tutorial</a>.)
</p>
</section>
</Layout>
)
}
Em seguida, substitua [Your Self Introduction] pela sua introdução pessoal. Aqui está um exemplo com o perfil do autor:
É isso aí! Agora temos o código de layout aprimorado para passar para as lições de busca de dados.
Antes de concluirmos esta lição, vamos falar sobre algumas técnicas úteis relacionadas ao suporte ao CSS do Next.js. na próxima página.
