box-sizing
은 박스의 크기를 어떤 것을 기준으로 계산할 지를 정하는 속성이다.
box-sizing: content-box | border-box | initial | inherit
content-box
: content 영역을 기준으로 크기를 정한다.
Final element width = right border + right padding + width + left padding + left border
border-box
: 테두리를 기준으로 크기를 정한다.
Final element width = right border + right padding + width + left padding + left border
initial
: 기본값으로 설정한다.
inherit
: 부모 요소의 속성값을 상속받는다.
(참고 사이트 : https://www.codingfactory.net/10630)
.box{
background-color: gray;
display: inline-block;
width: 100px;
height: 100px;
padding: 10px;
border: 5px black solid;
}
.box:last-child{
box-sizing: border-box;
}
* {
/* border-top: 10px solid #1098ad; */
margin: 0;
padding: 0;
box-sizing: border-box;
}
Flexbox는 1차원 레이아웃을 구축하기 위한 관련 CSS 속성 집합이다.
<style>
.el--1 {
background-color: blueviolet;
}
.el--2 {
background-color: orangered;
}
.el--3 {
background-color: green;
height: 150px;
}
.el--4 {
background-color: goldenrod;
}
.el--5 {
background-color: palevioletred;
}
.el--6 {
background-color: steelblue;
}
.el--7 {
background-color: yellow;
}
.el--8 {
background-color: crimson;
}
.container {
/* STARTER */
font-family: sans-serif;
background-color: #ddd;
font-size: 40px;
margin: 40px;
/* FLEXBOX */
display: flex;
}
</style>
...
<div class="container"> <!-- flex container-->
<!-- flex items-->
<div class="el el--1">HTML</div>
<div class="el el--2">and</div>
<div class="el el--3">CSS</div>
<div class="el el--4">are</div>
<div class="el el--5">amazing</div>
<div class="el el--6">languages</div>
<div class="el el--7">to</div>
<div class="el el--8">learn</div>
</div>
display: flex;
.el--1 { /* HTML */
background-color: blueviolet;
align-self: flex-start;
order: 2;
}
.el--2 {
background-color: orangered;
}
.el--3 {
background-color: green;
height: 150px;
}
.el--4 {
background-color: goldenrod;
}
.el--5 { /* amazing */
background-color: palevioletred;
align-self: stretch;
order: 1;
}
.el--6 { /* languages */
background-color: steelblue;
order: -1;
}
.el--7 {
background-color: yellow;
}
.el--8 {
background-color: crimson;
}
gap
margin을 사용했을 때 (마지막 항목에도 margin이 존재한다.)
![]()
.el { /* 각 요소의 공통된 class */ margin-right: 30px; }
gap을 사용했을 때
.container{ /* 부모 요소 */ /* STARTER */ ... /* FLEXBOX */ ... gap: 30px; }
💡 .el {
flex-grow: 0; → 안 커짐
flex-shrink: 1; → 줄어듦
flex-basis: auto;
}
flex-basis
flex 아이템의 초기 크기를 지정한다. box-sizing
을 따로 지정하지 않는다면 콘텐츠 박스의 크기를 변경한다.
.el {
flex-basis: 100px;
}
→ 요소의 콘텐츠가 100px보다 작으면 100px로 만들어주고 크면 요소들이 확장된다.
flex-shrink
flex 아이템의 크기가 flex 컨테이너보다 클 때 사용하는 속성이다. 0이면 no, 디폴트 값인 1이면 yes로 이에 따라 flex-container
요소 내부에서 flex-item
요소의 크기가 유지되거나 축소된다.
.el {
flex-basis: 200px;
flex-shrink: 0;
}
flex-grow
flex 아이템의 크기가 flex 컨테이너 내부에서 할당 가능한 공간의 정도를 선언한다.
숫자가 커질수록 차지할 수 있는 공간이 커진다.
.el{
flex-grow: 1;
}
.el--1 {
background-color: blueviolet;
flex-grow: 2;
}
.el--2 {
background-color: orangered;
flex-grow: 1;
}
flex
shorthand로 순서는 다음과 같다 : -grow | - shrink | -basis
(flex 관련 도움 받은 사이트:
https://choar816.tistory.com/119
https://blogpack.tistory.com/863)