Cinco exercicios em ordem de dificuldade para praticar posicionamento absoluto do zero.
position: absolute tira o elemento do fluxo normal da pagina e o posiciona com base no pai mais proximo que tenha position: relative (ou absolute, fixed). Se nenhum pai tiver isso, o elemento se posiciona em relacao a janela do navegador. Use top, right, bottom e left para controlar onde ele vai aparecer.<div> de 300x150px com position: relative<div> (o circulo) com position: absoluteResultado esperado
<style>
.caixa {
position: relative; /* ← fundamental! */
width: 300px;
height: 150px;
background: #e8e3d8;
}
.circulo {
position: absolute;
width: 30px;
height: 30px;
background: blue;
border-radius: 50%;
top: ???; /* complete aqui */
left: ???;
}
</style>
<div class="caixa">
<div class="circulo"></div>
</div>position: relativeposition: absolutetop: -10px; right: -10px)Resultado esperado
<style>
.card {
position: relative; /* o pai precisa disso */
width: 160px;
height: 90px;
background: white;
border: 1px solid #ccc;
border-radius: 8px;
}
.badge {
position: absolute;
background: red;
color: white;
border-radius: 50%;
width: 22px;
height: 22px;
/* onde voce coloca o badge? */
top: ???;
right: ???;
}
</style>
<div class="card">
<div class="badge">5</div>
</div>position: relative e overflow: hiddenwidth: 100%; height: 100%; object-fit: cover)<div> com o texto da legenda usando position: absolutebottom: 0; left: 0; right: 0Resultado esperado
<style>
.foto-container {
position: relative;
width: 300px;
height: 180px;
overflow: hidden; /* esconde o que sair */
border-radius: 8px;
}
.foto-container img {
width: 100%;
height: 100%;
object-fit: cover;
}
.legenda {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: rgba(0, 0, 0, 0.6);
color: white;
padding: 10px;
}
</style>
<div class="foto-container">
<img src="sua-foto.jpg" alt="descricao">
<div class="legenda">Uma foto bonita</div>
</div>position: relative e display: inline-block<div> de dropdown com position: absolutetop: 100% e left: 0display: none no dropdown e display: block no :hover do conteinerResultado esperado
<style>
.menu {
position: relative;
display: inline-block;
}
.dropdown {
position: absolute;
top: 100%; /* logo abaixo do pai */
left: 0;
background: white;
border: 1px solid #ccc;
border-radius: 6px;
padding: 8px;
width: 150px;
display: none; /* comeca escondido */
}
.menu:hover .dropdown {
display: block; /* aparece no hover */
}
</style>
<div class="menu">
<button>Menu ▾</button>
<div class="dropdown">
<p>Perfil</p>
<p>Configuracoes</p>
<p>Sair</p>
</div>
</div><div class="overlay"> com position: fixed, cobrindo a tela toda (top: 0; left: 0; width: 100%; height: 100%) com fundo escuro semi-transparente<div class="modal"> com position: absolutetop: 50%; left: 50% e transform: translate(-50%, -50%)Resultado esperado
Este e um modal centralizado na tela.
<style>
.overlay {
position: fixed; /* cobre a janela do navegador */
top: 0; left: 0;
width: 100%; height: 100%;
background: rgba(0, 0, 0, 0.5);
}
.modal {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); /* truque do centro */
background: white;
border-radius: 12px;
padding: 32px;
width: 320px;
}
</style>
<div class="overlay" id="overlay">
<div class="modal">
<h2>Atencao!</h2>
<p>Conteudo do modal aqui.</p>
<button onclick="fecharModal()">Fechar</button>
</div>
</div>
<script>
function fecharModal() {
document.getElementById('overlay').style.display = 'none';
}
</script>