ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CSS 상대단위 rem, em 알아보기 & viewport 에서의 단위 vw, vh, vmin, vmax 알아보기
    Web-app/CSS 2023. 10. 13. 21:03
    728x90

    rem, em

    rem (root em)

    root element의 font size를 나타내는 단위로, 1rem은 html element의 font size와 동일.

    일반적으로 16px이 default 값으로, 브라우저의 글꼴 크기 설정에 따라 1rem 의 값은 달라지게 됩니다.

    크롬에서 설정 페이지

    크롬에서 설정 페이지를 들어갔을 때 일반적인 글꼴 크기는 중간, 권장상태로 되어 있습니다.

    이 중간 상태에서 font-size값은 16px.

    만약 설정을 아주 크게로 변경하면 24px로 바뀝니다.

    즉 이때 1rem은 24px이 됩니다.

     

    크롬에서 글꼴 크기 설정에 다른 font-size default 값은 다음과 같습니다.

    글꼴 크기 설정 아주작게 작게 중간 크게 아주크게
    1rem 10px 12px 16px 20px 24px

     

    em

    rem의 경우 root element의 font-size에 상대적이었으나, em은 자신이 속한 element의 font-size에 상대적입니다.

    예시를 위해 이런 코드를 짜보았습니다. detail1안에 detail2안에 detail3가 있습니다.

    <div class="detail" id="detail1">
        오늘은 다카마쓰에서 사온 치쿠세이 우동 밀키트를 먹어보았습니다
        <div class="detail" id="detail2">면만드는 아조씨 친절하셨는데
            <div class="detail" id="detail3">추억이 새록새록 하고만요</div>
        </div>
    </div>

    브라우저 폰트 크기 설정을 중간으로 해준 상태에서 detail class를 2rem으로 설정하고, detail2, detail3를 각각 1.1em, 0.5em으로 설정해주었습니다.

    .detail{
        font-size: 2rem;
    }
    .detail #detail2{
        font-size: 1.1em;
    }
    .detail #detail3{
        font-size: 0.5em;
    }

    이때의 detail1, detail2, detail3의 font-size는 어떻게 될까요?!

    detail 전체 class를 2rem이므로, 중간 폰트 16px x 2 = 32px로 설정이 되고,

    밑에 child detail2의 경우 1.1em으로 설정되어 있으므로, parent의 font-size 32px x 1.1 = 35.2px이 됩니다.

    detail2의 child3의 경우 0.5em으로 설정되어 있으므로, parent인 detail2의 font-size 35.2px x 0.5 = 17.6px으로 설정됩니다.

     

    즉 em은 parent의 크기에 상대적으로 반응하게 됩니다.

    따라서 em의 경우 parent와의 관계를 따져서 사용해야 합니다.

     

    rem과 em 사용

    font-size또는 padding, margin 에 이용하면 브라우저의 폰트 크기 설정에 따라 반응할 수 있는 홈페이지를 만들 수 있을 것입니다.


    viewport 기준 단위 vw, vh, vmin, vmax

    vw (viewport width), vh (viewport height)

    현재 보고 있는 스크린 화면 (viewport)을 기준으로 width와 height를 정하는 단위

    위 예시에서 div class =test 를 하나 더 넣어주어 실험을 해보았습니다.

    <body>
        <div class="nav">navigation bar</div>
        <div class="test"></div>
        <div class="container"></div>
        <div class="content__container">
            <div class="content" id="content1">content
                <div class="detail" id="detail1">
                    오늘은 다카마쓰에서 사온 치쿠세이 우동 밀키트를 먹어보았습니다
                    <div class="detail" id="detail2">면만드는 아조씨 친절하셨는데
                        <div class="detail" id="detail3">추억이 새록새록 하고만요</div>
                    </div>
                </div>
            </div>
            <div class="content" id="content2">content</div>
        </div>
    
    </body>
    .test{
        position: fixed;
        background: rgba(0,0,0,0.5);
        width: 100vw;
        height: 100vh;
        z-index: 100;
    }

    position:fixed;

    반투명한 검정 레이어가 덮여씌워졌습니다. position property가 fixed이기 때문에 스크롤을 내려도 viewport를 기준으로 채워지기 때문에 깔끔하게 채워집니다.

     

    position:absolute;

    반면 position만 absolute로 변경하면 스크롤을 내려도 밑에는 덮히지 않습니다.

     

    vmin, vmax

    vmin의 경우 viewport의 width, height 중 더 작은 값이 적용됩니다.

    vmax의 경우 viewport의 width, height 중 더 큰 값이 적용됩니다.

     

    예시를 위해 아까 test class의 width, height 값을 다음과 같이 바꿔주었습니다.

    .test{
        position: fixed;
        background: rgba(0,0,0,0.5);
        width: 90vmin;
        height: 60vh;
        z-index: 100;
    }

    두 경우 모두 height는 viewport의 60% 정도 차지하게 되고,

    Screen size 732 x 931 px의 경우 가로가 세로보다 짧기 때문에 width는 가로를 기준으로 값이 정해집니다. (732 x 0.9 = 658.8px)

    Screen size 1553 x 931 px의 경우 세로가 가로보다 짧기 때문에 width는 세로를 기준으로 값이 정해집니다. (931 x 0.9 = 837.9px)

     

    Screen size가 931 x 931를 기점으로 width가 고정되거나 크키가 변하게 됩니다.


    Reference

     

    Rem in CSS: Understanding and Using rem Units — SitePoint

    Adrian Sandu explains the purpose and advantages of rem units, demonstrating ways to use em and rem units in CSS layouts.

    www.sitepoint.com

    728x90
Designed by Tistory.