Exibição e fluxo normal

Coloque três parágrafos e alguns links em uma página sem CSS nenhum e eles ainda se organizam: os parágrafos se empilham na página, os links ficam dentro do texto onde você os escreveu. Ninguém mandou o navegador fazer isso. Antes de você escrever uma única regra de layout, já existe um layout, e toda técnica que você usa depois é uma mudança nele em vez de um começo do nada. Este capítulo é sobre esse ponto de partida e a única propriedade que o governa.
Fluxo normal
Quando um navegador exibe uma página sem CSS de layout próprio, ele usa fluxo normal: a forma padrão como os elementos se organizam. Coisas em bloco como parágrafos e títulos se empilham de cima para baixo, cada um em sua própria linha. Texto e links correm ao longo de uma linha, da esquerda para a direita, voltando para a próxima linha quando o espaço acaba.
Você já conheceu as peças que fluem ao redor: este capítulo se baseia no modelo de caixa, porque são essas caixas que fluem. O fluxo normal vale a pena nomear porque tudo mais no layout é definido contra ele. Flexbox, grid e posicionamento são todas formas de dizer "organize esses elementos de forma diferente do padrão", então conhecer o padrão é o que faz as mudanças fazerem sentido.
Caixas de bloco e caixas inline
Os elementos vêm em dois sabores principais no fluxo normal. Uma caixa de bloco ocupa toda a largura de seu contêiner e se empilha em sua própria linha, empurrando o próximo elemento para baixo. Um parágrafo <p>, um título <h1> e um <div> são todos blocos, e é por isso que se alinham um sob o outro.
Uma caixa inline é diferente. Ela fica dentro de uma linha de texto e ocupa apenas o espaço que seu conteúdo precisa, então várias podem compartilhar uma linha. Um <span> ou um link <a> é inline, e é por isso que um link dentro de uma frase fica no fluxo das palavras em vez de pular para sua própria linha.
<p>Este parágrafo é um bloco, então fica em sua própria linha.</p>
<p>Leia o <a href="/css/box-model">modelo de caixa</a> para mais.</p>
<!-- o link é inline, então fica dentro da frase --><p> e <div> ocupam a largura total e se empilham em suas próprias linhas. Caixas inline como <span> e <a> ficam dentro de uma linha e ocupam apenas o espaço que precisam. É por isso que um link fica dentro de sua frase em vez de quebrar para sua própria linha. A propriedade display
Todo elemento tem um tipo padrão, bloco ou inline, mas você não está preso a ele. A propriedade display permite que você mude o tipo que um elemento se comporta. Defina display: block em um link e agora ele ocupa sua própria linha; defina display: inline em um item de lista e ele fica em uma linha.
Existe um terceiro valor que resolve um problema comum: display: inline-block. Ele flui na linha como uma caixa inline, mas aceita uma largura, uma altura e padding vertical como um bloco. Isso é o que você quer para algo como um botão ou uma pastilha de navegação que deve ficar ao lado de seus vizinhos ainda ocupando um tamanho definido.
.nav-link {
display: inline-block; /* flui na linha, mas aceita width e padding */
padding: 8px 16px; /* padding vertical agora funciona, diferente de inline puro */
}display muda se um elemento se comporta como um bloco ou como uma caixa inline. block ocupa sua própria linha, inline fica na linha de texto. A opção de meio útil é inline-block, que flui na linha mas ainda aceita uma largura e padding, então é o que você quer para botões e links de navegação. Ocultando coisas: display none versus visibility hidden
Às vezes você precisa que um elemento não apareça. Existem duas formas, e elas se comportam diferentemente. display: none remove o elemento completamente: ele desaparece e não deixa nenhuma lacuna, como se não estivesse na página. visibility: hidden o torna invisível mas mantém seu espaço, então há um buraco vazio onde estava.
Qual deles você quer depende se você quer o espaço de volta. Use display: none para remover algo completamente, como um menu que está fechado. Use visibility: hidden quando você quer ocultar algo sem que o layout pule, porque sua caixa permanece reservada.
.closed-menu {
display: none; /* desaparecido, e sem lacuna deixada para trás */
}
.placeholder {
visibility: hidden; /* invisível, mas ainda ocupa seu espaço */
}display: none remove o elemento e não deixa lacuna, visibility: hidden o torna invisível mas mantém seu espaço. Escolha display: none quando você quer que o espaço desapareça também, como um menu fechado. Escolha visibility: hidden quando você não quer que o layout pule. Como display muda o layout interno
Você viu display mudar um elemento entre bloco e inline. Ele faz mais que isso no nível mais profundo. A mesma propriedade é o que transforma um contêiner em um flexbox ou um grid, que são as duas ferramentas modernas para organizar filhos em linhas e colunas. Por enquanto, a coisa para manter é que display é o único controle que decide como uma caixa se organiza e como seus filhos se organizam dentro dela.
Layout não é um grande interruptor que você liga uma vez. Você muda display nos contêineres específicos que precisam de uma disposição diferente, e tudo o que você deixa em paz fica no fluxo normal. Os capítulos flexbox e posicionamento continuam daqui.
display que muda entre bloco e inline é também o que transforma um contêiner em um flexbox ou um grid para organizar filhos. Layout não é um interruptor que você liga uma vez; você muda display nos contêineres que precisam e deixa o resto no fluxo normal. Os capítulos flexbox e posicionamento continuam daqui. 
