[CSS] 삽입된 유튜브 동영상을 반응형(Responsive)으로 만들기

워드프레스 블로그를 사용하면서 유튜브 동영상을 주소만 넣으면 아주 간단하게 삽입할 수 있습니다. 하지만 이 유튜브 동영상을 사용자에게 보여주는 과정에서 문제가 발생하는데 크기가 자동으로 조절 되지 않고 굉장히 크거나 작게 표현되는 것입니다.

구글링 해보니 그 문제점을 CSS 로 해결 할 수 있는 방법이 있어 기록으로 남겨 봅니다.

(워드프레스의 경우를 예로 하고 있지만 유튜브 동영상이 임베드 된 경우면 거의 비슷할테니 같은 방식을 적용하면 워드프레스가 아닌 다른 플랫폼에도 적용 가능 할 것입니다.)

삽입된 유튜브 동영상의 구조

삽입된 유튜브 동영상의 경우 아래와 보통 아래와 같은 구조로 되어 있습니다.

<span class="embed-youtube">
    <iframe ... >
    </iframe>
</div>

실제 유튜브 요소는 iframe 에 들어 있고, 그 요소를 embed-youtube 라는 클래스를 가진 부모요소가 감싸고 있는 형식입니다.

유튜브를 반응형으로 만들기

유튜브를 반응형으로 만들기 위한 CSS 코드는 아래와 같습니다.

.embed-youtube {
    position: relative;
    width: 100%;
    height: 0;
    padding-bottom: 56.25%;
}

.embed-youtube iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

차근차근 하나씩 알아봅시다.

.embed-youtube 의 크기를 반응형으로

.embed-youtube {
    position: relative;
    width: 100%;
    height: 0;
    padding-bottom: 56.25%;
}

일단 부모요소의 크기를 반응형으로 만들어야 합니다. width100% 로 지정해주고, height0으로 만듭니다. 그런데 이렇게 하면 사실상 크기는 0이잖아요? 대신에 padding-bottom56.25%(16:9 비율로 반들어주기 위해)로 지정해줌으로써 .embed-youtube 의 크기를 유동적으로 만들어 줍니다.

iframe 을 부모요소의 크기에 맞게 조절하기

.embed-youtube iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

부모요소의 크기가 동적으로 변함에따라 iframe 이 부모요소의 크기에 맞게 조절 되도록 만들어줍니다.

보통의 경우라면 iframe.embed-youtube 크기와 상관없이 마음대로 표시 되기 때문에 크기가 종속적으로 변하도록 하기 위해서 positionabsolute 로 지정합니다. iframe 에게 absolute 가 적용되도록 하기 위해서 .embed-youtubepositionrelative 로 지정해주는 것입니다.

(position 에 대한 더욱 자세한 정보는 포스트 하단의 링크를 참고 하세요)

이제 iframe 의 크기를 .embed-youtube 와 일치하도록 만들기 위해 widthheight100%로 지정해주면 유튜브 동영상이 고정된 크기가 아닌 유동적으로 변할 수 있게 됩니다.


위에서도 언급했지만 이러한 경우는 비단 워드프레스를 사용할 때 뿐만이아닌 비슷한 구조를 가진 모든 경우에 CSS 를 통해 수정할 수 있습니다.

끝.