2019-7-20 CSS 다시 복습(Flex와 block, inline, inline-block)
CSS이론을 보고 실습을 했다가 헷갈려서 다시 이론을 복습했다.
block, inline, inline-block
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ineline Ex</title>
<style>
.box{
background-color: red;
width: 200px;
height: 200px;
border: 1px solid black;
display: inline;
}
</style>
</head>
<body>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</body>
</html>
- block은 element의 크기와 상관없이 옆에 block이 못오는것
- display:inline-block을 하면 블록이 나란히 놓을수 있다.
- inline은 박스의 모든 property설정값을 지운다. .box에 있는 프로퍼티들이 렌더링을 하면 아무것도 없다. 인라인은 text다. 텍스트는 높이도 폭도 없이 컨텐츠의 길이만 존재한다.
- 블록은 높이와 폭은 존재하지만 옆에 아무것도 못놓는다.
- 인라인-블록은 박스의 폭, 높이가 존재. 서로 옆에 놓을 수 있다.
Position
- position은 4종류가 있다.
- body에 margin:0, padding:0을 하는 이유는 브라우저에 기본값이 있기때문이다. 크롬은 기본값이 margin:8이다.
- default로 모든 박스의 포지션은 static이다. element를 놓으면 그냥 거기에 딱 존재하는것이다. 정적이다.
- fixed 포지션을 하면 우리가 보이는 화면에 딱 고정된다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
html, body{
height: 100%;
margin: 0;
padding: 0;
background-color: red;
}
body{
height: 400%;
}
.abs-box{
width: 400px;
height: 400px;
background-color: yellow;
}
.abs-child{
width: 100px;
height: 100px;
background-color: green;
position: absolute;
right: 0;
}
</style>
</head>
<body>
<div class="abs-box">
<div class="abs-child"></div>
</div>
</body>
</html>
- 위의 경우. abs-box와 abs-child가 따로 논다. 종속관계인데 왜그럴까?.. father에 해당하는 부모를 못찾아서? 뭔소리지? 나도 강의보면서 놀랐다…
- 포지션이 absolute가 되면 html에서 해당 element와 관계된(relative-부모박스)element를 찾아보고 이에 대응하는 포지션이 결정된다. 위에서는 상응하는 부모박스가 없어서 적용이 안된거다.
.abs-box{
width: 400px;
height: 400px;
background-color: yellow;
position: relative;
}
.abs-child{
width: 100px;
height: 100px;
background-color: green;
position: absolute;
right: 0;
}
- 부모박스의 포지션을 relative로 설정을 하면 된다.!!!
flex
- 자동으로 완성되는 그리드가 없었다. flex를 사용을 하면된다.
- flex를 사용할때는 부모박스(컨테이너)를 만들고, 자녀박스를 정렬?한다
selector
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Selector</title>
</head>
<body>
<div class="container">
<div class="box"></div>
<div class="box"></div>
<div class="box">
<input type="password">
<input type="submit">
</div>
</div>
</body>
</html>
- submit에 스타일을 적용할때 혼자작업을 하면 문제가 안되지만 팀으로 작업을 하면 문제가 생긴다.
- 가상셀렉터를 적용한다. 가상셀렉터란 셀렉터인데 element가 아닌것을 말한다.
<head>
<meta charset="UTF-8">
<title>Selector</title>
<style>
input[type="submit"]{
background-color: red;
}
</style>
</head>
- 위의 박스1,2,3중에 html태그, id, class의 사용없이 어떻게 박스3의 색깔만 바꿀까?
.box:last-child{
background-color: pink;
}
- last-child라는 가상셀렉터를 사용하면 된다. first-child도 있다. 가운데는? nth-child(2)이런식으로 n번째 자식을 선택할수도 있다.
- nth-child(1)을 하면 1번째 요소를 선택한다. index가 0부터 시작하는게 아니다.
.box:nth-child(2n){ background-color: pink; }
.box:nth-child(2n+1){ background-color: pink; }
- 2n, 2n+1등도 가능하다.
- input+box{ css } : 서로가 형제라는 뜻이다.
- input>box는 direct child를 말한다. 자손요소는 적용이 안된다.
css state
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSS State</title>
<style>
.box{
background-color: red;
font-size: 40px;
}
.box:hover{
background-color: pink;
}
.box:active{
background-color: green;
}
.box:focus{
background-color: blue;
}
</style>
</head>
<body>
<textarea class="box">lalalalal</textarea>
</body>
</html>
- 개발자 도구를 열어서 .hov를 들어가면 active, focus, visited, hover라는 상태들이 있다.
- hover state는 마우스가 위로 올라가면 pink로 변한다.
- active는 박스를 클릭하면 변한다.
- focus를 하면 다른 상태들이 무시된다?
느낀점
css를 보고 block이란 개념에 대해서 알게 되었다. box모델을 공부하면서 padding, margin등에 대해서 찾게 되었고, flex모델을 하면서 주축과 교차축에 대해 알게되었다. 이 부분에 대한것은 프로젝트의 레이아웃을 짜면서 옆에서 찾아보고 찾아본 결과였다. 확실히 직접 적용을 하면서 하다보니 절박함을 바탕으로 이해가 더 잘됬다.
Written on July 19, 2019