Ajuste de Line-Height para Alinhamento Vertical
Em CSS, definir a propriedade line-height igual à altura do elemento pode causar um deslocamento vertical do texto. Para corrigir, reduza ligeiramente o line-height. Considere um botão de texto:
<div class="rotulo-botao">Clique</div>
.rotulo-botao {
display: inline-block;
height: 22px;
line-height: 20px;
width: 40px;
font-size: 11px;
text-align: center;
background: #3498db;
border-radius: 11px;
}
Aqui, o line-height é 2px menor que a height, garantindo que o texto fique centralizado verticalmente.
Impacto do Transform no Contexto de Empilhamento
A propriedade transform em CSS cria um novo contexto de empilhamento, o que pode invalidar z-index. Por exemplo, em animações de rotação, uma imagem de fundo pode sobrepor uma imagem frontal, mesmo com z-index alto. Para resolver, defina o z-index do elemento de fundo para um valor negativo, como -1.
Personalização de Botões de Rádio com CSS
Método 1: Usando seletores CSS
<div class="grupo-opcao">
<input id="escolha1" type="radio" name="escolha" value="A" checked>
<label for="escolha1"></label>
<span>Opção A</span>
</div>
.grupo-opcao {
position: relative;
line-height: 28px;
}
input[type="radio"] {
width: 18px;
height: 18px;
opacity: 0;
}
label {
position: absolute;
left: 4px;
top: 2px;
width: 18px;
height: 18px;
border-radius: 50%;
border: 1px solid #aaa;
cursor: pointer;
}
input:checked + label {
background-color: #27ae60;
border-color: #27ae60;
}
input:checked + label::after {
position: absolute;
content: "";
width: 4px;
height: 8px;
top: 2px;
left: 5px;
border: 2px solid #fff;
border-top: none;
border-left: none;
transform: rotate(45deg);
}
Método 2: Substituição por SVG
Use um elemento SVG inline para criar um botão de rádio personalizado, simplificando a estilização.
Definindo Border-Radius por Canto
Para arredondar cantos individualmente, use propriedades específicas:
.elemento-custom {
border-top-left-radius: 10px;
border-top-right-radius: 10px;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
}
Seletores de Filhos em CSS
Use seletores para estilizar elementos com base em sua posição:
/* Primeiro filho */
.container > div:first-child {
font-weight: bold;
}
/* Último filho */
.container > div:last-child {
margin-bottom: 0;
}
/* Exceto o primeiro filho */
.container > div:not(:first-child) {
border-top: 1px solid #ddd;
}
/* N-ésimo filho */
.container > div:nth-child(3) {
color: red;
}
Diferença entre :first-child e :first-of-type: O primeiro seleciona o primerio filho independente do tipo, enquanto o segundo seleciona o primeiro filho de um tipo específico. A lógica se aplica a :last-child e :nth-child da mesma forma.
Problema de Animação em Layouts Flex
Em layouts flexbox, animações com transform: scale() podem causar que o elemento pai seja esticado, resultando em tremores na página. Para evitar isso, remova transform e use alterações diretas de dimensão com posicionamento absoluto para manter o centro.
.elemento-animado {
animation: efeito-pulso 0.4s;
position: absolute;
}
@keyframes efeito-pulso {
50% {
width: 24px;
height: 24px;
top: -5px;
left: -5px;
}
100% {
width: 16px;
height: 16px;
top: 0;
left: 0;
}
}