8.md

May 17, 2020 · View on GitHub

← Pagina Inicial

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 images dentro do diretório public.

  • Salve a imagem como profile.jpg no diretório public/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.

next-arrow next-arrow

← Pagina Inicial