position : 요소의 위치 지정 기준
기본 값 : static(기준 없음)
position: relative; => 요소 자신을 기준, 화면에는 아무런 변화가 없다.
만약 뷰포트 기준이 아닌 다른 요소를 기준으로 삼고 싶다면 해당 요소에 position: relative;를 사용해주면 된다.
position: absolute; => 위치 상 부모 요소를 기준, 위치 상 부모 요소를 꼭 확인해야 한다.
position: absolute;를 부여하게 되면 결과적으로 부여되어져 있는 요소에 주변과의 상호 작용이 무너진다.
★ 단, 요소의 조상 중 하나가 transform, perspective, filter 속성 중 어느 하나라도 none이 아니라면 뷰포트 대신 그 조상을 컨테이닝 블록으로 삼는다.
★header(뷰포트)에서 width: auto를 사용하면 이 경우 최대로 넓어짐 -> 최소로 사용하는 것으로 바뀐다. 그러므로 width:100%를 사용하자.
position: fixed; => 뷰포트(브라우저)를 기준
★ 단, 요소의 조상 중 하나가 transform, perspective, filter 속성 중 어느 하나라도 none이 아니라면 뷰포트 대신 그 조상을 컨테이닝 블록으로 삼는다.
★header(뷰포트)에서 width: auto를 사용하면 이 경우 최대로 넓어짐 -> 최소로 사용하는 것으로 바뀐다. 그러므로 width:100%를 사용하자.
<div class="grand">
<div class="parent">
<div class="child c1"></div>
<div class="child c2"></div>
</div>
</div>
body {
width: 4000px;
height: 9000px;
}
.grand {
width: 400px;
height: 300px;
background-color: royalblue;
}
.parent {
width: 300px;
height: 200px;
background-color: orange;
}
.child {
width: 100px;
height: 100px;
background-color: red;
border: 2px solid;
}
.child.c1 {
position: sticky;
top: 0;
left: 0;
}
.child.c2 {
}
/* 뷰포트 대신 overflow이용 코드, 다음 선택자만 코드 수정 */
.parent {
width: 2000px;
height: 2000px;
background-color: orange;
}
.grand {
width: 400px;
height: 300px;
background-color: royalblue;
overflow: auto;
}
top, bottom, left, right : 요소의 각 방향별 거리 지정
기본 값 : auto(브라우저가 계산)
단위 : px, em ,rem 등
position 속성의 값으로 absolute, fixed가 지정된 요소는, display: block;으로 변경된다.
Flex container에 부여할 수 있는 속성들 :
display, flex-flow, flex-decoration, flex-wrap, justify-content, align-content, align-items
아래의 예시 코드에서 하나 하나 경우를 주석해보고 실행 해보자.
<div class="container">
<!-- .itme{$$}*7 -->
<div class="item">01</div>
<div class="item">02</div>
<div class="item">03</div>
<div class="item">04</div>
<div class="item">05</div>
<div class="item">06</div>
<div class="item">07</div>
</div>
.container {
height: 400px;
margin: 30px;
border: 2px solid red;
display: flex;
/* 수평 정렬 방법 */
justify-content: flex-start;
justify-content: center;
justify-content: flex-end;
justify-content: space-between;
justify-content: space-around;
/* 수직 정렬 방법 */
align-items: flex-start;
align-items: center;
align-items: flex-end;
/* item이 두줄 이상일 때 */
flex-wrap: wrap;
/* 기본 값: stretch 쭉 늘려라 */
align-content: flex-start;
align-content: center;
align-content: flex-end;
align-content: space-between;
align-content: space-around;
/* item이 한 줄 일때 */
align-items: flex-start;
align-items: center;
align-items: flex-end;
}
.item {
width: 100px;
height: 100px;
border: 2px solid;
font-size: 40px;
}
Flex Items에 부여할 수 있는 속성들 :
order, flex, flex-grow, flex-shrink, flex-basis, align-self
order : Flex Item의 정렬되는 순서
기본 값 : 0(순서 없음), 숫자가 작을 수록 먼저 정렬된다. 음수도 사용 가능하다.
flex : flex-grow, flex-shrink, flex-basis의 단축 속성
flex-grow : Flex Item의 증가 너비 비율
기본 값 : 0(증가 비율 없음), 숫자로 증가 비율을 지정 가능하다.
예시로 위의 사진을 보면 1, 2번 상자는 flex-grow가 1, 3번 상자는 flex-grow가 2이다.
예시로 위의 사진을 보면 실제로는 파란색 영역 안에 주황색 1, 2, 3번 요소가 찌그러져서 들어가야 한다.
하지만 flex-shrink: 0;을 사용하여 해당 요소의 크기를 비율 감소를 0으로 적용시키지 않아 유지 시킨것을 볼 수 있다.
transition : 요소의 전환(시작과 끝) 효과를 지정하는 단축 속성
transitiotn : 속성명 지속시간 타이밍 함수 대기시간;
transitiotn-property : 전환 효과를 사용할 속성명을 지정
기본 값 : all(모든 속성에 적용), 전환 효과를 사용할 속성 이름 입력해서 사용한다.
transitiotn-duration : 전환 효과의 지속시간을 지정, 단축형으로 작성할 때 필수 포함 속성이다.
기본 값 : 0s(전환 효과 없음), 시간을 입력하여 지속시간(s)을 설정한다.
transitiotn-timing-function : 전환 효과의 타이밍(Easing) 함수를 지정
기본 값 : ease(느리게-빠르게-느리게)
tranform : 요소의 변환 효과
px(픽셀)
translate(x,y) : 이동(x축, y축)
translateX(x) : 이동(x축)
translateY(y) : 이동(y축)
scale(x, y) : 크기(x축, y축)
deg(각도)
rotate(degree) : 회전(각도)
skewX(x) : 기울임(x축)
skewY(y) : 기울임(y축)
px(픽셀)
perspective(n) : 원근법(거리), transform 제일 앞부분에적어줘야 한다!
deg(각도)
rotateX(x) : 회전(x축)
rotateY(y) : 회전(y축)
backface-visibility : 3D 변환으로 회전된 요소의 뒷면 숨김 여부
기본 값 : visible(뒷면 보임), 뒷면을 숨길려면 hidden을 해주면 된다.
pespective : 하위 요소를 관찰하는 원근 거리를 지정, CSS 속성이다.
단위 : px 등
perspective: 600px; => 속성, 적용대상 : 관찰 대상의 부모
기준점 설정 => perspective-origin
transform: perspective(600px) => 함수, 적용대상 : 관찰 대상
★ perspective 함수는 맨 앞에다 먼저 작성을 해줘야 한다.
기준점 설정 => transform-origin: 100% 0%; (x축, y축)