๐ŸŽƒ tengas miedo a dibujar con CSS ์—†์Œ

21648 ๋‹จ์–ด htmlwebdevcss
ํ• ๋กœ์œˆ ์‹œ๊ฐ„์€ ๊ธˆ์š”์ผ์ด๊ณ  ๊ธˆ์š”์ผ์ด๋‹ค.

Este dibujo estรกcompuesto por solo tres

<div class="stem"></div>
<div class="face"></div>
<div class="pumpkin"></div>
์ฃ„์•… ๊ธˆ์ˆ˜, se usar รกn los pseudo elementos
  • :
  • ์ด์ „
  • :
  • ์ดํ›„
    As รญcomo tambiรฉn la propiedad'๋ฐ•์Šค ์Œ์˜'para dibujar mรกs figuras de la calabazasin crear mรกs


    Otras propiedades importantes que vamos a utilizar son:
  • ๊ฒฝ๊ณ„ ๋ฐ˜์ง€๋ฆ„
  • ํด๋ฆฝ ๊ฒฝ๋กœ
  • ๋™๋ฌผ
  • ์œ„์น˜
  • ๋ณ€ํ™˜
  • ๋ณ€์ˆ˜ nativas de CSS
  • Paso INICAL, ๋ณ€์ˆ˜ y preparativos


    Con CSS vanilla podemos usar variables para que si en un futuro queremos cambiar algo no tengamos que ir buscando que cambiar a lo largo de todo el cรณdigo
    Cuando las declaramos en: genloque estamos haciendo que est รฉn disponibles de manera global
    :root {
      --main-bg-color: #422261;
      --face: #422261;
    }
    
    Otra cosa que podemos hacer antes de comenzar es poner mรกrgenes y padding a 0 para que no nos molesten dibujando asรญcomo tambiรฉn definimos un borde rojo que nos ayudarรกa ver el tamaรฑo y forma de los

    * {
      border: 5px solid red;
      margin: 0px;
      padding: 0px;
      box-sizing: border-box;
    }
    
    Porรบltimo antes de comenzar usaremos CSS flexbox para alinear nuestro elementos sin importar el tamaรฑo de pantalla
    body {
      display: flex; 
      justify-content: center;
      align-items: center;
      height: 100vh;
      background-color: var(--main-bg-color);
    }
    

    ํŒŒ์†Œ 1๋ฒˆ์ง€, dibujar la calabaza


    Puede que te pregutes como a partir de unโ€œNo te preocupes si No conoces la sintaxis que usaโ€œ/โ€para definir base y altura de las esquinas ya que existefancy-border-radiusque es una herramienta que nos ayuda generar el cรณdigo para formar figures unregulars.
    .pumpkin {
      position: relative;
      height: 300px;
      width: 170px;
      background-color: #f8931f;
      border-radius: 28% 72% 33% 67% / 21% 83% 17% 79% ;
      transform: rotate(13deg);
      box-shadow:
        -80px 5px 0px -2px #f8931f,   /*BS 1*/
        -40px 4px 0px -1px #fbb03b,   /*BS 2*/
        40px -15px 0px  0px #f87700,  /*BS 3*/
        80px -35px 0px -2px #f8931f;  /*BS 4*/
    
    }
    
    Por otro lado,usamosโ€œbox shadowโ€para crear copias identicas del elemento ya que nuestra calabaza esta formada Por cinco elementos identicos.
    Con box shadow podemos modificar la posiciรณn en X y Con RESERTO al elemento original,el desenfoque,la escala y el color
    El resultado serรญa El siguiente(BS se refiere a box shadow)

    ํŒŒ์†Œ 2๋ฒˆ์ง€, dibujar el tallo


    ์•„์ฟ ์šฐ์‚ฌ๋ชจ์Šค์˜ ์ž…์žฅ: ์นด๋ผ๋ฐ”์ž์— ์ƒ๋Œ€์ ์ด๋‹ค.
    .stem {
      position: relative;
      bottom: 180px;
      background-color: #8cc63e;
      left: 210px;
      z-index: -1;
      width: 75px;
      height: 150px;
      transform: rotate(30deg);
      border-radius: 58% 42% 69% 31% / 44% 100% 0% 56% ;
    }
    

    ์ƒ๋Œ€ ์œ„์น˜์™€ ์ ˆ๋Œ€ ์œ„์น˜


    La diferenceia mรกs important a La hora de dibujar es que position relative respeta La posiciรณn del elemento dentro del flujo de La pรกgina mientras que position absolute no.
  • ์œ„์น˜: ์ƒ๋Œ€
  • ์œ„์น˜: ์ ˆ๋Œ€

  • Paso 2.1๏ผŒcrear mรกscara para el tallo


    Para que el tallo tenga curvatura tenemos que usar una tรฉcnica que es usar mรกscaras Para esconder ciertas partes de los elementos,en este caso usaremos una mรกscara circular.
    Esta mรก scara circular pudo haber sido dibujada con "๊ฒฝ๊ณ„ ๋ฐ˜์ง€๋ฆ„: 50%"pero para practicar otra Propedad Prefere รญ usar "ํŽธ์ง‘ ๊ฒฝ๋กœ: ์›ํ˜•(50% ๋Š” 50%"
    .stem::before {
      content: '';
      border: 20px solid red;
      position: absolute;
      top: 0px;
      left: 50px;
      width: 100px;
      height: 100px;
      background-color: var(--main-bg-color);
      clip-path: circle(50% at 50% 50%);
    }
    

    Aqรญfue utilizado un pseudo elemento de tallo ya que la mรกscara que vamos a usar forma parte del mismo tallo y asรญnos ahorramos un

    Tambiรฉn por primera vez usamos una variable de CSS

    ํŒŒ์†Œ 3๋ฒˆ์ง€, dibujar la cara


    Para dibujar la cara usamos un elemento y sus dos pseudo elementos

    ํšŒ์‚ฌ ๋ช…


    Ojo izquierdo ํšŒ์‚ฌ


    Vemos el uso de la varibleโ€œ-faceโ€que es de special utilidad aqรญpor si queremos usar otro color no tener que cambiarlo en cada ojo y boca.
    .face {
      width: 75px;
      height: 30px;
      background-color: var(--face);
      position: relative;
      left: 60px;
      bottom: 40px;
      transform: rotate(10deg);
      z-index: 1;
      border-radius: 
        100% 0% 50% 50% / 0% 0% 100% 100%;
    }
    

    Ojo derecho ํšŒ์‚ฌ


    Aquise uso una rotaciรณn de-20๋„,que son -10๋„para compensar los del ojo izquiero que fuero heredamos por usar el pseudo elemento y-10๋„para girarlo a la posiciรณn que buscamos
    .face::after {
      content: '';
      position: absolute;
      background-color: var(--face);
      top: -25px;
      left: 120px;
      width: 75px;
      height: 30px;
      transform: rotate(-20deg);
      border-radius: 
        100% 0% 50% 50% / 0% 0% 100% 100%;
    }
    

    ๋””๋ธŒ์ž”๋„ ๋ผ๋ณด์นด


    Aquiusamos Specรญficianteโ€œclip pathโ€gracias a su opciรณn de crear polรญgonos personalidos para nuestras nekesidades que en esta ocasiรณn era crear la boca mรกs tenebrosa posible
    .face::before {
      content: '';
      position: absolute;
      top: 75px;
      left: 15px;
      background-color: var(--face);
      transform: rotate(-10deg);
      width: 200px;
      height: 50px;
      clip-path: polygon(0% 35%, 17% 2%, 21% 37%, 31% 17%, 36% 32%, 49% 6%, 63% 34%, 86% 8%, 85% 30%, 100% 30%, 94% 60%, 79% 98%, 66% 62%, 63% 94%, 53% 76%, 42% 100%, 31% 62%, 17% 96%, 14% 66%);
    }
    
    Seusan pares ordenados de coordenadas de cada punto del pol รญ gono lo cual es muy complado sin ๊ธˆ์ˆ˜,gracias a la herramientaclippypodemos generar el cรณdigo automรกticament

    โ€œListo๏ผ


    Una vez terminado podemos eliminar el borde rojo
    * {
    border: 1px solid red;
    }
    

    ์ƒ๊ธˆ


    Dentro del elemento.์–ผ๊ตด: los par รก metros iniciales de la animaciรณn que son์„ ์ •์˜ํ•˜๊ธฐ ์ „์—: el nombre de la animaciรณn, la duraciรณn(que es como la velocidad) y el n รบmero de veces que emos que repita la animaciรณn adem รกs de los que ya ten amos
    .face::before {
      animation-name: pulse;
      animation-duration: 1.5s;
      animation-iteration-count: infinite;
    }
    
    Luego creamos los keyframes de la animaciรณn que son las guรญas para que CSS translation lo que queremos hacer
    @keyframes pulse {
      0% {transform: scale(1) rotate(-10deg);}
      50% {transform: scale(1.1) rotate(-10deg);}
      100% {transform: scale(1) rotate(-10deg);}
    }
    
    Se mantuvo una rotaciรณn de-10 deg para que Se quedara recta la sonrisa

    ์ฐจ๋ก€๋กœ ๋Œ์•„๊ฐ€๋‹ค


    Repo de github
    Pen

    ์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ