¿Cómo crear un texto curvo usando CSS3/Canvas?

Existen varios métodos para curvar texto en tecnologías web. Las formas más sencillas son mediante el uso de complementos jQuery y SVG, pero no lo explicaremos aquí, nos ceñiremos a la pregunta y aclararemos cómo curvar texto usando CSS3 y lienzo. Empecemos.

Curvar texto usando CSS3: este método es extremadamente agotador para curvar texto largo porque tiene que aplicar el posicionamiento y la alineación adecuados a cada carácter del texto por separado. Pero, para texto pequeño, simplemente hace el trabajo. Aquí solo escribimos los caracteres de un texto uno por uno y comenzamos a aplicar las propiedades de transformación CSS para hacer que todo el texto se vea curvo (o con forma de arco). Sin embargo, una ventaja de este método es que puede seleccionar el texto e incluso copiar y pegar.

Ejemplo 1:

<!DOCTYPE html>
<html lang="en">
  
<head>
  
    <!--Style to transform text in an arc -->
    <style type=text/css>
        /* Apply the translate and rotate transformation
           for our text to look curved  */
  
        .G1 {
            transform: translate(20px, 85px) rotate(-30deg);
        }
  
        .e1 {
            transform: translate(13px, 60px) rotate(-25deg);
        }
  
        .e2 {
            transform: translate(6px, 40px) rotate(-20deg);
        }
  
        .k1 {
            transform: translate(3px, 23px) rotate(-15deg);
        }
  
        .s1 {
            transform: translate(2px, 14px) rotate(-10deg);
        }
  
        .f {
            transform: translate(1px, 8px) rotate(-5deg);
        }
  
        .o {
            transform: translate(0px, 5px) rotate(0deg);
        }
  
        .r {
            transform: translate(-1px, 8px) rotate(5deg);
        }
  
        .G2 {
            transform: translate(-2px, 14px) rotate(10deg);
        }
  
        .e3 {
            transform: translate(-3px, 25px) rotate(15deg);
        }
  
        .e4 {
            transform: translate(-6px, 40px) rotate(20deg);
        }
  
        .k2 {
            transform: translate(-14px, 60px) rotate(25deg);
        }
  
        .s2 {
            transform: translate(-20px, 80px) rotate(30deg);
        }
  
        /* An inline-block element is placed as an inline
         element (on the same line as adjacent content), 
         but it behaves like a block element  */
  
        span {
            display: inline-block;
        }
    </style>
</head>
  
<body>
    <div style="text-align: center; padding-top: 250px;
                font-size: 55px; color: green;">
  
        <!-- Declare all the characters of text 
            one-by-one, inside span tags -->
        <span class="G1">G</span>
        <span class="e1">e</span>
        <span class="e2">e</span>
        <span class="k1">k</span>
        <span class="s1">s</span>
        <span class="f">f</span>
        <span class="o">o</span>
        <span class="r">r</span>
        <span class="G2">G</span>
        <span class="e3">e</span>
        <span class="e4">e</span>
        <span class="k2">k</span>
        <span class="s2">s</span>
    </div>
</body>
  
</html>

Producción:

Texto curvo con Canvas: el elemento canvas es parte de HTML5 y permite la representación dinámica y programable de formas 2D e imágenes de mapa de bits. Este es un método relativamente más fácil para curvar texto utilizando un poco de JavaScript para manipular el elemento del lienzo y diseñarlo. Este método hace uso de las matemáticas básicas de la escuela secundaria para rotar y traducir el contexto del lienzo dentro de un ciclo y llenarlo con las letras del texto una por una. El radio del arco y el ángulo se pueden ajustar según la forma y el tamaño del arco. Este método producirá una instancia no seleccionable del texto.

Ejemplo 2:

<!DOCTYPE html>
<html lang="en">
  
<head>
    <title>Curve text using Canvas</title>
</head>
  
<body>
  
    <!-- Creating a canvas element in HTML-->
    <canvas id="canv" width="600" height="250"></canvas>
  
    <script>
  
        /*The window.onload function will run as 
        soon as the window loads in the browser */
        window.onload = function () {
  
            /* This method returns the html element that
                has the ID attribute with the specified
                value. */
            let canvas = document.getElementById("canv");
  
            /* This method returns a drawing context
                on the canvas, or null if the context
                identified is not supported. */
            let context = canvas.getContext("2d");
  
            /* It will change the style and appearance 
                of the text to make it look more geeky. */
            context.font = "50px serif";
            context.fillStyle = "green";
            context.textAlign = "center";
  
            let string = "GeeksforGeeks";
  
            let angle = Math.PI * 0.6; // in radians
            let radius = 200;
  
  
            context.translate(300, 300);
            context.rotate(-1 * angle / 2);
  
            for (let i = 0; i < string.length; i++) {
  
                /* It is worth noting that we are not
                    rotating the text,here the whole
                    context is being rotated and
                    translated, and the letters are just
                    filled in it. */
                context.rotate(angle / string.length);
                context.save();
                context.translate(0, -1 * radius);
                context.fillText(string[i], 0, 0);
                context.restore();
            }
        };
    </script>
</body>
  
</html>

Producción:

Publicación traducida automáticamente

Artículo escrito por equbalzeeshan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *