화면개발이 재밌어지기 시작한 요즘 프론트 공부를 하는겸해서 CSS 도 공부를 해보려고 한다. 김버그 님의 CSS 강좌 를 들으면서 공부한 내용들을 정리해 두자
가장 안쪽 파란색 부분에 우리가 작성하는 여러 content 들이 들어간다고 생각하면 된다.
padding : 우리가 작성한 content를 감싸고 있는 테두리 (border) 가 있는데, 이 테두리와의 간격을 의미한다.
margin : 마진의 경우 요소 간의 간격이라고 생각
아래 사진에 적용한 css 이다. padding을 보면 글자를 바로 감싸고 있는 content-box 를 기준으로 150px 씩 움직인다는걸 알 수 있다.
margin 값을 50px 을 줘서 요소 사이의 top 간격이 50px만큼 떨어지는걸 확인
.box{
width: 300px;
height: 300px;
background-color: skyblue;
padding: 150px 0px 0px 150px;
margin-top: 50px;
}
한가지 더 부모의 height 를 선언하지 않으면, 자식요소들의 height 의 합이 자동으로 부모의 height가 된다.
아래와 같이 css를 적용했는데... width 와 height 를 설정한것보다 크게 나오는걸 알 수 있다. 요게 content-box 를 기준으로 크기를 잡는거라 전체 padding 값이랑 border 사이즈 까지 적용되면 우리가 생각한 것처럼 렌더링이 안될 수가 있다.
.box{
width: 300px;
height: 300px;
background-color: skyblue;
border: black solid 55px;
}
아래와 같이 "*" 을 이용해서 모든 태그의 box-sizing 기준을 border-box 로 바꿔줄 수 있다.
*{
box-sizing: border-box;
}
블록의 경우 width 를 설정을 하면 나머지 부분은 margin 으로 채워줘서 다른 요소들이 침입하는걸 막아준다. 예를들면 div 태그가 있다.
반대로 inline 의 경우 가로로 주르륵 요소들을 나열 할 수 있다. 대신에 부모 박스의 공간이 부족하게 될 때 줄바꿈을 해서 주르륵 요소들을 나열할 수 있다. 예를들면 span 태그가 있다.
inline 성질을 가진 요소들은 margin top,bottom / padding top,bottom ... 요런 값들을 적용하지 않아야 한다. (적용이 이상하게 된다. 위에 있는 글자들을 덮어버림. 일종의 문법 오류라고 생각하면 될까?)
뭔가 height 설정이 안먹히거나 할때 computed - display 속성이 inline 으로 되어 있지는 않은지 한번 확인해봐!
블럭과 인라인의 성질을 가지고 있는 속성이다. 다음과 같이 display 속성을 변경해주면 두속성의 성질을 합쳐지게 padding, width, margin... 등등의 값을 설정할 수 있다.
span{
display: inline-block;
}
block 의 성질 때문에 가로 배치하는거에 어려움이 있었다. 이럴 때 float 설정을 이용할 수 있다.
float 설정을 하면 해당요소를 부모영역에서 위로 띄운다고 생각하자. 그러면 그럼 부모영역의 height 크기를 따로 설정해 두지 않았다면, 다른 자식요소들의 height의 합만큼 다시 설정이 되어서 레이아웃이 깨질 수 있다는걸 유의!
flaot 을 하면 block 성질이 깨지게 된다. (margin을 채우는 성질이 깨지게 된다.)
clearfix 속성을 사용해서 레이아웃이 깨지는걸 수정할 수 있다. 요걸 사용하면 float 된 다른 형제 요소를 찾을 수 있다. 이렇게 되면 부모요소에 포함된 자식요소가 위에 공간을 침범하지 않는다. 부모입장에서도 집나간 형제 요소는 모르지만 다른 자식이 공간을 잡고 있는걸 인식해서 전체 공간을 잡고 있는다.
아래 캡쳐처럼 ::after 가상요소에 clear 속성을 추가해서 float된 다른 형제 자식들 바로 다음에 올 수 있도록 한다. 참고로 clear 속성은 block 인 요소에만 적용할 수 있다고 한다. (요렇게 가상요소를 사용하는게 html 을 더럽히지 않고 깔끔하게 해결하는 방법이라고 한다.)
요즘은 잘 안쓰는 속성인가? 레이아웃이 너무 잘 망가진다.
-fixed : viewport 를 기준으로 움직이는듯
초록색, 파란색 버튼의 위치를 잡을 때 position: absolute 속성을 준다음에 top : 50%를 주면 뭔가 보기에 가운데가 아닌거 같은데, 이거는 좌상, 우상 꼭지점을 기준으로 가운데 위치를 잡아서 그렇다. 이때 transform 속성으로 다음과 같이 주면 자기 자신(버튼) 의 높이값의 절반만큼의 위치를 옮겨 준다.
#prev,
#next{
position: absolute;
transform: translateY(-50%);
}
제목이랑 내용 모두 block 속성인데 text-align 설정을 center 로 해도 뭔가 이상하지? 이건 내용부분에 width를 임의로 설정을 해줘서 그런거다. 그럼 나머지 부분은 자동으로 마진으로 채워진다.
그래서 따로 margin 설정을 해줘야함
요런 모달창 만들때 참고하시오
float 이나 position 보다 훨씬 간편한 방법인듯
justify-content: center , end, ... 으로 어느쪽으로 정렬할지 정할수 있다. (가운데 정렬 삽가능) space-between 요거는 요소들 사이의 간격을 같게 해서 정렬해준다. space-around 요거는 요소를 가운데 두고 좌우로 같은 크기의 간격으로 정렬
flex-direction 을 row로 하고, align-items: center, flex-start , flex-end 로 통해서 세로축을 기준으로(위아래) 를 정렬할 수 있다.
align-content: ; 를 통해서 정렬을 하면 전체의 큰 line 을 하나로 보기 때문에 정렬을 뭉태기로 할 수 있다. ??(flex2 강의 다시 들어보기)
뭔가 이해하기 어려우면 우선 align-items 를 먼저 사용해보고 뭔가 이상하게 된다 싶으면 align-content 로 시도를 해봐라!!
order: n; 각각의 요소에 예를들면 1,2,3 을 주면 정렬순서를 조절할 수도 있다.
align-item & content 는 수직 방향으로 정렬할 때 사용하고 justify-content 는 가로 방향으로 정렬하는듯(근데 이게 flex-direction 의 row, col 에 따라서 바뀔 수도 있는듯)
meta 태그에 name="viewport" content="width-device=width" 설정을 해주면 반응형으로 화면을 설정한다고 선언한다.
그리고 나서 화면 크기에 따라서 다음과 같이 적용시켜줄 수 있다.
@media screen and (min-width: 576px){
.box{
불라불라
}
}
px : 절대단위
em : 실제로 적용된 폰트 사이즈
예를 들어서 p 태그를 감싸고 있는 부모의 font-size가 20px 라고 하면 p태그의 font-size 도 20px 이 먹히는걸 볼 수 있다.
rem (root em) : root는 html 자체를 의미한다. html에 적용된 폰트 사이즈를 1rem 으로 본다는 의미다.
font-family : 폰트 서체
transition: font-size 2500ms 요렇게 하면 폰트 사이즈가 2.5초동안 스르륵 변한다.
요거도 Transition 이랑 비슷한듯
@keyframes move-box{
from{
top: 0;
background-color : blue;
}
to{
top: 200px;
background-color : red;
}
}
direction: alternate 으로 하면 방향을 번갈아가면서 할 수 있다. 이걸 안쓰면 a -> b ->a->b ... 쓰면 a->b->a->b 방향으로 와리가리 친다.
.cancel-button{
background-color: xxx;
transition: box-shadow 250ms ease-in;
}
.cancel-button:hover{
box-shadow: 0 10px 16px 0 색상;
}
-transform : translate() : 위치를 옮길때, 근데 다른 주변 요소들이 이 요소의 원래 위치를 알고 있기 때문에 주변 요소들에 영향을 주지 않는다.
-transform : scale() : 크기 조정
-transform : rotate() : 각도 조정
-visibility : hidden; 안보이게 설정, 근데 본인의 위치는 계속 지키고 있음. 다른요소에 영향x