ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CSS] - SVG 이미지 사용 방법
    기타 2020. 11. 25. 01:29

    프로젝트 예제파일 )

     1) github.com/mingoogle/blog-etc-svg  

     2) git clone github.com/mingoogle/blog-etc-svg.git


    SVG ( Scalabe Vector Graphic )

      SVG 이미지 파일은 XML 문법을 기본으로 하는 문서이며 로고나 아이콘, 그래프 등 널리 사용하는 이미지 파일입니다.

      - SVG 이미지는 크기를 줄이거나 늘리더라도 화질에 영향을 받지 않습니다. 

      - 원하는 색상으로 자유롭게 적용가능합니다.

    * 일반 PNG 파일 

    이미지를 강제로 늘릴 경우 화질이 깨집니다.

     


    * SVG 파일 

    이미지를 강제로 늘려도 화질이 깨지지 않습니다.

     

     

    SVG 사용방법

    css의 filter속성을 이용하기

      - svg파일의 색상을 수정할때 이용합니다. 

     

    1. img태그를 선언합니다. 

     

    <img class="filter-orange size-m" src="image/svg_search.svg" />

     

     

    2. css의 filter속성을 사용합니다.

     

    .filter-orange{
        filter: invert(46%) sepia(98%) saturate(493%) hue-rotate(333deg) brightness(94%) contrast(94%);
    }

     

     

    svg파일 자체를 수정하기 

     

    1. 다운받은 svg파일을 직접 수정합니다. ( fill : 색상 )

     

    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="18px" height="18px"><path d="M0 0h24v24H0z" fill="none"/><path d="M0 0h24v24H0V0z" fill="none"/><path d="M18 13v7H4V6h5.02c.05-.71.22-1.38.48-2H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-5l-2-2zm-1.5 5h-11l2.75-3.53 1.96 2.36 2.75-3.54zm2.8-9.11c.44-.7.7-1.51.7-2.39C20 4.01 17.99 2 15.5 2S11 4.01 11 6.5s2.01 4.5 4.49 4.5c.88 0 1.7-.26 2.39-.7L21 13.42 22.42 12 19.3 8.89zM15.5 9C14.12 9 13 7.88 13 6.5S14.12 4 15.5 4 18 5.12 18 6.5 16.88 9 15.5 9z"/></svg>

     

     

     수정 후 html에서 해당 파일을 불러옵니다.

     

    <img src="image/svg_search.svg" />

     

     

    html에서 svg파일을 선언하여 수정하기

     

    <div class="svg_item">
         <svg xmlns="http://www.w3.org/2000/svg"
              viewBox="0 0 24 24"
              fill="green"
              width="200px" height="200px"><path d="M0 0h24v24H0z" fill="none"/><path d="M0 0h24v24H0V0z" fill="none"/><path d="M18 13v7H4V6h5.02c.05-.71.22-1.38.48-2H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-5l-2-2zm-1.5 5h-11l2.75-3.53 1.96 2.36 2.75-3.54zm2.8-9.11c.44-.7.7-1.51.7-2.39C20 4.01 17.99 2 15.5 2S11 4.01 11 6.5s2.01 4.5 4.49 4.5c.88 0 1.7-.26 2.39-.7L21 13.42 22.42 12 19.3 8.89zM15.5 9C14.12 9 13 7.88 13 6.5S14.12 4 15.5 4 18 5.12 18 6.5 16.88 9 15.5 9z"/>
         </svg>
    </div>

     

    * SVG 주의사항 

     - 대부분 브라우저는 svg파일을 지원하지만 브라우저와 브라우저 버전에 따라 SVG 파일을 지원하지 않는 경우가 있습니다. 
        ( 익스플로어 8이하, 안드로이드 2.3 이하 버전 등.. )
        이 경우 사용자에게 SVG 파일 이미지가 안보이기 때문에 별도의 작업을 통하여 이미지가 보이도록 고려하여 작업해야합니다.

     

     참고) caniuse.com/svg

    https://caniuse.com/svg

    <object> 태그 사용하기 

     - object 태그를 이용하여 svg파일을 삽입하고 로드가 안될 경우를 대비하여 img태그를 안에 삽입합니다.

     

    <object data="image/search.svg" type="image/svg+xml">
      <img src="image/search.png" />
    </object>

     

    <img> 태그의 srcset 속성 사용하기

    <img src="/image/search.png" srcset="/image/search.svg" alt="search_img">

     

    Modernizr 

     - Modernizr는 브라우저 별 (svg파일과 같은) 기능을 지원하는지 테스트 해주는 도구입니다. 
     - https://modernizr.com/

     

     

    1. Add your detects 클릭

     

     

    2. svg 체크를 한후 build 버튼을 클릭

     

     

    3. Build -> Download 버튼 클릭

     

     

    4. modernizr-custom.js 파일이 다운로드 졌다면, 프로젝트 폴더 안에 넣어줍니다. 

     

    5. html 파일 안에 해당 js파일을 선언해 줍니다.

     

    <head>
        <link rel="stylesheet" href="svg.css">
        <script src="js/modernizr-custom.js"></script>
    </head>

     

     

    6-1. SVG 파일을 지원하지 않는 브라우저라면 PNG 파일로 보여줄 수 있도록 스크립트를 작성합니다.

     - 스크립트를 이용하여 svg를 지원하지않는다면 png파일,jpg파일 등으로 보이도록 선언합니다.

     

    /*
    if (Modernizr.svg) {
      // supported
    } else {
      // not-supported
    }
    */
    
    // ex)
    if (!Modernizr.svg) {
        $("#searchSvg").css("background-image", "url(search.png)");
    }
    
    //ex) 
    
    // Check if browser can handle SVG
    // 참고 : https://coderwall.com/p/u_ngaa/fallback-svg-to-png-in-img-element
    if(!Modernizr.svg){
        // Get all img tag of the document and create variables
        var i=document.getElementsByTagName("img"),j,y;
    
        // For each img tag
        for(j = i.length ; j-- ; ){
            y = i[j].src
            // If filenames ends with SVG
            if( y.match(/svg$/) ){
                // Replace "svg" by "png"
                i[j].src = y.slice(0,-3) + 'png'
            }
        }
    }

     

    6-2. css를 사용하기

     - no-svg

     

    .no-svg .search { background-image: url(search.png); }
    .svg .search { background-image: url(search.svg); }

     

     

     

     

    감사합니다.

     

     

    " 오래 살기를 바라기 보다

       잘 살기를 바라라  "

     

    벤자민 프랭클린

     

     

     

Designed by Tistory.