Responsive Web - boostcampwm-2022/web36-Japari GitHub Wiki

Responsive Web

  • ๊ฒŒ์ž„ ํ”Œ๋žซํผ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋“ค์ด ํ™”๋ฉด์„ ๋ณด์•˜์„ ๋•Œ, ์ •๋ณด๊ฐ€ ํ•œ ๋ˆˆ์— ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋ชจ๋‘ ํ•œ ํ™”๋ฉด์— ๋“ค์–ด์˜ค๊ฒŒ๋” ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ€๋กœ 100rem, ์„ธ๋กœ 62rem์„ ๊ธฐ์ค€์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ํ™”๋ฉด ๋‚ด์— ๋ชจ๋‘ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋„๋ก html์˜ font-size๋ฅผ ๋ทฐ ํฌํŠธ์˜ ์ƒ๋Œ€ ํฌ๊ธฐ๋กœ ์„ค์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    * {
    	font-family: "LINESeed KR";
    	font-size: max(8px, min(1vw, 100vh / 62));
    }
    

    ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ ํฌ๊ธฐ

    image

  • ์ด๋ ‡๊ฒŒ ํ–ˆ์„ ๋•Œ, ์บ์น˜๋งˆ์ธ๋“œ์˜ canvas ํฌ๊ธฐ ๋˜ํ•œ ๋ฐ˜์‘ํ˜•์œผ๋กœ ๋ฐ”๊พธ์–ด์ฃผ์–ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

    • resize ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚  ๋•Œ, canvas ์‚ฌ์ด์ฆˆ๋ฅผ ๋ถ€๋ชจ ์š”์†Œ์˜ ์‚ฌ์ด์ฆˆ๋กœ ๋งž์ถ”์–ด canvas์˜ ํฌ๊ธฐ ๋˜ํ•œ ์กฐ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

      const resizeCanvas = () => {
        if (!canvasRef.current) return;
        const canvas = canvasRef.current;
      
        if (canvas.parentElement) {
          canvas.width = canvas.parentElement.clientWidth;
          canvas.height = canvas.parentElement.clientHeight;
        }
      };
      
    • ๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ, canvas์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์บ”๋ฒ„์Šค ์•ˆ์˜ ๊ทธ๋ฆผ๋“ค์ด ๋ชจ๋‘ ์‚ฌ๋ผ์ง„ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ž„์˜์˜ ์บ”๋ฒ„์Šค ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ•ด๋‹น ์บ”๋ฒ„์Šค์— ํ˜„์žฌ ๊ทธ๋ฆผ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ , ๊ธฐ์กด ์บ”๋ฒ„์Šค์˜ ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝํ•œ ๋’ค, ๋‹ค์‹œ ์˜ฎ๊ธฐ๋Š” ์‹์œผ๋กœ ๋กœ์ง์„ ์ž‘์„ฑํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

      image

      const resizeCanvas = () => {
        if (!canvasRef.current) return;
        const canvas = canvasRef.current;
      
        const ctx = getContextObject();
      
        const canvasBack = document.createElement("canvas");
        canvasBack.width = canvas.width;
        canvasBack.height = canvas.height;
        const ctxBack = canvasBack.getContext("2d");
        ctxBack?.drawImage(canvas, 0, 0);
      
        if (canvas.parentElement) {
          canvas.width = canvas.parentElement.clientWidth;
          canvas.height = canvas.parentElement.clientHeight;
      
          ctx.drawImage(canvasBack, 0, 0, canvas.width, canvas.height);
        }
      
      	...
      };
      

      ํ™”๋ฉด ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์œ ์ง€๋˜๋Š” ์บ”๋ฒ„์Šค์˜ ๊ทธ๋ฆผ

      image