어제밤 여독의 여파로 아침 버스에서 자면서 왔다. 혹시 몰라 중간중간 어느정도 왔나 체크했는데, 마지막에 눈을 떴을 때, 이미 내릴 정류장을 지나치고 있었다.
다행히 한정거장만 더 간거라 늦진 않았지만, 앞으로는 혹시 모를 상황을 위해 알람을 맞춰놔야겠다.
점심으로 닭볶음탕을 먹었는데 맛있음 + 가까움 + 저렴
의 콤보였다.
오늘도 TIL 작성 완료 !!!!!
웹 개발에서 가장 전통적인 측정 단위로 사용되던 절대 단위인 px
에서, 반응형 웹 디자인이 대두되면서 점차 상대 단위를 이용한 웹 사이트 스타일링이 많아지고 있다. 각 CSS 단위의 차이는 무엇인지 알아보자!
절대(absolute) 단위는 어떤 상황에서든 항상 고정된 단위를 말한다.
대표적으로 px
, pt
, 그리고 cm
, in
등이 있다.
상대(realative) 단위란 그 크기가 고정되지 않고, 어떤 기준에 따라 유동적으로 바뀔 수 있는 단위를 말한다.
대표적으로 %
, em
, rem
, vw
, vh
, 등이 있다.
px
은 웹 개발에서 사용되는 가장 전통적인 측정 단위로, 화면의 단일 점을 나타내는 절대적인 단위이다.
예를 들어 해상도가 1920x1080인 이미지가 있다면 해당 이미지의 width(너비)는 1920px이고, height(높이)는 1080px이 된다.
em
과rem
은 둘 다 CCS의font-size
속성값에 비례해서 결정되는 상대 단위이다.차이점은 어디의 font-size 속성값을 기준으로 하는가이다.
html)
html {
font-size : 16px;
}
해당 단위의 요소가 사용되고 있는 요소의 font-size 속성값이 기준이 된다.
em
은 해당 요소의 font-size
를 기준으로 하기 때문에, html아닌 div
요소의 font-size
인 20px에 비례하여 결정된다.
div {
font-size ; 20px;
width: 10em; /* 20px * 10 = 200px */
}
💡 만약 해당 요소에
font-size
속성이 없다면 ?해당 요소에
font-size
가 정의되지 않았다면, 부모의font-size
값을 그대로 상속받게 된다.따라서 위 경우에서 div 태그 안에
font-size
속성이 없다면, html의font-size
인 16px을 상속받아width: 10em 값은 16px * 10 = 160px
로 계산된다.
rem
은 루트 HTML 요소, 즉 최상위 요소인 html
태그의 font-size 속성값이 기준이 된다.
rem
은 최상위 요소인 html
요소의 font-size
에 비례하여 결정된다.
div {
font-size ; 20px;
width: 10rem; /* 16px * 10 = 160px */
}
👉 즉 rem
단위는 해당 요소의 font-size 속성과는 전혀 상관 없다.
vh와 vw는 뷰포트(Viewport, 현재 화면의 크기)의 높이와 너비에 비례해 결정된다.
즉 문서 또는 모바일 기기에서 볼 수 있는 부분의 크기가 기준이 된다.
1vh는 실제 높이값의 1/100으로, 예를 들어 현재 화면의 높이가 1000px이라면 1vh는 10px이 된다.
- vw : Viewport 너비의 1% (1/100)
- vh : Viewport 높이의 1% (1/100)
부모 요소의 size에 비례해 결정된다.
<body>
<div>
<p>나는 크기가 얼마일까?</p>
<div>
</body>
부모 요소인 div의 크기가 100px이라면 해당 size에 비례한 %만큼의 크기를 가지게 되므로, p태그의 크기는 70px이 된다. (단, body의 margin이 0이라고 가정했을 때)
div {
width : 100px;
}
p {
width : 70%; /* 100px * 70% = 70px */
}
다양한 디바이스에서 웹 브라우징을 지원하면서, 디바이스의 뷰포트 너비에 따라 유연하게 컨텐츠를 배치하는 기술이 점점 중요해졌다. 그리고 이를 위해 미디어 쿼리가 등장하게 되었다.
@media screen and (사이즈조건){
//조건에 맞는 기기에 적용할 CSS
}
미디어 유형 | 설명 |
---|---|
all | 기본값, 모든 미디어 유형 장치에 사용 |
screen | 컴퓨터화면, 태블릿, 스마트폰 등에 사용하는 뷰포트 사이즈 설정 |
프린터(인쇄) 장치에 사용, 인쇄용 CSS를 설정 | |
내용1 | 스크린리더기가 페이지를 소리내어 읽을 때 사용 |
※ 스크린리더기 : 시각장애인 분들을 위해 웹컨텐츠 읽어주는 프로그램
뷰포트 너비에 따른 CSS를 적용할 화면의 크기를 중단점(breakpoint)라고 한다.
중단점이 세분화될수록 더 많은 디바이스 환경에서 유연하게 반응할 수 있으나 현실적인 문제가 있기 때문에, 최소 모바일, 태블릿, PC 3분기로 나누어 처리하는 경우가 많다.
min-width를 사용한다.
/* Default CSS */
/* Mobile - Portrait(세로) */
/* Mobile - Landscape(가로) */
@media (min-width: 576px) {}
/* Tablet */
@media (min-width: 768px) {}
/* Desktop */
@media (min-width: 992px) {}
/* Desktop (Large) */
@media (min-width: 1200px) {}
max-width를 사용한다.
/* Mobile - Portrait */
@media (max-width: 575px) {}
/* Mobile - Landscape */
@media (max-width: 767px) {}
/* Tablet */
@media (max-width: 991px) {}
/* Desktop */
@media (max-width: 1199px) {}
/* Default CSS */
min-width, max-width 모두 사용하며, 덮어쓰기(override)를 사용하지 않는다.
/* Mobile - Portrait */
@media (max-width: 575px) {}
/* Mobile - Landscape */
@media (min-width: 576px) and (max-width: 767px) {}
/* Tablet */
@media (min-width: 768px) and (max-width: 991px) {}
/* Desktop */
@media (min-width: 992px) and (max-width: 1199px) {}
/* Desktop (Large) */
@media (min-width: 1200px) {}
: 외부 링크 혹은 문서가 아닌, 동일 문서 내에서 특정 위치(target 요소)로 이동할 때, 앵커(Anchor)
태그에 :target
가상 클래스 선택자를 이용해 스타일을 적용할 수 있다.
:target
으로 이동하면 URL끝에 해당
a:target {
css 속성
}
// html
</nav>
// 사이드바 열기
<a href="#side-drawer" class="menu-btn">
<span></span>
<span></span>
<span></span>
</a>
</header>
// 사이드바 닫기
<aside id="side-drawer">
<header>
<a href="#" class="menu-btn">
<span></span>
<span></span>
<span></span>
</a>
</header>
<nav>
/* css */
#side-drawer {
width: 100%;
height: 100%;
background-color: rgb(29, 26, 27);
position: fixed;
top: 0;
left: 0;
display: none;
}
#side-drawer:target {
display: block;
}
※ 참고자료