Stack Overflow en español Asked on August 27, 2021
¿Cómo puedo añadir una sombra alargada usando CSS como se ve en la imagen?
Tengo el siguiente código:
body{background-color:red;}
<p style="font-size:90px;font-family:Helvetica;color:white;"><b>HOLA</b></p>
Mi respuesta es más bien un añadido a la respuesta proporcionada por @Shassain.
Lo que intento decir en mi comentario es que podemos apoyarnos en los pseudo elementos :after
y :before
para reducir al menos al triple el código necesario para obtener la sombra sólida sobre el elemento de texto.
Por ejemplo:
body {
background: #FF2E2E;
}
.texto-sombra{
font-size: 100px;
font-weight: 900;
color: #fff;
text-shadow: 1px 1px #881010, 2px 2px #881010, 3px 3px #881010, 4px 4px #881010, 5px 5px #881010, 6px 6px #881010, 7px 7px #881010, 8px 8px #881010, 9px 9px #881010, 10px 10px #881010, 11px 11px #881010, 12px 12px #881010, 13px 13px #881010, 14px 14px #881010, 15px 15px #881010, 16px 16px #881010, 17px 17px #881010, 18px 18px #881010, 19px 19px #881010, 20px 20px #881010,21px 21px #881010, 22px 22px #881010, 23px 23px #881010, 24px 24px #881010, 25px 25px #881010, 26px 26px #881010, 27px 27px #881010, 28px 28px #881010, 29px 29px #881010, 30px 30px #881010, 31px 31px #881010, 32px 32px #881010;
}
.texto-sombra:after, .texto-sombra:before {
content: attr(data-text);
z-index: -1;
color: #881010;
position: absolute;
}
.texto-sombra:after {
left: 33px;
top: 33px;
}
.texto-sombra:before {
left: 66px;
top: 66px;
}
<div class="texto-sombra" data-text="hola">hola</div>
Como se observa en el código, establezco los pesudo elementos :after
y :before
para que su posición inicial (definida por left
y top
coincida con el final de la sombra inicial aplicada sobre el elemento anterior.
En mi ejemplo las posiciones son:
texto-sombra
->texto-sombra:after
->texto-sombra:before
Y el código CSS original aplicado a texto-sombra
se reduce de 100 definiciones a sólo 32.
Luego posiciono adecuadamente y de forma absoluta el elemento :after
justo donde termina la última sombra:
/* pseudo clase :after */
left: 33px;
top: 33px;
Este elemento a su vez tendrá aplicada una sombra (definida en la clase padre), y cuya posición puedo determinar sumando 32 + 33
, dando como resultado que el siguiente elemento lo debo posicionar en
/* pseudo clase :before */
left: 66px;
top: 66px;
Ya con esto logramos prácticamente el mismo efecto pero con menor cantidad de código.
Answered by Mauricio Contreras on August 27, 2021
Propongo una alternativa usando un ciclo en jQuery
. Se que el OP habla de usar solo html
y css
, pero es válido tener varias opciones.
El código de jQuery
está comentado.
//definir una variable como un string vacío
let propiedad = '';
//crear el ciclo y almacenar los valores en la variable
for(let i = 1; i <= 100; i++){
propiedad += '#000 '+i+'px '+i+'px,';
}
//eliminar la última coma
let sombra = propiedad.slice(0,-1);
//agregar la propiedad al css
$('.sombra').css({'text-shadow': sombra});
body{
background-color: red;
}
.sombra{
font-size: 90px;
font-family: Helvetica;
text-align: center;
color: white;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p class="sombra"><b>HOLA</b></p>
Answered by DjCrazy on August 27, 2021
La idea seria ir colocando una sombra tras otra, bajando y moviéndonos a la derecha pixel tras pixel.
Mira este ejemplo básico con sombras al 20px:
body {
background: #FF2E2E;
}
.texto-sombra{
font-size: 100px;
font-weight: 900;
color: #fff;
text-shadow: 1px 1px #881010, 2px 2px #881010, 3px 3px #881010, 4px 4px #881010, 5px 5px #881010, 6px 6px #881010, 7px 7px #881010, 8px 8px #881010, 9px 9px #881010, 10px 10px #881010, 11px 11px #881010, 12px 12px #881010, 13px 13px #881010, 14px 14px #881010, 15px 15px #881010, 16px 16px #881010, 17px 17px #881010, 18px 18px #881010, 19px 19px #881010, 20px 20px #881010;
}
<div class="texto-sombra">hola</div>
Entonces text-shadow
agrega sombra, los valores Xpx Ypx #color
indican dirección y color de las sombras. si deseas que la sombra se extienda mas debes de seguir agregando sombras.
Con sombras al 100px
body {
background: #FF2E2E;
}
.texto-sombra{
font-size: 100px;
font-weight: 900;
color: #fff;
text-shadow: 1px 1px #881010, 2px 2px #881010, 3px 3px #881010, 4px 4px #881010, 5px 5px #881010, 6px 6px #881010, 7px 7px #881010, 8px 8px #881010, 9px 9px #881010, 10px 10px #881010, 11px 11px #881010, 12px 12px #881010, 13px 13px #881010, 14px 14px #881010, 15px 15px #881010, 16px 16px #881010, 17px 17px #881010, 18px 18px #881010, 19px 19px #881010, 20px 20px #881010,21px 21px #881010, 22px 22px #881010, 23px 23px #881010, 24px 24px #881010, 25px 25px #881010, 26px 26px #881010, 27px 27px #881010, 28px 28px #881010, 29px 29px #881010, 30px 30px #881010, 31px 31px #881010, 32px 32px #881010, 33px 33px #881010, 34px 34px #881010, 35px 35px #881010, 36px 36px #881010, 37px 37px #881010, 38px 38px #881010, 39px 39px #881010, 40px 40px #881010,41px 41px #881010, 42px 42px #881010, 43px 43px #881010, 44px 44px #881010, 45px 45px #881010, 46px 46px #881010, 47px 47px #881010, 48px 48px #881010, 49px 49px #881010, 50px 50px #881010, 51px 51px #881010, 52px 52px #881010, 53px 53px #881010, 54px 54px #881010, 55px 55px #881010, 56px 56px #881010, 57px 57px #881010, 58px 58px #881010, 59px 59px #881010, 60px 60px #881010,61px 61px #881010, 62px 62px #881010, 63px 63px #881010, 64px 64px #881010, 65px 65px #881010, 66px 66px #881010, 67px 67px #881010, 68px 68px #881010, 69px 69px #881010, 70px 70px #881010,71px 71px #881010, 72px 72px #881010, 73px 73px #881010, 74px 74px #881010, 75px 75px #881010, 76px 76px #881010, 77px 77px #881010, 78px 78px #881010, 79px 79px #881010, 80px 80px #881010,81px 81px #881010, 82px 82px #881010, 83px 83px #881010, 84px 84px #881010, 85px 85px #881010, 86px 86px #881010, 87px 87px #881010, 88px 88px #881010, 89px 89px #881010, 90px 90px #881010,91px 91px #881010, 92px 92px #881010, 93px 93px #881010, 94px 94px #881010, 95px 95px #881010, 96px 96px #881010, 97px 97px #881010, 98px 98px #881010, 99px 99px #881010, 100px 100px #881010;
}
<div class="texto-sombra">hola</div>
Uff!! pero que largo y tedioso es hacer esto.
Si quieres reducir el codigo podrias utilizar sass
junto a un pre compilador como Koala
Answered by Shassain on August 27, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP