3forges / juste-un-curieux

Un site internet pour les curieux...
MIT License
0 stars 1 forks source link

svg styling #32

Closed Jean-Baptiste-Lasselle closed 9 months ago

Jean-Baptiste-Lasselle commented 11 months ago

Je n'arrive pour l'instant pas à modifier comme je le souhaite le positionnement de l'image SVG par rapport au viewBox https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox

BorisTherin commented 11 months ago

Pour ce que j'en comprend:

comme pour une css background, on peut cibler une partie precise d'une image pour ne render que cette partie (permettant un seul asset pour differents etat d'un bouton par exemple)

le viewbox defini la taille du 'canvas' et sa position de depart, ainsi un rectangle plein de dimension (50,50) occupera tout le rendu svg avec un viewbox='0 0 50 50' , occupera le quart haut gauche avec un viewbox(0 0 100 100) on pourra aussi decaler le rendu vers la gauche avec un viewbox="25 0 50 50", vers le bas avec un viewbox="0 25 50 50"

pour illustrer avec notre logo svg:

<svg version="1.1" 
    xmlns="http://www.w3.org/2000/svg" 
    xmlns:xlink="http://www.w3.org/1999/xlink" 
    x="0px" y="0px"
    viewBox="0 0 2000 2000" 
    style="enable-background:new 0 0 2000 2000;" 
    xml:space="preserve">

notre SVG a une resolution de 2000px * 2000px, nos paths se 'déplacent' dans cette résolution, (M1364.81,1054.2), si j'ampute la balise svg de son attribut viewport, le browser m'affiche une image vide (ou une portion vide tout le moins).

cela peut surprendre, car le SVG est censcé etre vectoriel, lui assigner des valeures en pixel semble contraire a la logique, cependant, pouvoir intervenir sur ces valeures reste logique coté "frontend", & herité de nos methodes images.

Ensuite SVG ca peut se complexifier a loisir, je pourrais manipuler 2 svg de resolutions differentes dans ma page, dans un 3eme svg & faire fit des differences de resolutions en fixant le viewbox des svg ressources.

je ne sais pas si l'on peut faire des path en % plutot qu'en pixel, mais encore une fois si on souhaite intervenir sur l'echelle, la position, le viewbox sera notre porte d'entrée.

ref: https://www.geeksforgeeks.org/svg-viewbox-attribute/

& pour revenir a nos moutons, qu'est-ce que souhaite exactement a propos de ce logo dans la page ? tu voudrais zoomer un peu ? le baisser ? pour un zoom qui occupera 'correctement l'espace': viewBox="500 500 1000 1000"

BorisTherin commented 11 months ago

exemple de tweaks pour une svg "recadrée" & 100% paramétrable inline via des variables css pour Justin Curieux.01.svg:

<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" 
    xmlns="http://www.w3.org/2000/svg" 
    xmlns:xlink="http://www.w3.org/1999/xlink" 
    x="0px" y="0px"
    viewBox="500 500 1000 1000" 
    style="enable-background:new 500 500 1000 1000;" 
    xml:space="preserve">
<defs>
    <style type="text/css">
        :root {
            --color-cat-inner: url(#gradientCat);
                        --gradient-cat-cy: 43%;
                        --gradient-cat-cx: 58%;
                        --gradient-cat-fr: 0%;
                        --gradient-cat-primary-color: #ff8001;
                        --gradient-cat-primary-offset: 58%;
                        --gradient-cat-secondary-color: #B45400;
                        --gradient-cat-secondary-offset: 100%;
            --color-cat-stroke: #535353;
            --color-book-inner: #535353;
            --color-book-stroke: #353535;
            --color-page-inner: #cdcdcd;    
        }
        .chat {
            fill: var(--color-cat-inner);
            stroke: var(--color-cat-stroke);
        }
        .couverture {
            fill: var(--color-book-inner);
            stroke: var(--color-book-stroke);
        }
        .page {
            fill: var(--color-page-inner)
        }
    </style>
    <radialGradient cy="var(--gradient-cat-cy)" cx="var(--gradient-cat-cx)" fr="var(--gradient-cat-fr)" id="gradientCat">       
        <stop offset="var(--gradient-cat-primary-offset)" stop-color="var(--gradient-cat-primary-color)" />
        <stop offset="var(--gradient-cat-secondary-offset)" stop-color="var(--gradient-cat-secondary-color)" />
    </radialGradient>
</defs>
<g>
    <!-- CHAT -->
    <path class="chat" 
        d="M1364.81,1054.2c-18.91-44.7-50.44-82.66-90.16-109.49c-39.7-26.84-87.7-42.53-139.18-42.52
        c-11.35,0-20.55,9.2-20.55,20.55c0,11.35,9.2,20.55,20.55,20.55v0c28.75,0,56.03,5.82,80.88,16.32
        c37.27,15.76,69.04,42.14,91.45,75.31c22.41,33.19,35.47,73.07,35.48,116.18c0,28.75-5.82,56.03-16.32,80.88
        c-15.76,37.27-42.14,69.04-75.31,91.45c-33.19,22.41-73.07,35.47-116.18,35.48c-0.2,0-0.4,0-0.6,0
        c23.11-61.53,53.79-182.73-3.35-298.15C1053.71,911.11,902.47,903.7,902.47,903.7c-1.95-78.5,67.07-45.25,56.07-120.15
        c-0.85-5.81-3.43-11.37-7.74-15.34c-8.8-8.11-14.44-22.38-19.33-50.93c-5.87-34.26-79.3-47.97-79.3-47.97
        c4.89-47.48-15.13-69.31-15.13-69.31c-284.5,248.37-185.9,407.62-162.24,564.45c25.9,127.48-5.93,188.74-5.93,188.74
        c-49.05,4.01-49.49,46.82-49.49,46.82h497.48h0c6.51,0,12.72,0,18.63,0c0,0,0,0,0.01,0c0.01,0,0.02,0,0.03,0
        c19.49,0,35.53,0,46.63,0c6.63,0,12.52-3.16,16.27-8.04c11.68-3.04,23.02-6.9,33.96-11.53c44.7-18.91,82.66-50.44,109.49-90.16
        c26.84-39.7,42.53-87.7,42.52-139.18C1384.38,1116.78,1377.42,1083.99,1364.81,1054.2z"/>
    <!-- COUVERTURE LIVRE -->
    <path class="couverture" 
        d="M910.48,860.71L910.48,860.71c-37.52,0-71.44,22.3-86.33,56.74L615.62,1400h133.98l140.46-332.1l11.06-26.17l9.35-22.08
            l9.35,22.08l11.06,26.17l140.46,332.1h133.98L996.8,917.45C981.92,883.01,947.99,860.71,910.48,860.71z"/>
    <!-- PAGES -->
    <polygon class="page" 
        points="910.51,1177.84 816.76,1399.47 839.15,1399.3 910.51,1230.55 981.87,1399.3 1004.24,1399.47"/>
    <polygon class="page" 
        points="910.49,1072.38 771.98,1399.82 794.37,1399.65 910.49,1125.1 1026.61,1399.65 1048.97,1399.82"/>
</g>
</svg>
Jean-Baptiste-Lasselle commented 9 months ago

On a réglé la question