๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Lect & Tip/html, css, scss

์ธ๋„ค์ผ ์ด๋ฏธ์ง€ ๋น„์œจ ์œ ์ง€ ์˜์—ญ์— ๊ฝ‰ ์ฐจ๊ฒŒ ์ด๋ฏธ์ง€ ์ž๋ฅด๊ธฐ ํ•œ ํ›„ ๊ฐ€์šด๋ฐ ์ •๋ ฌ CSS ๋ฐ jquery ๊ฐ€๋กœ์„ธ๋กœ ๋น„์œจ

by ๋‚ฏ์„ ๊ณต๊ฐ„2019 2023. 10. 6.

๋ชฉ์ฐจ

    โœˆ ์ธ๋„ค์ผ ์ด๋ฏธ์ง€ ๋น„์œจ ์œ ์ง€ ์˜์—ญ์— ๊ฝ‰ ์ฐจ๊ฒŒ ์ด๋ฏธ์ง€ ์ž๋ฅด๊ธฐ ํ•œ ํ›„ ๊ฐ€์šด๋ฐ ์ •๋ ฌ CSS ๋ฐ jQuery ๊ฐ€๋กœ์„ธ๋กœ ๋น„์œจ

    ์›น์‚ฌ์ดํŠธ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์ž‘ํ•˜๋ฉด์„œ ์ด๋ฏธ์ง€์˜ ๋น„์œจ์ด๋‚˜ ํฌ๊ธฐ๋ฅผ ๋งž์ถ”๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•œ ์ž‘์—… ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ์ธ๋„ค์ผ์ด๋‚˜ ๋Œ€ํ‘œ ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ๊ณ ์ •๋œ ์˜์—ญ์— ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์™€ ๋น„์œจ์˜ ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•  ๋•Œ, ๊ทธ ์ด๋ฏธ์ง€๋ฅผ ์˜์—ญ์— ๊ฝ‰ ์ฐจ๊ฒŒ ๋ณด์—ฌ์ฃผ๋ฉด์„œ๋„ ๋„˜์น˜๋Š” ๋ถ€๋ถ„์„ ์ž˜๋ผ๋‚ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ด๋ฏธ์ง€์˜ ๊ฐ€๋กœ์™€ ์„ธ๋กœ ๋น„์œจ์„ ๊ณ ์ •๋œ ์˜์—ญ์— ๋งž์ถ”๋ ค๋ฉด, ์„œ๋ฒ„์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์ž˜๋ผ๋‚ด๊ฑฐ๋‚˜ ๋ฆฌ์‚ฌ์ด์ง•ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์€ ์›๋ณธ ์ด๋ฏธ์ง€์˜ ํ’ˆ์งˆ์„ ์†์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, CSS๋‚˜ jQuery๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์›ํ•˜๋Š” ๋น„์œจ์— ๋งž๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    CSS๋ฅผ ํ™œ์šฉํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

    ๋จผ์ €, ์ด๋ฏธ์ง€๋ฅผ ๊ฐ์‹ธ๋Š” ์™ธ๋ถ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ , ์ด ์ปจํ…Œ์ด๋„ˆ์˜ ๋น„์œจ์„ ์ •ํ•ด์ค๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 16:9 ๋น„์œจ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด, ์ปจํ…Œ์ด๋„ˆ์˜ padding-top ๊ฐ’์„ 56.25%๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ, ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด position: absolute์™€ transform ์†์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ์ด๋ฏธ์ง€์˜ ๊ฐ€๋กœ๋‚˜ ์„ธ๋กœ ์ค‘ ์งง์€ ๋ณ€์˜ ๊ธธ์ด๋ฅผ 100%๋กœ ์„ค์ •ํ•˜์—ฌ ์ด๋ฏธ์ง€๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์— ๊ฝ‰ ์ฐจ๊ฒŒ ๋ณด์ด๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

    jQuery๋ฅผ ํ™œ์šฉํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

    ์ด๋ฏธ์ง€์˜ ๊ฐ€๋กœ์™€ ์„ธ๋กœ ์ค‘ ์–ด๋Š ์ชฝ์ด ๋” ๊ธด์ง€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” JavaScript๋‚˜ jQuery์˜ ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€์˜ ๊ฐ€๋กœ์™€ ์„ธ๋กœ ๋น„์œจ์„ ๋น„๊ตํ•˜์—ฌ, ๊ฐ€๋กœ๊ฐ€ ๋” ๊ธด ์ด๋ฏธ์ง€์—๋Š” landscape ํด๋ž˜์Šค๋ฅผ, ์„ธ๋กœ๊ฐ€ ๋” ๊ธด ์ด๋ฏธ์ง€์—๋Š” portrait ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, CSS์—์„œ ํ•ด๋‹น ํด๋ž˜์Šค์— ๋”ฐ๋ผ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ธ๋„ค์ผ์ด๋‚˜ ๋Œ€ํ‘œ ์ด๋ฏธ์ง€์˜ ๋น„์œจ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์›๋ณธ ์ด๋ฏธ์ง€์˜ ํ’ˆ์งˆ์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ์›น ๊ฐœ๋ฐœ์—์„œ ์ค‘์š”ํ•œ ์ž‘์—… ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์œ„์—์„œ ์„ค๋ช…ํ•œ CSS์™€ jQuery๋ฅผ ํ™œ์šฉํ•œ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ์ด ์ž‘์—…์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    css

    .featImgWrap {
      width: 380px;
    }
    
    .featImgWrap {
      position: relative;
      padding-top: 56.57%;
      /* 16:9 ratio */
      overflow: hidden;
    }
    
    
    .featImgWrap .featImage {
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      -webkit-transform: translate(50%, 50%);
      -ms-transform: translate(50%, 50%);
      transform: translate(50%, 50%);
    }
    
    .featImgWrap .featImage img {
      position: absolute;
      top: 0;
      left: 0;
      max-width: 100%;
      height: auto;
      -webkit-transform: translate(-50%, -50%);
      -ms-transform: translate(-50%, -50%);
      transform: translate(-50%, -50%);
    }
    
    .featImgWrap .featImage img.landscape {
      max-height: 100%;
      height: 100%;
      max-width: none;
    }
    
    .featImgWrap .featImage img.portrait {
      max-width: 100%;
      width: 100%;
      max-height: none;
    }

    jquery 

    $(document).ready(function () {
    
        // feat image ratio size
        $('.featImage > img').each(function (index, item) {
            if ($(this).height() / $(this).width() < 0.567) {
                $(this).addClass('landscape').removeClass('portrait');
            } else {
                $(this).addClass('portrait').removeClass('landscape');
            }
        });
        $('#programModalSummary').on('shown.bs.modal', function (e) {
            $('#programModalSummary .featImage > img').each(function (index, item) {
                if ($(this).height() / $(this).width() < 0.567) {
                    $(this).addClass('landscape').removeClass('portrait');
                } else {
                    $(this).addClass('portrait').removeClass('landscape');
                }
            });
        })
    
    });
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€