TransWikia.com

¿Cómo se puede hacer sombra alargada con CSS?

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?

introducir la descripción de la imagen aquí

Tengo el siguiente código:

body{background-color:red;}
<p style="font-size:90px;font-family:Helvetica;color:white;"><b>HOLA</b></p>

3 Answers

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP