Como o navegador calcula o tamanho dos elementos e como controlamos seu comportamento no layout.
Todo elemento HTML é uma "caixa" composta por estas 4 camadas.
.card {
/* Conteúdo */
width: 300px;
height: 200px;
/* Padding (espaço interno) */
padding: 20px;
padding: 10px 20px; /* vertical | horizontal */
padding: 10px 20px 15px 5px; /* T R B L */
/* Border */
border: 2px solid #6366f1;
border-radius: 12px;
/* Margin (espaço externo) */
margin: 16px auto; /* centralizar */
}
Com content-box (padrão):
Largura total = width + padding + border
300 + 40 + 4 = 344px
/* Inclui padding e border no width */
* {
box-sizing: border-box;
}
Largura total = 300px. Sempre!
.oculto {
display: none;
}
Remove completamente o elemento. Não ocupa espaço.
.invisivel {
visibility: hidden;
}
Esconde visualmente, mas continua ocupando espaço.
.elemento {
position: static;
/* Fluxo normal do documento */
/* top, left, etc. não funcionam */
}
.elemento {
position: relative;
top: 10px;
left: 20px;
/* Desloca a partir da posição original */
/* Mantém espaço no fluxo */
}
.pai { position: relative; }
.filho {
position: absolute;
top: 0;
right: 0;
/* Posiciona em relação ao pai relative */
/* Sai do fluxo normal */
}
.navbar {
position: fixed;
top: 0;
left: 0;
width: 100%;
/* Fixo na tela (não acompanha scroll) */
}
.cabecalho-tabela {
position: sticky;
top: 0;
background: white;
z-index: 10;
}
lightbulb
Combina relative e fixed: comparta-se normalmente até atingir o top definido, depois fica fixo.
static
Fluxo normal
relative
Desloca, mantém espaço
absolute
Posiciona no pai, sai do fluxo
fixed
Fixo na tela
sticky
Gruda ao rolar
/* Controla a sobreposição */
.atras { z-index: 1; }
.frente { z-index: 10; }
.topo { z-index: 100; }
Só funciona com position diferente de static.
.container {
width: 200px;
height: 100px;
overflow: visible; /* padrão */
overflow: hidden; /* corta */
overflow: scroll; /* barra */
overflow: auto; /* barra se necessário */
}
Controla o que acontece quando o conteúdo ultrapassa o tamanho do contêiner.
.centro {
text-align: center;
}
Centraliza conteúdo inline (texto, spans)
.centro {
width: 300px;
margin: 0 auto;
}
Centraliza um elemento block com largura definida
.centro {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
Centraliza vertical e horizontalmente
lightbulb Na próxima aula veremos Flexbox, que torna a centralização muito mais simples!
* { box-sizing: border-box; } no seu CSS<header> fixo no topo com position: fixedpadding internoborder com border-radiusmargin entre os cardsmargin: 0 autodisplay: inline-block para colocar elementos lado a ladoposition: absolute no canto superior de um card!
Flexbox: layouts flexíveis.
box-sizing: border-box