(html은 attributes)
화면에 코드가 어떻게 그려질지 상상할 수 있는 능력이 중요하다.
요소의 가로/세로 너비
<span></span>
<div></div>
<!-- html -->
<div class="parent">
<div class="child"></div>
</div>
/* css */
.parent {
width: 100px;
height: 50px;
background-color: royalblue;
}
.child {
/* width 기본값: 부모 요소의 가로 너비만큼 */
height: 25px;
background-color: orange;
}
요소의 가로, 세로 너비의 상한
/* css */
.parent {
width: 100px;
height: 50px;
background-color: royalblue;
}
.child {
max-width: 50px;
height: 25px;
background-color: orange;
}
요소의 가로, 세로 너비의 하한
/* css */
.parent {
width: 100px;
height: 50px;
background-color: royalblue;
}
.child {
min-width: 125px;
height: 25px;
background-color: orange;
}
<html></html>
) 요소의 글꼴 크기<!-- html -->
<div class="parent">
<div class="child_em"></div>
<div class="child_rem"></div>
</div>
/* css */
.parent {
width: 160px;
height: 50px;
background-color: royalblue;
font-size: 8px;
}
.child_em {
width: 10em; /* 상속에 의한 글꼴 크기 8px * 10 = 80px */
height: 50%; /* 부모 요소 세로 너비의 50% */
background-color: orange;
}
.child_rem {
width: 10rem; /* 루트 요소 글꼴 크기 16px * 10 = 160px */
height: 50%;
background-color: red;
}
넘겨주는 값의 갯수에 따라 여러 속성에 값을 부여할 수 있는 속성
요소의 외부 여백을 지정하는 단축 속성
<!-- html -->
<div class="container">
<div class="item_0"></div>
<div class="item_1"></div>
</div>
/* css */
.container .item_0 {
width: 100px;
height: 100px;
background-color: orange;
border: 4px solid red;
margin: 20px;
}
.container .item_1 {
width: 100px;
height: 100px;
background-color: orange;
border: 4px solid red;
margin-left: 20px;
margin-top: -50px; /* 음수값 margin */
}
margin이 음수인 요소는 요소 경계를 넘어 밀려 들어가게된다.
아래 그림에서는 아래의 div요소의 경계가 안으로 밀려들어갔으나 나중에 선언된 요소이므로 위에 보이는 것.
요소의 내부 여백
<!-- html -->
<div class="container">
<div class="item"></div>
<div class="item"></div>
</div>
.container .item {
width: 50px;
height: 50px;
background-color: royalblue;
border: 5px solid orange;
}
.container .item:first-child {
padding: 20px;
}
요소의 테두리 선을 지정하는 단축 속성
padding과 마찬가지로 크기가 커진다.
border: 선-두께 선-종류 선-색상;
개별 속성
border-width: 선 두께
단축 속성: margin, padding과 동일
속성값
border-style: 선 종류
단축 속성: margin, padding과 동일하게 방향별로 선의 종류를 지정할 수 있다.
속성값
border-color: 선 색상
단축 속성: 방향별로 선의 색상 지정 가능
속성값
border-방향-속성
요소의 각 방향마다 개별 테두리 스타일 적용 가능
ex)
border-top: 두께 종류 색상
border-left-width: 두께;
border-right-style: 종류;
border-bottom-color: 색상;
요소 모서리를 둥굴게 깎아낸다.
속성값
단위: px, em, vw 등
border-radius: 10px;
반지름 10px인 원을 요소의 두 모서리에 밀착시킨 후 원의 테두리를 따라 요소를 깎아낸다.
정사각형 요소의 경우, 요소 크기값의 절반을 입력하면 원이 된다.
단축 속성
border-radius: 모든꼭지점속성값;
border-radius: 좌상값 우상값 우하값 좌하값;
: 좌상부터 시계방향/* css */
div {
width: 100px;
height: 100px;
background-color: royalblue;
border-radius: 10px 20px 30px 40px;
}
요소의 크기 계산 기준을 지정한다.
속성값
content-box
: 요소의 내용으로 크기 계산 / 기본값border-box
: 요소의 내용 + padding + border<!-- html -->
<div>hello</div>
<div>hello</div>
/* css */
div {
width: 100px;
height: 100px;
background-color: royalblue;
color: white;
border: 4px solid orange;
padding: 20px;
}
div:first-child {
box-sizing: content-box;
}
div:nth-child(2) {
box-sizing: border-box;
}
윗박스 box-sizing: content-box;
아랫박스 box-sizing: border-box;
요소의 크기보다 내용이 많아 넘칠때, 넘치는 내용을 어떻게 보여줄지 제어하는 단축 속성
속성값
<div class="parent">
<div class="child">
<div class="text"><--overflow--></div>
</div>
</div>
.parent {
width: 200px;
height: 150px;
background-color: green;
margin: 20px;
overflow: visible;
}
.child {
width: 300px;
height: 100px;
background-color: black;
}
.text {
color: white;
padding: 84px 0 0 200px;
}
?: 21/09/28 - overflow: scroll;
이어도 넘치는 내용이 없으면 스크롤바 생성되지 않음 (우분투 / 웨일 브라우저)
단축 속성
overflow: xy축값;
overflow: x축값 y축값;
개별 속성
가로, 세로 축별로 overflow 설정
overflow-x
overflow-y
요소마다 어떤 형식으로 화면에 출력할지 설정 - block, inline, inline-block, ...
속성값
<span>Hello world!</span>
span {
width: 120px;
height: 30px;
background-color: royalblue;
color: white;
display: block;
}
span 요소의 가로, 세로 너비가 요소 내용에 맞춰지지 않고 지정한 크기대로 설정됨
요소의 투명도
속성값
속성값
속성값
속성값
속성값
지정한 높이의 중간에 줄이 정렬된다.
p {
...
font-size: 16px;
font-height: 2;
}
font-size의 두배인 32px의 줄 높이를 가지고 세로축 정 가운데에 줄이 위치
속성값
font-family: 글꼴1, "글-꼴-2", "글 꼴 3", ..., 글꼴계열;
속성값
속성값
속성값
속성값
속성값
속성값
url("이미지경로")
: 이미지 경로 입력속성값
속성값
요소 좌측 상단이 기본 위치
background-position: left;
background-position: bottom 10px right 20px;
background-position: 25px 75px;
단축속성
background-position: center;
background-position: x속성값 y속성값;
속성값
단축속성
background-size: x크기;
: 비율 유지한채로 가로를 입력값에 맞춤background-size: x크기 y크기;
속성값
속성값
속성값 - relative
원래 요소의 위치를 기준으로하여 요소 배치
속성값 - absolute
위치 상 부모 요소를 기준으로 요소 배치
(위치 상 부모요소?: position의 속성값이 static(기본값)이 아닌 가장 가까운 조상 요소)
다른 형제 요소들과 상호작용할 필요가 없어져 다른 요소들의 위치에 영향을 주지 않아 구조가 무너진다.
속성값 - fixed
뷰포트를 기준으로 요소 배치
absolute와 마찬가지로 다른 형제 요소들과 상호작용하지 않게된다.
스크롤 이동에 관계없이 위치가 고정된다.
relative는 실제로 사용하기보다는 부모 요소에 position 속성을 선언하기에 적당하다.
absolute, fixed의 경우 다른 요소들과 상호작용을 하지 않게되며 구조가 무너지게된다. 구조상의 부모 요소를 위치 상의 부모 요소로 만들때도 absolute, fixed 값을 사용하면 구조가 무너지게 될 수 있다. 따라서 relative 속성값을 부여하는게 무난하다.
position 속성값이 absolute 또는 fixed인 요소는 display 속성값이 block으로 변경된다.
<!-- html -->
<span>123</span>
span {
width: 100px;
height: 100px;
background-color: royalblue;
color: white;
font-size: 40px;
position: absolute;
}
인라인 요소인 span 요소가 width, height 속성값이 적용됨 = block 요소로 출력되었다.
position과 함께 사용되는 속성
속성값
ex) left: 20px;
: "왼쪽에서부터" 20px 이동 = 오른쪽으로 20px 이동
어떤 요소가 더 위에 위치할지 판단하는 기준
ex) 겹쳐진 두 요소가 모두 position 속성이 선언되었다면 z-index가 높은 요소가 위에 위치한다.
ex) 겹쳐진 두 요소 중 첫번째 요소만 position 속성이 선언되었다면 position 속성이 없는 두번째 요소는 첫번째 요소보다 z-index 속성값이 높던, html에서 나중에 선언되었던 첫번째 요소의 위에 위치할 수 없다.
ex) 겹쳐진 두 요소 모두 postion 속성값이 선언되지 않았다면 z-index 속성값을 html 구조상의 순서를 따진다. z-index 속성값도 같은 경우 html 구조상의 순서를 따진다.
속성값
1차원 레이아웃 - 수직, 수평
display: flex;
display 속성값이 flex인 요소를 flex container
flex container의 자식 요소들은 flex item
속성값
<!-- html -->
<span>1</span>
<span>2</span>
<span>3</span>
/* css */
span {
background-color: greenyellow;
display: flex;
margin: 4px;
}
span 요소지만 display: flex;
: 블록 요소 특성 획득, 세로로 배치됨
<!-- html -->
<div>hahaha</div>
<div>hohoho</div>
<div>hehehe</div>
/* css */
div {
background-color: royalblue;
border: 4px solid green;
display: inline-flex;
}
div 요소지만 display: inline-flex;
: 인라인 요소 특성, 가로로 배치됨.
속성값
flex container에 선언. flex item 정렬 축, 순서 정의
flex-direction: row;
✅ flex는 주로 수평 정렬에 사용된다.
속성값
속성값 nowrap / 기본값
.container {
width: 400px;
height: 200px;
background-color: royalblue;
display: flex;
}
.container .item {
width: 100px;
height: 100px;
background-color: greenyellow;
border: 4px dashed green;
}
한줄에 모두 표현하여 width, height가 100px인 박스들이 찌그러짐
속성값 wrap
한줄에 표현할 때 부모 요소를 벗어나는 요소가 생기면 줄바꿈
속성값
예제 이미지는 flex-direction: row;
기준
속성값
속성값
align-content: stretch;
와 동일행의 높이는 동일하고 각 행 내에서의 item의 정렬에 관여한다.
여러 줄을 제어할때는 align-content, 한 줄을 제어할때는 align-items 사용
한 줄 내에서 주 축 배치: justify-content / 교차 축 배치: aling-items
.container {
...
display: flex;
justify-content: center;
align-items: center;
}
속성값
html의 요소 순서를 바꾸지 않고도 요소의 배치 순서를 변경할 수 있다.
속성값
flex item 배치 후 남은 공간을 각 item들이 flex-grow값에 비례하여 나눠 갖는다.
item 가로 너비 50px
3개를 배치하면 남는 공간은 가로 150px
남은 공간 150px을 각 item의 flex-grow값에 비례해서 나눠 갖는다.
0 : 1 : 14 = 0px : 10px : 140px / 총합 150px
최종적인 item들의 가로 너비는 50px, 60px, 190px이 된다.
속성값
공간이 부족하여 flex item이 작아져야할때 각 item들은 flex-shrink값에 비례하여 크기를 감소시킨다.
item 가로 너비 100px
3개를 배치하면 300px이 필요. 하지만 container의 가로 너비는 200px
각 item이 flex-shrink값에 비례하여 너비를 감소시켜 부족한 100px을 상쇄시킨다.
2 : 3 : 5 = 20px : 30px : 50px / 총합 100px
각 item은 20px, 30px, 50px 만큼 너비를 줄여야한다.
최종적인 item들의 가로 너비는 80px, 70px, 50px이 된다.
flex container의 여백 분배시에 item 자체의 크기를 특정한 값으로 덮어씌울 수 있다.
속성값
예제
flex-basis: auto;
: item의 크기 = 요소 내용의 크기 또는 지정한 크기
flex-basis: 0;
flex-basis: 100px;
요소가 가상 클래스를 통해 전상태와 후상태를 오고갈때 자연스럽게 변화하도록 하는 효과
transition: 속성명 지속시간 타이밍함수 대기시간;
: 지속시간 필수
div {
width: 100px;
height: 100px;
background-color: royalblue;
transition:
width 10s, /* 여러 속성에 다른 전환 효과 부여 가능 */
height 5s,
background-color 2s;
}
개별속성
transition-property: 전환 효과를 사용할 속성 이름 지정
속성값
trainsition-property: width;
: 가로너비의 변화에만 전환 효과가 적용됨.transition-duration: 전환 효과의 지속시간
속성값
transition-timing-function: 전환 효과의 타이밍(Easing) 함수 지정
easing 함수: 시간에 따른 전환의 진행 정도를 표현하는 함수
속성값
transition-delay: 전환 효과 시작까지 대기시간 지정
속성값
transition: 1s .5s;
: 전환 효과가 1초동안 지속되고 0.5초의 delay를 가진다.
transform: 변환함수1 변홤하수2 변환함수3 ... ;
transform: 원근법 이동 크기 회전 기울임;
변환함수
2D 변환함수
3D 변환함수
rotate, rotateX, rotateY
perspective
transform: perspective(500px) rotateX(45deg);
skewX, skewY
❗transform 속성의 함수가 아니라 속성으로서의 perspective
속성값
perspective 속성 vs perspective 함수
분류 | 예제 | 적용 대상 | 기준점 설정 |
---|---|---|---|
속성 | perspective: 600px; | 관찰 대상의 부모 | perspective-origin |
함수 | transform: perspective(600px), ... ; | 관찰 대상 | transform-origin |
rotateX, rotateY를 180도 이상 적용했을때 뒷면을 어떻게 처리할지 정의
속성값