절대 단위: px, pt 등
상대 단위: %, em, rem, ch, vw, vh 등
다음은 모두 절대 길이 단위이며 — 다른 것과 관련이 없으며 일반적으로 항상 동일한 크기로 간주됩니다.
단위 | 이름 | 다음과 동일함 |
---|---|---|
cm | 센티미터 | 1cm = 96px/2.54 |
mm | 밀리미터 | 1mm = 1/10th of 1cm |
Q | 4분의 1 밀리미터 | 1Q = 1/40th of 1cm |
in | 인치 | 1in = 2.54cm = 96px |
pc | Picas | 1pc = 1/16th of 1in |
pt | 포인트 | 1pt = 1/72th of 1in |
px | 픽셀 | 1px = 1/96th of 1in |
상대 길이 단위는 다른 요소 (상위 요소의 글꼴 크기 또는 viewport 크기) 와 관련
단위 | 관련사항 |
---|---|
em | 요소의 글꼴 크기. |
ex | 요소 글꼴의 x-height. |
ch | 요소 글꼴의 glyph "0" 의 사전 길이 (너비) 입니다. |
rem | 루트 요소의 글꼴 크기. |
lh | 요소의 라인 높이. |
vw | viewport 너비의 1%. |
vh | viewport 높이의 1%. |
vmin | viewport 의 작은 치수의 1%. |
vmax | viewport 의 큰 치수의 1%. |
기기나 브라우저 사이즈 등의 환경에 영향을 받지 않는 절대적인 크기로 정하는 경우
px(픽셀)
일반적인 경우
상대 단위인 rem. root의 글자 크기, 즉 브라우저의 기본 글자 크기가 1rem이며, 두배로 크게 하고 싶다면 2rem, 작게 하려면 0.8rem 등으로 조절해서 사용할 수 있습니다. 이는 사용자가 설정한 기본 글꼴 크기를 따르므로, 접근성에 유리
반응형 웹(responsive web)에서 기준점을 만들 때
반응형 웹은 디바이스의 너비(width)에 따라 유동적인 레이아웃이 적용되는 웹사이트
디바이스 크기를 나누는 기준을 보통 px
화면 너비나 높이에 따른 상대적인 크기가 중요한 경우
vw, vh
웹사이트의 보여지는 영역을 Viewport라고 합니다. 화면을 가득 채우며 딱 떨어지게 스크롤되는 사이트 -> 100vw, 100vh
static :
default
relative :
자신의 원래 자리(static)에서 정한 값만큼 위치 변경
absolute :
position: static 속성을 가지고 있지 않은 부모를 기준으로 움직입니다. 만약 부모 중에 포지션이 relative, absolute, fixed인 태그가 없다면 가장 위의 태그(body)가 기준이 됩니다.(정한 값만큼 부모상자로부터 위치 변경됨)
fixed :
뷰포트의 초기 컨테이닝 블록을 기준으로 삼아 배치/ 상단 로그인 메뉴와 좌측 내비게이션 메뉴, 우측 명예의 전당, 그리고 하단 포스트 메뉴는 항상 특정 위치에 고정되어 있습니다.
(정한 값만큼 윈도우 안에서 움직임)
sticky :
정해놓은 특정 지점을 지나면 스크롤을 해도 그 자리에 고정
박스를 벗어나는 컨텐츠 처리
overflow: auto 이용 - 스크롤을 만들 수 있다.
모든 박스의 사이즈(width,height)는 박스의 모든 여백을 포함한 사이즈이므로 아래와 같이 안의 컨텐츠의 넓이를 100%로 지정했을시 안의 컨텐츠가 빠져나오는 문제가 발생한다
#container {
width: 300px; // 324px (width + padding + border)
padding: 10px;
background-color: yellow;
border: 2px solid red;
}
#inner {
width: 100%; // 364px (width + padding + border)
height: 200px;
border: 2px solid green;
background-color: lightgreen;
padding: 30px;
}
여백과 테두리 두께를 포함한 박스 계산 법 _
*
: 모든 요소를 선택하는 셀렉터
_모든 요소를 선택해 box-sizing 속성을 추가하고, border-box라는 값을 추가합니다.
* {
box-sizing: border-box;
}
셀렉터
h1 { }
div { }
전체 셀렉터
* { }
Tag 셀렉터
section, h1 { } //( , 쉼표로 여러개 선택가능)
ID 셀렉터
#only { }
class 셀렉터
.widget { }
.center { }
attribute 셀렉터 (암기할 필요는 없습니다)
a[href] { }
p[id="only"] { }
p[class~="out"] { }
p[class|="out"] { }
section[id^="sect"] { }
div[class$="2"] { }
div[class*="w"] { }
후손 셀렉터
header h1 {}
자식 셀렉터 (후손 셀렉터와의 차이를 반드시 알고 있어야 합니다)
header > p { }
인접 형제 셀렉터
section + p { }
형제 셀렉터
section ~ p { }
가상 클래스
a:link { }
a:visited { }
a:hover { }
a:active { }
a:focus { }
요소 상태 셀렉터
input:checked + span { }
input:enabled + span { }
input:disabled + span { }
구조 가상 클래스 셀렉터 (암기할 필요는 없습니다)
p:first-child { }
ul > li:last-child { }
ul > li:nth-child(2n) { }
section > p:nth-child(2n+1) { }
ul > li:first-child { }
li:last-child { }
div > div:nth-child(4) { }
div:nth-last-child(2) { }
section > p:nth-last-child(2n + 1) { }
p:first-of-type { }
div:last-of-type { }
ul:nth-of-type(2) { }
p:nth-last-of-type(1) { }
부정 셀렉터
input:not([type="password"]) { }
div:not(:nth-of-type(2)) { }
정합성 확인 셀렉터
input[type="text"]:valid { }
input[type="text"]:invalid { }
css유용사이트
flexbox로 레이아웃을 구성한다는 것은, 박스를 유연하게 늘리거나 줄여 레이아웃을 잡는 방법
container를 꾸며줄수 있는 속성 값 , 그 안 item각각을 꾸며줄 수 있는 속성 값들 존재
중심축,반대축-> 수평,수직이냐에 따라 축 변화
flex-direction : row(column)-reverse 가능
flex-wrap : nowrap; 화면이 아무리 작아져도 아이템들이 한 줄에서 같이 작아짐(wrap:자동적으로 다음 라인으로 배치,-reverse 가능)
flex-flow:column nowrap;(위 두가지 동시에 쓰기 가능)
display 속성에 flex를 적용하는 것은 부모 요소에 적용(display: flex)
자식 요소는 flex라는 속성에 값을 적용합니다.
flex: 0 1 auto; // 자식요소에 flex 속성을 추가하지 않으면 적용되는 기본값
flex: <grow> <shrink> <basis> // 기본 크기를 바탕으로 필요에 따라 늘리거나 줄일 수 있는 값
flex-grow: 0;
flex-shrink: 1;
flex-basis: auto; // 각 값을 따로 지정할 수 있습니다.
비율에 따라 결과가 달라집니다. 부모 박스 안에 n개의 자식 박스가 있다고 가정. 각 자식 박스가 갖는 grow값의 총 합이 n이라면, grow 속성의 값을 1로 설정하는 것은 1/n 가로 또는 세로길이를 적용한다는 의미
#outer {
display: flex;
border: 1px dotted red;
padding: 10px;
}
// 모든 자식 박스의 flex-grow 속성이 0보다 큰 값을 동일하게 가지는 경우, 각 박스의 가로 길이는 동일한 비율
.box {
flex: 1 1 auto;
/*
flex: 2 1 auto;
flex: 3 1 auto;
flex: 4 1 auto;
*/
}
.target {
/* flex 값을 지정하지 않음 */
}
flex-grow가 0일 때, basis 크기를 지정하면 그 크기는 유지됩니다.
(ex) basis: 100px // 윈도우창 줄이거나 늘려도 100px 유지
target 클래스에 적용된 flex-grow 속성의 값이 1, box 클래스에 적용된 flex-grow 속성의 값이 1일 경우, grow가 적용된 전체 값은 1+1+1 = 3 ,각 자식 박스의 가로 길이는 1/3의 길이
target 클래스의 flex-grow 속성의 값이 2, box 클래스의 flex-grow 속성의 값이 1일 경우, grow가 적용된 전체 값은 2+1+1 = 4. 따라서, target 클래스를 가지지 못한 나머지 자식 박스는 1/4의 길이
width < flex-basis(동시사용시)
(flex-basis를 사용하지 않는다면) 콘텐츠가 많아 자식 박스가 넘치는 경우-> width 대신 max-width를 쓸 수 있다
중심축에서 설정
부모 박스에 justify-content 속성을 적용하면, 자식 박스를 수평으로 정렬할 수 있습니다.
flex-start
flex-end
center
space-between : 양옆 가장 바깥쪽은 화면에 딱 붙게, 가운데 space
space-around : 양옆 가장 바깥쪽은 간격 적음
space-evenly : 간격 같이
반대축에서 설정
부모 박스에 align-items 속성을 적용하면, 자식 박스를 수직으로 정렬할 수 있습니다.
flex-start
flex-end
center
align-content : 반대축의 아이템들 지정 (:space-between, center)
stretch
baseline : container크기 상관 x text위치가 균등하게
align-self: flex에서 벗어나 배치하고 싶다 (: center; 등)