Boa noite, tudo bem? Gostaria de uma ajuda no meu código com relação a responsividade, no computador ele funciona perfeitamente, porém, em celulares não apresenta um resultado satisfatório, segue abaixo o link do meu Git e do site-teste.
Boa noite, tudo bem? Gostaria de uma ajuda no meu código com relação a responsividade, no computador ele funciona perfeitamente, porém, em celulares não apresenta um resultado satisfatório, segue abaixo o link do meu Git e do site-teste.
Oi, Luís! Como vai?
Agradeço por compartilhar seu código com a comunidade Alura.
Analisando o seu CSS, percebi que o código está quase todo responsivo. No entanto, notei que em telas menores, parte do texto destacado, especialmente a palavra "qualidade", estava sendo cortada:
Isso acontecia por conta de dois pontos principais:
No seu código:
.titulo-destaque {
width: 0ch;
animation: mark 0.5s step-end infinite, write 6s steps(22, end) infinite;
}
@keyframes write {
20% {
width: 23.6ch;
}
}
ch
(largura do caractere "0") para controlar a largura do texto funciona bem em resoluções grandes, mas não é responsivo, já que o texto pode ultrapassar os limites da tela em dispositivos menores.steps(22, end)
não correspondia ao total real de caracteres da frase, o que deixava o efeito um pouco truncado.O que podemos alterar para resolver o problema:
.titulo-destaque {
width: 0ch;
max-width: 100%;
animation: mark 0.5s step-end infinite, write 6s steps(40, end) infinite;
}
@keyframes write {
0% { width: 0; }
20% { width: 100%; }
70% { width: 100%; }
85% { width: 0; }
100% { width: 0; }
}
E para telas menores:
@media (max-width: 768px) {
.titulo-destaque {
font-size: 1.2rem;
display: inline-block;
overflow: hidden;
white-space: nowrap;
max-width: 100%;
border-right: 3px solid var(--cor-tercearia);
animation: mark 0.5s step-end infinite, write-sm 6s steps(40, end) infinite;
}
}
@keyframes write-sm {
0% { width: 0; }
20% { width: 100%; }
70% { width: 100%; }
85% { width: 0; }
100% { width: 0; }
}
Após a correção, ficou assim:
Por que essas mudanças funcionam melhor?
width: 100%
dentro da animação garante que o texto respeite a largura disponível da tela, tornando o comportamento responsivo.max-width: 100%
, display: inline-block
, white-space: nowrap
e overflow: hidden
para manter o efeito de digitação sem quebras de linha nem corte de conteúdo.steps(40, end)
, o que simula melhor a quantidade de caracteres da sua frase completa.font-size
para o título se ajustar visualmente melhor em telas pequenas.Curiosidade: a unidade ch
é útil para largura de texto baseada em caracteres, mas pode variar muito dependendo da fonte e da tela. Em animações responsivas, usar width: 100%
com as configurações corretas de overflow
e white-space
costuma ser mais seguro.
Oi, Rafaela, tudo bem? Agradeço ajuda prestada, porém ainda estou com algumas dificuldades com relação ao código, diminuindo a tela do meu computador consigo notar que a responsividade em telas menores realmente esta funcionando, porém, no comprimento total da tela a palavra começou a cortar, CSS:
@import url('https://fonts.googleapis.com/css2?family=Krona+One&family=Montserrat&family=swap');
:root {
--cor-primaria: #181C14;
--cor-secundaria: #ECDFCC;
--cor-tercearia: #697565;
--cor-hover: #3C3D37;
--fonte-krona: "Krona One", sans-serif;
--fonte-montserrat:"Montserrat", sans-serif;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
box-sizing: border-box;
background-color: var(--cor-primaria);
color: var(--cor-secundaria);
}
.header {
padding: 2% 0 0 15% ;
}
.header__menu {
display: flex;
gap: 80px;
}
.header__menu__link {
font-family: var(--fonte-montserrat);
font-size: 1.5rem;
font-weight: 600;
color: var(--cor-tercearia);
text-decoration:none;
position: relative;
}
nav a::after{
content:" ";
width: 0%;
height: 3px;
background-color: var(--cor-tercearia);
position: absolute;
bottom: 0;
left: 0;
transition: 0.5s ease-in-out;
}
nav a:hover::after{
width: 100%;
}
.container {
padding: 10% 15%;
display: flex;
align-items: center;
justify-content: space-between;
gap: 120px;
}
.container__conteudo {
width: 615px;
display: flex;
flex-direction:column;
gap: 40px;
}
.container__conteudo__titulo{
font-size: 2.25rem;
font-family: var(--fonte-krona);
}
.titulo-destaque {
font-size: 2rem;
display: block;
color: var(--cor-tercearia);
border-right: 2px solid var(--cor-tercearia);
white-space: nowrap;
overflow: hidden;
width: 0ch;
max-width: 100%;
animation: mark 0.5s step-end infinite, write 6s steps(40, end) infinite;
}
@keyframes mark {
50% {
border-right-color: transparent;
}
}
@keyframes write {
0% { width: 0; }
20% { width: 100%; }
70% { width: 100%; }
85% { width: 0; }
100% { width: 0; }
}
.container__conteudo__texto{
font-size: 1.5rem;
font-family: var(--fonte-montserrat);
}
.botoes {
margin-top: 1rem;
display: flex;
align-items: center;
flex-direction: column;
justify-content: center;
gap: 16px;
}
.container__conteudo__titulo__2 {
font-size: 1.5rem;
font-family: var(--fonte-krona);
font-weight: 400;
}
.botao {
display: flex;
justify-content: center;
gap: 16px;
width: 50%;
padding: 1.0rem 1.2rem;
text-decoration: none;
border-radius: 16px;
font-weight:500;
transition: 0.3s;
text-align: center;
border: 2px solid var(--cor-tercearia);
}
.botao:hover {
border: 3px solid var(--cor-tercearia);
cursor:pointer;
}
.linkedin {
color: var(--cor-secundaria);
font-family: var(--fonte-krona);
font-size: 1.5rem;
}
.linkedin:hover {
background-color: var(--cor-hover);
color: var(--cor-tercearia);
padding: 3%;
}
.github {
color: var(--cor-secundaria);
font-family: var(--fonte-krona);
font-size: 1.5rem;
}
.github:hover {
background-color: var(--cor-hover);
color: var(--cor-tercearia);
padding: 3%;
}
.imagem__capa {
width: 35%;
border-radius: 5% ;
}
.footer {
background-color: var(--cor-tercearia);
color: var(--cor-primaria);
padding: 18px;
text-align: center;
font-family: var(--fonte-montserrat);
font-size: 1.5rem;
font-weight: 400;
}
.container__conteudo__texto a{
text-decoration: none;
color: var(--cor-tercearia);
}
.curriculo {
border-radius: 5%;
width: 35%;
}
.estudos {
padding: 2%;
}
.about{
border-radius: 5%;
width: 35%;
}
img {
max-width: 100%;
height: auto;
}
@media (max-width: 1460px) {
.container {
flex-direction: column-reverse;
padding: 5%;
}
.header {
padding: 8%;
}
.header__menu {
justify-content: center;
}
.container__conteudo {
width: 100%;
}
.botao {
width: 80%;
font-size: 1.2rem;
}
}
@media (max-width: 768px) {
.titulo-destaque {
font-size: 1.2rem;
display: inline-block;
overflow: hidden;
white-space: nowrap;
max-width: 100%;
border-right: 3px solid var(--cor-tercearia);
animation: mark 0.5s step-end infinite, write-sm 6s steps(40, end) infinite;
}
}
@keyframes write-sm {
0% { width: 0; }
20% { width: 100%; }
70% { width: 100%; }
85% { width: 0; }
100% { width: 0; }
}