src/12-css-basics.md (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 |
---
title: 'Básico de CSS'
summary: 'Aprenda a criar uma página limpa e bem desenhada do zero, escrevendo o seu próprio CSS.'
permalink: 'basico-de-css/'
originalPath: /css-basics/
tags: chapter
layout: 'chapter.njk'
---
# Básico de CSS
Neste capítulo, não vamos usar o nosso site com Simple.css. Vamos escrever os nossos próprios estilos, e para isso eu quero usar uma página mais simples. Você pode aplicar o que aprender aqui ao seu site Simple. Mas, neste capítulo, eu quero mostrar como começar do zero para fazer uma página bonita.
Vamos olhar especificamente o estilo de elementos tipográficos, para fazer uma página agradável de ler. Mas o CSS pode fazer muito, muito mais. Todos os designs sofisticados que você está acostumado a ver em páginas pela web são feitos com CSS. É uma ferramenta potente. Se este capítulo te der gosto pelo assunto, eu te animo a explorar o CSS além do que cobrimos aqui.
## Apresentando os planetas do sistema solar
Eu montei esta página HTML bem direta, que usa alguns elementos tipográficos e é um bom ponto de partida para aplicar estilos. Você pode usar o conteúdo que quiser, se tiver algo em mente. Mas também pode usar a mesma página HTML que eu vou usar.
Você pode ver o código-fonte no navegador, com o [comando de ver o código-fonte](https://perma.cc/3WP3-R9XL), ou conferindo o [código no GitHub](https://github.com/blakewatson/css-basics). E você pode [ver o resultado final aqui](https://planets.htmlforpeople.com/), se quiser uma espiada do que vai ficar.
Esta página apresenta os planetas do sistema solar e dá um pouco de informação sobre cada um. É super simples e básica de propósito. É um texto de preenchimento que eu não pretendo que ninguém leia a sério (mas as informações estão corretas, até onde eu sei).
## Ponto de partida
Eu fiz um `index.html` e coloquei o código a seguir. Ele assume que você tem um `styles.css` no mesmo diretório. Também assume que você tem uma imagem, `PIA06193~large.jpg`, no mesmo diretório. Você pode pegar esta imagem no [site da NASA](https://perma.cc/76GH-PWHQ).
<details>
<summary>Abra para ver o código HTML completo</summary>
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Planets of the Solar System</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<main>
<h1>Planets of the Solar System</h1>
<p class="intro"><span class="caps">Our solar system</span> is a vast and fascinating place, consisting of the Sun and the various celestial bodies that orbit it, including eight major planets. Each planet offers unique characteristics and features. In this article, we will explore the distinctive attributes of each planet, providing an overview of what makes them unique (and learn a little <abbr title="Cascading style sheets">CSS</abbr> while doing it).</p>
<h2>Mercury</h2>
<p>
Mercury is the closest planet to the Sun and the smallest planet in our
solar system. It has a very thin atmosphere and its surface is covered
with craters.
</p>
<h2>Venus</h2>
<p>
Venus is the second planet from the Sun and is known for its thick,
toxic atmosphere and extreme surface temperatures. It's often called
Earth's "sister planet" because of their similar size and composition.
</p>
<h2>Earth</h2>
<p>
Earth is the third planet from the Sun and the only known planet to
support life. It has a diverse climate and surface, with large bodies of
water, mountains, and forests.
</p>
<blockquote>
<p>
The Earth is a very small stage in a vast cosmic arena. Think of the
rivers of blood spilled by all those generals and emperors so that in
glory and triumph they could become the momentary masters of a
fraction of a dot.
</p>
<cite>— Carl Sagan</cite>
</blockquote>
<h2>Mars</h2>
<p>
Mars, the fourth planet from the Sun, is often called the "Red Planet"
due to its reddish appearance. It has the largest volcano and canyon in
the solar system.
</p>
<h2>Jupiter</h2>
<p>
Jupiter is the fifth planet from the Sun and the largest in the solar
system. It has a Great Red Spot, which is a giant storm, and dozens of
moons.
</p>
<h2>Saturn</h2>
<p>
Saturn, the sixth planet from the Sun, is famous for its extensive ring
system. It's the second-largest planet in the solar system.
</p>
<figure>
<img src="PIA06193~large.jpg" alt="This grand mosaic consists of 126 images acquired in a tile-like fashion, covering one end of Saturn's rings to the other and the entire planet in between.">
<figcaption>
Source: <a href="https://images.nasa.gov/details/PIA11141">https://images.nasa.gov/details/PIA11141</a>
</figcaption>
</figure>
<h2>Uranus</h2>
<p>
Uranus is the seventh planet from the Sun and has a unique blue-green
color due to methane in its atmosphere. It rotates on its side, making
it unique among the planets.
</p>
<h2>Neptune</h2>
<p>
Neptune is the eighth and farthest known planet from the Sun in our
solar system. It's known for its deep blue color and strong winds, some
of the fastest in the solar system.
</p>
<h2>Additional Resources</h2>
<p>
For more information about the planets, visit the
<a href="https://solarsystem.nasa.gov/planets/overview/"
>NASA Solar System Exploration</a
>
website.
</p>
<h2>Other Major Bodies</h2>
<ul>
<li>Pluto</li>
<li>Ceres</li>
<li>Haumea</li>
<li>Makemake</li>
<li>Eris</li>
<li>Ganymede</li>
<li>Titan</li>
<li>Europa</li>
</ul>
<h2>Sample Code</h2>
<pre><code>function getPlanetInfo(planet) {
const planets = {
Mercury: 'The smallest planet and closest to the Sun.',
Venus: 'Known for its thick, toxic atmosphere.',
Earth: 'The only planet known to support life.',
Mars: 'The Red Planet with the largest volcano.',
Jupiter: 'The largest planet with a Great Red Spot.',
Saturn: 'Famous for its ring system.',
Uranus: 'Unique for its sideways rotation.',
Neptune: 'Known for its deep blue color and strong winds.'
};
return planets[planet] || 'Planet not found';
}</code></pre>
</main>
<footer>
<p>
A demo website for learning CSS. Part of <a href="https://htmlforpeople.com/">HTML for People</a> by <a href="https://blakewatson.com/">Blake Watson</a>. Check out the <a href="https://github.com/blakewatson/css-basics">source code on GitHub</a>.
</p>
</body>
</html>
```
</details>
Como o arquivo `styles.css` está vazio, só temos os estilos padrão do navegador. É assim que fica:

O bom e velho Times New Roman e linhas de texto que ocupam a largura inteira da janela do navegador. Não fica grande coisa, mas tem algo gostoso e simples nisso. E, o mais importante, não está quebrado. Muitos sites vão longe demais, com designs exagerados, megabytes de imagens e JavaScript, e comportamentos hostis a quem visita (sabe, tipo: “eu vi que você só leu duas frases deste artigo, mas eu sei que você está morrendo de vontade de assinar a minha newsletter, então deixa eu te mostrar este pop-up gigante”).
Então vamos nos imaginar um tipo de médicos da web. Primeiro, não vamos fazer mal. Vamos melhorar a leitura da página e deixá-la bonita (bem, o que _eu_ acho bonito, de qualquer forma — sinta-se à vontade para divergir e adicionar os seus próprios estilos conforme formos). Mas vamos evitar qualquer coisa tão drástica que deixe a página mais difícil de ler do que está agora.
## A tag style
Podemos escrever CSS direto no arquivo `index.html` usando uma tag HTML especial, `<style>`. Podemos colocar a tag `<style>` dentro da seção `<head>` do arquivo. Assim:
```html
<!DOCTYPE html>
<html>
<head>
<title>My website</title>
<meta charset="utf-8">
<style>
CSS code goes here
</style>
</head>
<body>
...
</body>
</html>
```
Isso é perfeitamente válido. Mas, se você tiver mais de uma página no site, teria de copiar e colar a tag `<style>` em cada página para ter os mesmos estilos em todas. Em vez disso, é comum colocar todo o CSS num arquivo separado e então _ligar_ esse arquivo a cada página com uma tag `<link>` na seção `<head>` do site.
```html
<link rel="stylesheet" href="styles.css">
```
## Primeiros passos para melhorar a página
Se você ainda não fez, crie um arquivo `style.css`. É aqui que vamos escrever todo o nosso CSS personalizado. Se você não estiver usando o meu HTML de partida, vai precisar adicionar a tag `<link>` na seção `<head>` da página para ligar os estilos à página, como descrito acima.
Dá para conquistar ganhos grandes logo de cara, com só algumas linhas de CSS. Por exemplo, um problema é que a página fica larga demais numa janela de navegador no desktop. Linhas longas de texto são difíceis de ler. Vamos corrigir isso dando à página uma largura máxima. Segundo o [Butterick's Practical Typography](https://practicaltypography.com/line-length.html), devemos caber entre dois e três alfabetos numa linha. Eu vou deixar com 65 _caracteres_ de largura.
```css
main {
max-width: 65ch;
}
```
Esta _regra_ CSS mira o elemento `<main>` da nossa página e instrui ele a nunca passar da largura que declaramos.
{% aside 'Observação' %}
Beleza, [não é estritamente 65 caracteres de largura](https://perma.cc/66QM-Q2AF). A unidade `ch` no CSS se baseia na largura do caractere `0` (zero) na fonte dada. Então, na verdade, estamos dizendo: “não deixe a largura da página passar de 65 caracteres `0`”.
{% endaside %}
Ignorando a imagem gigante de Saturno — com a qual vamos lidar daqui a pouco — já ficou bem melhor. Mas o gosto moderno prefere uma página centralizada, então vamos fazer isso enquanto estamos nisso.
```css
main {
margin-inline: auto;
max-width: 65ch;
}
```
Em idiomas da esquerda para a direita, como o português, `margin-inline` é a margem horizontal, ou esquerda e direita. Ao definir como `auto`, estamos dizendo: “não me importa quão larga seja a margem esquerda e a direita, só deixe iguais”. O navegador sabe quão larga queremos a página, então calcula a margem necessária para deixar igual dos dois lados, centralizando a página.
Também temos um elemento `<footer>` que vive fora do elemento `<main>`, então vamos estilizá-lo à parte, com a mesma largura e margem.
```css
footer {
margin-inline: auto;
max-width: 65ch;
}
```
E, para fechar esta linha de raciocínio, vamos impedir que a imagem de Saturno estoure para fora da página.
```css
img {
max-width: 100%;
}
```
O `max-width` pode ser declarado como uma porcentagem do elemento que contém. Definir como 100% significa: “não deixe elementos de imagem ficarem mais largos do que os seus contêineres”.
E agora a nossa página está bem mais agradável.

## Anatomia de uma regra CSS
Olhe uma das nossas regras até agora. Esta regra limita a largura das imagens à largura dos seus contêineres.
```css
img {
max-width: 100%;
}
```
O que acontece aqui é uma coisa em duas partes. Primeiro, especificamos quais elementos da página queremos afetar. Essa é a parte antes das chaves (`{}`). Chama-se _seletor_, porque _seleciona_ elementos da página para mudar.
A parte dentro das chaves é onde colocamos as propriedades que queremos mudar. Cada declaração consiste numa _propriedade_ e num _valor_. Neste caso, há uma declaração. A propriedade é `max-width`, e o valor é `100%`.
## Tamanho do texto, altura da linha e espaço entre elementos
O tamanho padrão da fonte é um pouco pequeno. Vou mirar o elemento `html` (ou seja, o documento inteiro) e definir `font-size` e `line-height`.
```css
html {
font-size: 20px;
line-height: 1.45;
}
```
Uma das unidades que podemos usar para dimensionar coisas é a unidade de pixel, `px`. Estou descobrindo agora que `1px` equivale a 1/96 de uma polegada (embora isso varie com a densidade de pixels da tela). Hein. A gente nunca para de aprender.
Há todo tipo de jeito de definir o tamanho do texto. Vamos ver mais alguns daqui a pouco.
Vou definir o `line-height` usando um valor sem unidade de `1.45`. É um número que fica bonito. Consulte o [Butterick's Practical Typography](https://practicaltypography.com/line-spacing.html) e o seu próprio olho para achar uma boa altura de linha para a sua fonte específica. Estou usando um número sem unidade em vez de algo como `px` por causa de [como os elementos filhos herdam o valor](https://perma.cc/7YVZ-53XL), mas você não precisa se preocupar demais com isso agora.
Seguindo, eu gostaria de garantir que os elementos tenham espaçamento igual entre eles. Vou mirar tudo o que está dentro do elemento `<main>` usando um seletor universal, o asterisco (`*`).
```css
main * {
margin-block-start: 0;
margin-block-end: 1rem;
/* or we could use the shortcut syntax like this */
margin-block: 0 1rem;
}
```
Um seletor pode ser uma cadeia de coisas. Por exemplo, `main p` seleciona todo elemento `<p>` _dentro_ do elemento `<main>`. Mas eu quero mirar _tudo_ no elemento `<main>`, então uso o asterisco.
Estou definindo a margem acima e abaixo de cada elemento. De forma parecida com `margin-inline`, que controla o espaço horizontal ao redor dos elementos, `margin-block` controla o espaço vertical ao redor dos elementos (em idiomas da esquerda para a direita). Estou definindo a margem acima dos elementos como `0` e a margem abaixo deles como `1rem`. O `rem` é uma unidade igual ao tamanho da fonte do **r**oot el**em**ent (o elemento `<html>`). Como eu defini o tamanho da fonte raiz como `20px`, é isso que o valor de `1rem` se torna.
O legal da unidade `rem` é que, ao nos deixar basear valores no tamanho da fonte do documento, ela deixa os designs com uma sensação mais coesa.
O nosso texto está bonito.

Nada contra o Times New Roman, mas ele tem uma cara muito… _padrão_. Dá para fazer melhor.
## Instalar webfonts
Você só pode usar uma fonte se quem visita tiver ela disponível no aparelho. Embora existam algumas [fontes de sistema comuns](https://practicaltypography.com/system-fonts.html) e [fontes padrão comuns](https://perma.cc/9BMG-EMTU), temos outra opção para personalizar a fonte. _Fontes da web_ (_web fonts_) são aquelas disponibilizadas ao serem baixadas junto com o resto do seu site. Além do documento, dos arquivos CSS, dos arquivos JavaScript, das imagens e por aí vai, fontes personalizadas também podem ser baixadas.
Fontes da web precisam estar num formato específico, e ser _instaladas_ de um certo jeito, por falta de termo melhor. Em geral, as pessoas usam um serviço como [Google Fonts](http://fonts.google.com/) (grátis) ou [Adobe Fonts](https://fonts.adobe.com) (pago). Há [várias](https://typography.com/webfonts) [opções](https://typenetwork.com/), inclusive hospedar as fontes no seu próprio servidor, ao lado dos outros arquivos do site. Só garanta que a licença da fonte cubra isso.
Para simplificar, vamos usar algumas fontes do Google Fonts. Vá até fonts.google.com. Busque “Oswald” e selecione nos resultados. Depois clique em _Get Font_.

Depois de selecioná-la, não baixe nada ainda. Busque “source sans”. Source Sans 3 é a versão disponível no momento em que eu escrevo. Selecione e clique em _Get Font_.
Quando as duas fontes estiverem selecionadas, clique em _Get embed code_. Estamos procurando o bloco rotulado _Embed code in the `<head>` of your html_.

Copie e cole o código de incorporação na seção `<head>` do seu site.
```html
<head>
<meta charset="UTF-8">
<title>Planets of the Solar System</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Oswald:wght@200..700&family=Source+Sans+3:ital,wght@0,200..900;1,200..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="styles.css">
</head>
```
Adicione uma declaração `font-family` ao bloco `html` para conferir se está funcionando.
```css
html {
font-family: 'Source Sans 3', sans-serif;
font-size: 20px;
line-height: 1.45;
}
```
Isso vai definir a fonte para o documento inteiro. O navegador primeiro tenta Source Sans 3. Se, por algum motivo, essa fonte não estiver disponível (se, por exemplo, o Google Fonts estiver fora do ar), então `sans-serif` instrui o navegador a usar qualquer fonte sans-serif disponível. Você pode colocar outras fontes alternativas na _pilha de fontes_. É só separar com vírgulas, como você vê acima.
Recarregue a página, e você deve ver a fonte nova! Mas vamos fazer uma configuração melhor e integrar as duas fontes direito.
## Configurar cores e variáveis
Se você leu o capítulo [Personalizar o Simple.css](/personalizar-o-simple-css), vai lembrar que ele usava variáveis CSS para controlar cor e fontes. Vamos fazer isso aqui também. Isso vai facilitar personalizar depois (o que você pode querer fazer se não gostar das minhas escolhas).
```css
:root {
--text-color: #303036;
--muted-text-color: #5e5e67;
--heading-color: #cd2807;
--link-color: #028090;
--background-color: #fffdf7;
--heading-font: 'Oswald', sans-serif;
--body-font: 'Source Sans 3', sans-serif;
}
```
Você pode nomear as variáveis como quiser, desde que comecem com `--`. Aqui, estou definindo várias cores e algumas fontes.
Depois de definidas essas variáveis, posso usá-las para aplicar as fontes e a cor ao texto.
```css
html {
font-family: var(--body-font);
font-size: 20px;
line-height: 1.45;
color: var(--text-color);
background-color: var(--background-color);
}
```
Use a função `var` para usar as variáveis que criamos.
## Estilos dos títulos
Estou usando um `<h1>` para o título da página e elementos `<h2>` para os subtítulos. Vamos mirar esses e aplicar alguns estilos.
```css
h1 {
border-block-start: 10px solid var(--heading-color);
margin-block-start: 4rem;
margin-block-end: 2rem;
font-family: var(--heading-font);
font-weight: normal;
}
h2 {
margin-block-start: 1.5rem;
margin-block-end: 0.5rem;
font-family: var(--heading-font);
font-size: 1.2em;
font-weight: normal;
color: var(--heading-color);
}
```
Estou fazendo várias coisas aqui. Estou adicionando um pouco de margem extra acima dos elementos `<h2>` e um bom tanto de espaço extra acima do `<h1>`.
Eu gosto de como a Oswald — a fonte que estou usando para títulos — fica sem negrito. Então estou definindo `font-weight` como `normal` em vez de `bold`, que é o padrão dos títulos.
{% aside 'Observação' %}
Estamos usando [fontes variáveis](https://perma.cc/A75H-V4HJ), então temos mais opções de peso do que `normal` ou `bold`. Experimente 300, 500, 900 [e por aí vai](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight).
{% endaside %}
Para o `<h1>`, estou mantendo o `font-size` padrão. Para o `<h2>`, estou definindo o `font-size` como `1.2em`, ou seja, 1,2 vezes o _tamanho de fonte atual_.
Algumas mudanças tipográficas transformaram a nossa página, e ela tem uma cara completamente diferente.

Quase poderíamos parar aqui. Não tem nada de tão terrível acontecendo. Mas vamos estilizar alguns dos elementos que ainda não cobrimos.
## Links
Se você estiver usando o meu documento HTML, vai notar alguns hiperlinks, ou tags `<a>`. Um aponta para a fonte da imagem de Saturno que eu usei, e o outro para o site NASA Solar System Exploration. O resto está no rodapé do site.
Vamos estilizá-los um pouco. Eu escolhi uma cor azul-esverdeada e defini como variável, o que vimos antes.
```css
:root {
/* ... other code ... */
--link-color: #028090;
/* ... other code ... */
}
```
Vou usar isso para definir a cor de todos os elementos `<a>`, assim:
```css
a {
color: var(--link-color);
}
```
Não é uma regra rígida, mas a maioria das pessoas associa texto azul sublinhado a um link clicável. Eu decidi não me afastar demais disso. Mas eu gostaria de adicionar um efeitozinho em que o sublinhado some quando eu passo o mouse por cima.
Vamos usar o seletor de _pseudo-classe_ `:hover` para montar isso. Esses seletores costumam ser usados para estilizar elementos em estados diferentes — por exemplo, um campo de texto desativado (`:disabled`) ou, no nosso caso, um link sobre o qual o ponteiro do mouse está passando.
```css
a:hover {
text-decoration: none;
}
```
A propriedade que queremos é `text-decoration`. Por padrão, os links têm um `text-decoration` de `underline`. Você tem [algumas opções](https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration) aqui, mas eu vou de `none`.
Isso nos dá uma interação visual sutil com o link.
<video controls>
<source src="/assets/video/css-basics-1.mp4" type="video/mp4">
Seu navegador não tem suporte à tag de vídeo. O vídeo mostra uma gravação da tela em que eu passo o mouse sobre o link. O sublinhado some e volta conforme eu faço isso.
</video>
## Abreviações
Falando de efeitos ao passar o mouse, há um que você pode não ter notado. Se olhar o HTML no primeiro parágrafo, vai encontrar a seguinte frase.
```html
In this article, we will explore the distinctive attributes of each planet,
providing an overview of what makes them unique (and learn a little
<abbr title="Cascading style sheets">CSS</abbr> while doing it).
```
A tag `<abbr>` ajuda quem visita a saber o que certas abreviações ou siglas significam. Quando você passa o mouse sobre o termo CSS no documento, recebe uma dica útil mostrando o significado. Você coloca a abreviação dentro das tags e usa o atributo `title` para o texto completo.
Vamos dar um `text-decoration` para sugerir que dá para interagir com isso.
```css
abbr {
text-decoration: underline;
text-decoration-style: dotted;
text-decoration-color: var(--heading-color);
text-decoration-thickness: 2px;
}
```
Estamos dando um sublinhado, como os links têm por padrão. Mas vamos deixar na cor vermelha que estamos usando para títulos e usar o estilo `dotted`, para ajudar a diferenciar de um link. Eu decidi aumentar um pouco a espessura também, para ficar mais fácil de ver.
## Citações em bloco
Eu seria irresponsável se não citasse Carl Sagan num artigo sobre o sistema solar — mesmo que isto seja só uma demo técnica. Então incluí um trecho épico dele na seção sobre a Terra.
Já está servindo como está — já vem recuado e parece uma citação. Mas dá para melhorar, com certeza. Vou te mostrar o código e depois explicar o que estou fazendo.
```css
blockquote {
margin-inline: 1.5rem 0;
border-inline-start: 4px solid var(--heading-color);
padding-inline: 1rem;
font-size: 0.9rem;
color: var(--muted-text-color);
}
```
Eu quero controlar o recuo e deixá-lo mais consistente, baseando-o no tamanho da fonte do documento. Em idiomas da esquerda para a direita, `margin-inline` controla as margens esquerda e direita. Estou fornecendo dois valores, `1.5rem` e `0`, para especificar as margens esquerda e direita, respectivamente. A margem esquerda vai ser 1,5 vezes o tamanho da fonte do documento, e vamos remover a margem direita por completo.
Um estilo talvez comum demais de um elemento `<blockquote>` é dar a ele uma borda esquerda grossa que usa um destaque. Não vejo motivo para ser inconformista aqui, então vou colocar uma borda esquerda usando `border-inline-start`. Lembre-se: `inline` se refere ao eixo horizontal. E `start` significa o primeiro (que é a _esquerda_ para mim; `end` seria o da direita).
Vou definir como uma linha sólida de `4px` de largura, usando a cor dos títulos, que estabelecemos como a cor de destaque da nossa paleta.
Mas temos um problema. Se parássemos aí, teríamos uma borda encostada no texto. Eca.

Felizmente, podemos corrigir isso adicionando um pouco de `padding`. Vou te dar uma introdução rápida ao [_modelo de caixa_](https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model). Todo elemento tem espaço do lado de fora (margem), espaço ao redor do lado de dentro (preenchimento) e uma camada opcional que separa os dois (a borda).
Com esse conhecimento, vamos adicionar algum espaço _dentro_ do elemento, o que vai afastar o conteúdo da borda. Vamos deixar o preenchimento esquerdo e o direito iguais, definindo `padding-inline` com só um valor, `1rem`, que equivale ao tamanho da fonte do documento.
Por fim, vou arredondar o efeito deixando o tamanho da fonte um pouco menor e a cor do texto um pouco mais clara. O resultado final é uma citação em bloco bonita, com um toque de estilo.

Eu desenhei este estilo de citação para caber na maioria dos casos, mas você poderia ir em outra direção — chamadas curtas com texto grande e itálico, por exemplo.
## Listas
Vamos resolver rápido a lista com marcadores de Plutão e companhia. Vamos dar à lista um pouco de recuo, como é comum em listas com marcadores. Lembre-se: o HTML também tem listas numeradas. Não estamos usando uma nesta página (se você estiver usando a minha marcação HTML), mas podemos escrever o estilo para os dois tipos de lista.
Você já sabe que o seletor mira os elementos que queremos estilizar. Mas você também pode ter vários seletores! Podemos mirar o elemento `<ul>` e o elemento `<ol>` e dar o mesmo recuo aos dois, fazendo o seguinte.
```css
ul, ol {
padding-inline-start: 1.5rem;
}
```
Você adiciona vários seletores separando-os com uma vírgula. Isso cria uma _lista de seletores_. O preenchimento que estamos usando para o efeito de recuo vai ser aplicado a _listas não ordenadas_ (com marcadores) e _listas ordenadas_ (numeradas).
Vamos também ajustar o espaço entre os _itens de lista_ individuais (elementos `<li>`). Eu gosto de usar a metade do que uso para parágrafos, porque quero os itens de lista mais juntos do que os parágrafos, mas ainda com um pouco de espaço entre eles. Como usei `1rem` para espaçar os parágrafos e outros elementos, vou usar a metade disso, `0.5rem`, para a margem de baixo.
```css
li {
margin-block: 0 0.5rem;
}
```
Lembre-se: `margin-block` é a margem de cima e de baixo num idioma da esquerda para a direita, como o português. Podemos definir os dois valores ao mesmo tempo. O trecho acima equivale a:
```css
li {
margin-block-start: 0;
margin-block-end: 0.5rem;
}
```
Isso significa que, em idiomas da esquerda para a direita, a margem acima do item de lista é zero, e a margem abaixo é uns dez pixels (`0.5rem` significa 0,5 vezes o tamanho da fonte do **r**oot el**em**ent, que definimos como `20px`).
O espaçamento deve estar bem bonito agora, mas vamos fazer uma coisa que deixaria designers web dos anos 2000 com inveja. Vamos mudar a cor dos marcadores. Isso era complicado, mas agora é moleza.
```css
li::marker {
color: var(--heading-color);
}
```
O pedaço `::marker` se chama _pseudo-elemento_, porque representa um pedaço de um elemento HTML. O `::marker` é uma parte do _item de lista_, ou elemento `<li>`. Ele contém o marcador (ou o número) do item. Podemos mirá-lo com o nosso seletor e mudar a cor para o vermelho dos títulos.

Ficou bonito!
## Texto pré-formatado
Na maior parte do tempo, nos nossos documentos HTML, não nos importamos em preservar o espaçamento exato de tudo. Na verdade, isso seria contraproducente, porque em geral recuamos o HTML ou incluímos linhas vazias para deixar o código mais legível. Mas, às vezes, queremos mostrar o texto exatamente como está formatado. Exemplos incluem arte ASCII e código de computador.
Em geral, mostramos esse tipo de texto com a tag `<pre>` no HTML. Ela preserva todo o espaçamento e usa uma fonte monoespaçada para deixar tudo consistente. Muitas vezes é combinada com a tag `<code>` para indicar que o texto é código de computador. Eu incluí um pouco de código JavaScript relacionado a planetas como exemplo.
Vamos estilizar a tag `<pre>` assim.
```css
pre {
padding: 1rem;
background-color: #edebe7;
border-radius: 4px;
overflow-x: auto;
font-size: 0.75rem;
}
```
Queremos que o código apareça como se estivesse dentro de um contêiner, então vamos dar preenchimento o tempo todo ao redor. Em seguida, vamos definir uma cor de fundo clara, só o bastante visível contra o fundo da página, mas não tão escura a ponto de prejudicar o contraste do texto. Caixas de canto vivo parecem um pouco antinaturais, então vamos adicionar um `border-radius` pequeno, que é só um termo chique para quanto queremos arredondar os cantos.
Poderíamos ter linhas longas de código, então precisamos especificar o que deve acontecer se uma linha transbordar pela lateral do contêiner. Neste caso, vamos definir como `auto`, o que faz o navegador mostrar uma barra de rolagem horizontal no elemento, se precisar.
Por fim, código monoespaçado pode parecer grande, então vamos baixar o tom dizendo que deve ter três quartos do tamanho do texto padrão.

## Melhorar o estilo das imagens
Aqui vai como a imagem de Saturno está agora.

Não está tão ruim, mas parece que a tag `<figure>` está adicionando margem dos dois lados. Eu quero que a imagem ocupe a largura toda. Também quero que a legenda da foto fique menor.
```css
figure {
margin-inline: 0;
}
figure img {
display: block;
margin-inline: auto;
border-radius: 4px;
}
figcaption {
margin-block-start: 0.5rem;
font-size: 0.8rem;
}
```
Vamos remover a margem em linha do `<figure>`. Depois vamos mirar imagens que estão dentro de figures (só temos uma, mas isso pode ser um padrão legal se adicionarmos mais) e fazer o seguinte:
- Definir `display` como `block`. Imagens vêm como `inline` por padrão, mas o comportamento de `block` funciona mais como você esperaria de uma imagem assim.
- Definir a margem em linha como `auto`, caso usemos uma imagem menor do que a largura da página — nesse caso, ela fica centralizada.
- Definir `border-radius` como `4px` arredonda os cantos da imagem só um pouquinho.
- Por fim, vamos reduzir a margem acima da legenda e reduzir o `font-size` para 80% do tamanho da fonte do documento.

Ficou chique! Ajustes pequenos podem fazer uma diferença grande.
## O rodapé
Já temos alguns estilos de rodapé — antes, definimos a largura e garantimos que ficasse centralizado. Mas podemos melhorar dando a ele espaço para respirar, uma bordinha no topo, texto menor e uma cor de texto mais suave.
```css
footer {
margin-block-start: 3rem;
margin-inline: auto;
padding-block: 1.5rem 3rem;
border-block-start: 2px solid var(--heading-color);
max-width: 65ch;
color: var(--muted-text-color);
}
```
Um pouco disso já deve começar a parecer familiar. Estamos criando alguma margem acima do elemento com `margin-block-start`. Estamos adicionando uma borda de `2px` de largura acima do rodapé, usando o nosso vermelho de títulos de sempre. Usando `padding-block`, estamos adicionando algum espaço entre o texto e a borda, e um bom pedaço de preenchimento embaixo para dar folga na parte de baixo da página. Por fim, vamos usar a mesma cor de texto suave que usamos na citação em bloco.
Como já adicionamos a margem que queremos no próprio elemento `<footer>`, vamos remover toda a margem das coisas _dentro_ do rodapé. Vamos usar o nosso amigo, o seletor universal (`*`).
```css
footer * {
margin: 0;
font-size: 0.9rem;
}
```
Este seletor vai mirar tudo o que está _dentro_ da tag `<footer>`. Vamos definir `margin` como `0` e reduzir o texto para 90% do tamanho da fonte do documento.
## Diversão tipográfica extra
Poderíamos parar aqui de vez, _mas_… vamos nos divertir um pouco.
Olhando o primeiro parágrafo na marcação, eu dei a ele uma classe `intro`. Vamos dar um pouco de ênfase deixando o texto um pouco maior.
```css
.intro {
margin-block-end: 2rem;
font-size: 1.2em;
}
```
Quando colocamos um ponto antes de um termo num seletor CSS, isso significa que queremos mirar todo elemento que tem aquela classe (uma classe `intro`, neste caso). Isso vai deixar o `font-size` maior do que o tamanho de texto padrão do documento. E, com a fonte maior, precisa de um pouco de margem extra embaixo.
Beleza, mas agora vamos ficar _bem extra_. Olhe a marcação de novo, e você vai notar que eu envolvi as três primeiras palavras numa tag `<span>` com uma classe `caps`.
```css
.caps {
text-transform: uppercase;
font-size: 0.78em;
font-weight: 600;
letter-spacing: 0.1em;
}
```
Isso vai nos dar aquele efeito chique de livro, em que as primeiras palavras ficam em versalete. Em geral, você ia querer usar uma fonte com [versalete de verdade](https://practicaltypography.com/small-caps.html), mas dá para fazer uma falsificação decente, já que Source Sans 3 é uma fonte variável.
A declaração `text-transform` vai deixar todas as letras em maiúsculas. É melhor fazer isso com CSS do que digitar tudo em maiúsculas na mão, porque é mais uma coisa de estilo. Para o `font-size`, eu só fui mexendo até ficar com a cara certa. No fundo, eu queria que as maiúsculas tivessem a mesma altura das letras minúsculas do texto de introdução (ou seja, a [altura-x](https://en.wikipedia.org/wiki/X-height)).
Para ajudar no equilíbrio, estou aumentando um pouco o `font-weight`. Além de valores como `normal` e `bold`, você pode usar os valores numéricos de 100 a 900 se a fonte suportar — e a nossa fonte variável suporta.
Por fim, você se beneficia de aumentar o espaço entre as letras ao usar todas em maiúsculas. Estou usando a unidade `em`, que se baseia no `font-size` atual. Isso é útil porque, se você mudar o `font-size` no futuro, o espaçamento muda na mesma proporção.

E aí está. Dos começos humildes como uma página _sem estilo_, com um charme simples, agora está com cara de artigo de autoridade.
## Potencial sem limite
Estes são só os estilos que eu escolhi com base nas minhas preferências. Você poderia ir em todo tipo de direção diferente. Não estou necessariamente tentando empurrar um estilo para você — embora eu tenha te apontado para alguns princípios tipográficos geralmente bons de seguir. Eu só queria te dar um gostinho de como você pode aplicar os seus próprios estilos a uma página.
A mágica do CSS é que você poderia pegar o meu HTML exato — sem mudanças — e criar um design completamente diferente a partir do mesmo ponto de partida. Essa é a premissa de um experimento web chamado [CSS Zen Garden](https://csszengarden.com/), em que as pessoas enviam designs com base na mesma marcação.
<figure>
<img src="/assets/img/css-basics-14.webp" alt="Captura de tela de duas páginas do projeto CSS Zen Garden. A página da esquerda tem um design colorido e vibrante, com uma paleta rosa, roxa e laranja. A da direita tem um design minimalista e limpo, com fundo cinza-claro e texto azul. As duas mostram o que o CSS consegue fazer no design.">
<figcaption>Estes dois designs compartilham o mesmo código HTML. <a href="https://www.youtube.com/watch?v=Iloby6ZXRjI">São a mesma foto.</a></figcaption>
</figure>
Espero que este capítulo bônus tenha te dado um gostinho do que é possível com CSS. Assim como com HTML, até um pouco de conhecimento de CSS já vale — uma simples mudança de fonte e cor, por exemplo, pode fazer uma diferença enorme. Eu te animo a continuar explorando CSS se você quiser criar designs personalizados. É uma habilidade recompensadora de ter.
## A seguir
|